NginxNginx 常用的基础配置
Posted Sun Peng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NginxNginx 常用的基础配置相关的知识,希望对你有一定的参考价值。
文章目录
一、基础配置
user root;
worker_processes 1;
events
worker_connections 10240;
http
log_format '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"';
include mime.types;
default_type application/octet-stream;
sendfile on;
#autoindex on;
#autoindex_exact_size off;
autoindex_localtime on;
keepalive_timeout 65;
gzip on;
gzip_disable "msie6";
gzip_min_length 100;
gzip_buffers 4 16k;
gzip_comp_level 1;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_types "*";
gzip_vary off;
server_tokens off;
client_max_body_size 200m;
server
listen 80 default_server;
server_name _;
return 403 /www/403/index.html;
include ../serve/*.conf;
二、隐藏 nginx 版本信息
http
server_tokens off;
三、禁止ip直接访问80端口
server
listen 80 default;
server_name _;
return 500;
四、启动 web 服务 (vue 项目为例)
server
# 项目启动端口
listen 80;
# 域名(localhost)
server_name _;
# 禁止 iframe 嵌套
add_header X-Frame-Options SAMEORIGIN;
# 访问地址 根路径配置
location /
# 项目目录
root html;
# 默认读取文件
index index.html;
# 配置 history 模式的刷新空白
try_files $uri $uri/ /index.html;
# 后缀匹配,解决静态资源找不到问题
location ~* \\.(gif|jpg|jpeg|png|css|js|ico)$
root html/static/;
# 图片防盗链
location ~/static/.*\\.(jpg|jpeg|png|gif|webp)$
root html;
valid_referers *.deeruby.com;
if ($invalid_referer)
return 403;
# 访问限制
location /static
root html;
# allow 允许
allow 39.xxx.xxx.xxx;
# deny 拒绝
deny all;
五、PC端和移动端使用不同的项目文件映射
server
......
location /
root /home/static/pc;
if ($http_user_agent ~* '(mobile|android|iphone|ipad|phone)')
root /home/static/mobile;
index index.html;
六、一个web服务,配置多个项目 (location 匹配路由区别)
server
listen 80;
server_name _;
# 主应用
location /
root html/main;
index index.html;
try_files $uri $uri/ /index.html;
# 子应用一
location ^~ /store/
proxy_pass http://localhost:8001;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 子应用二
location ^~ /school/
proxy_pass http://localhost:8002;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 静态资源读取不到问题处理
rewrite ^/api/profile/(.*)$ /(替换成正确路径的文件的上一层目录)/$1 last;
# 子应用一服务
server
listen 8001;
server_name _;
location /
root html/store;
index index.html;
try_files $uri $uri/ /index.html;
location ^~ /store/
alias html/store/;
index index.html index.htm;
try_files $uri /store/index.html;
# 接口代理
location /api
proxy_pass http://localhost:8089;
# 子应用二服务
server
listen 8002;
server_name _;
location /
root html/school;
index index.html;
try_files $uri $uri/ /index.html;
location ^~ /school/
alias html/school/;
index index.html index.htm;
try_files $uri /school/index.html;
# 接口代理
location /api
proxy_pass http://localhost:10010;
七、配置负载均衡
upstream my_upstream
server http://localhost:9001;
server http://localhost:9002;
server http://localhost:9003;
server
listen 9000;
server_name test.com;
location /
proxy_pass my_upstream;
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
八、SSL 配置 HTTPS
server
listen 80;
server_name www.xxx.com;
# 将 http 重定向转移到 https
return 301 https://$server_name$request_uri;
server
listen 443 ssl;
server_name www.xxx.com;
ssl_certificate /etc/nginx/ssl/www.xxx.com.pem;
ssl_certificate_key /etc/nginx/ssl/www.xxx.com.key;
ssl_session_timeout 10m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location /
root /project/xxx;
index index.html index.htm index.md;
try_files $uri $uri/ /index.html;
NginxNginx基础操作
文章目录
一、Nginx概述
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx 是一个很强大的高性能Web和反向代理服务,它具有很多非常优越的特性:
在连接高并发的情况下,Nginx是Apache服务不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型。
二、Nginx目录简介
/usr/sbin/nginx
Nginx的命令程序/etc/nginx/nginx.conf
Nginx配置文件/var/log/nginx
Nginx日志文件/usr/share/nginx/
Nginx默认虚拟主机目录
三、Nginx常用命令
命令 | 描述 |
---|---|
sudo nginx | 启动Nginx |
sudo nginx -s stop[quit] | 停止Nginx |
sudo nginx -s reload | 重启Nginx |
sudo nginx -c /etc/nginx/nginx.conf | 加载指定配置文件启动 |
sudo nginx -v | 查看Nginx版本号 |
四、Nginx配置文件
4.1 nginx.conf
nginx.conf为Nginx的主要配置文件,其中包含全局配置、工作模式和HTTP配置等信息。以下为该文件的默认配置
# Nginx运行时用户名称
user nginx;
# 工作进程数量,根据CPU的核心数来设置
worker_processes auto;
# 异常日志保存路径以及日志等级
error_log /var/log/nginx/error.log notice;
# PID文件位置
pid /var/run/nginx.pid;
# 工作模式配置
events
# 单个进程运行时最大连接数
worker_connections 1024;
# HTTP配置
http
# 媒体类型文件位置
include /etc/nginx/mime.types;
# 默认媒体类型
default_type application/octet-stream;
# 日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 运行时日志存放路径以及日志等级
access_log /var/log/nginx/access.log main;
# 是否允许调用sendfile函数来输出文件
sendfile on;
#tcp_nopush on;
# 连接超时时间(单位s)
keepalive_timeout 65;
# 是否开启gzip压缩
#gzip on;
# 引入外部配置文件,包含虚拟主机信息
include /etc/nginx/conf.d/*.conf;
4.2 default.conf
default.conf为虚拟主机的配置文件
server
# 端口号
listen 80;
# 域名(访问地址)
server_name localhost;
# 运行时日志保存位置及日志等级
#access_log /var/log/nginx/host.access.log main;
# 配置项目运行目录位置及首页
location /
root /usr/share/nginx/html;
index index.html index.htm;
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
# 访问异常页面显示
error_page 500 502 503 504 /50x.html;
# 配置错误页面位置及页面
location = /50x.html
root /usr/share/nginx/html;
如果需要配置多个项目,可以创建不同的*.conf文件,配置对应的项目
五、部署项目
Nginx的优势在于可以创建不同的虚拟主机,从而运行多个项目。例如我们在主机的主目录上创建两个不同的项目淘宝和京东商城。
此时我们在Nginx的配置目录下创建对应的配置文件:
jd.conf
server
listen 80;
server_name www.jd.test.com;
location /
root /home/dogh/software/nginx/jd;
index index.html index.htm;
taobao.conf
server
listen 80;
server_name www.taobao.test.com;
location /
root /home/dogh/software/nginx/taobao;
index index.html index.htm;
创建对应的首页并重启Nginx。由于两个程序在同一个物理机上,所以采用使用不同的域名的方式来分别进行访问,此时需要配置访问主机的hosts文件使其能够正常解析域名。
六、动静分离
使用Tomcat加载静态资源时普遍效率不高,会影响Web响应慢,并且占用系统资源。此时可以使用Nginx去加载静态资源文件,将动态请求依旧交给Tomcat去处理。
6.1 加载静态资源
编辑配置文件,指定静态资源的本地路径
# 使用通配符指定需要加载的文件类型
location ~ .*\\.(js|css|ico|png|jpg|eot|svg|ttf|woff)
root /home/dogh/software/static;
将项目中静态资源放到该目录中,重启Nginx
6.2 图片服务器应用
在实际应用中,对于项目运行过程中产生的文件资源会存放在单独的服务器中,所以需要访问的时候就需要通过HTTP协议访问文件服务器上的资源。此时Nginx就能够很好的实现这一功能。
- 通过FTP上传图片至指定目录
- 修改default.conf文件,添加文件访问的路由
# 设置访问路由 location /images # 设置图片存储位置(图片位置为root地址加路由地址) root /home/dogh/software/nginx; # 是否开启文件目录,可供用户查询所有文件 autoindex on;
- 重启Nginx服务
此时就可以通过HTTP协议直接访问主机的图片
需要注意访问权限问题,在Nginx的主配置文件中,Nginx的运行使用的是
nginx
用户,若文件并不是通过Nginx程序上传,会由于用户不同导致访问权限受限,则需要提升文件的权限或者修改Nginx的运行用户
方法一:
cd ~/software/images
# 提升文件权限,使其他用户也可访问
chmod 604 image.jpg
方法二:
修改nginx.conf中第一行use nginx
修改为use root
提升Nginx运行权限,保存后重启Nginx后即可。
若不修改文件权限或Nginx运行权限,在访问图片时就会报403无法访问的错误
七、反向代理
7.1 正向代理与反向代理
7.1.1 正向代理
正向代理是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。
正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性(由mod_cache提供)减少网络使用率。
使用ProxyRequests指令即可激活正向代理。因为正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。
7.1.2 反向代理
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。
7.1.3 区分
- 正向代理主要面对的是客户端,负责接收不同客户端的请求转发给服务端;而反向代理是面对服务端,负责将请求分发给集群。
- 正向代理主要保护的客户端的信息安全,隐藏客户端信息;而反向代理主要保护服务端信息安全,避免服务端被攻击。
7.2 使用Nginx搭建代理服务器
7.2.1 创建配置文件
# 复制一个新的配置文件
sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/proxy.conf
7.2.2 添加代理
修改proxy.conf
添加代理服务器
# 定义Tomcat集群
upstream tomcatserver
server 192.168.124.21:8080;
server
listen 80;
server_name www.tomcat.com;
location /
# 指定代理地址,注意要使用HTTP协议
proxy_pass http://tomcatserver;
若需要代理多个服务端,则在upstream
中追加server
即可并指定IP
注意代理集群名称(upstream)不能出现特殊字符
7.3 负载均衡
项目通过反向代理,可以使用Nginx代理多个服务器,因此就会涉及到请求最终会发送给哪个服务端去处理的问题。
Nginx默认使用轮询的方式进行请求,及请求完1号服务器,第二条请求去请求2号服务器依次类推。也可以为每个服务器设置权重,增加获取请求的概率。
7.3.1 负载均衡策略
- 轮询
Nginx的默认负载均衡策略,按照请求顺序你一个,我一个。
示例:upstream tomcatserver server 192.168.124.21:8080; server 192.168.124.22:8080;
- 权重
增加服务端获得请求的概率,在每个server
的代理服务后加上weight=1
,权重越大获得请求就越多。
示例:upstream tomcatserver server 192.168.124.21:8080 weight=100; server 192.168.124.22:8080 weight=200;
- IP绑定ip_hash
每个请求发送到服务端后进行绑定,这样为每个访客固定一个服务端,可以解决Session的问题。
示例:upstream tomcatserver ip_hash; server 192.168.124.21:8080; server 192.168.124.22:8080;
- fair
根据各个服务端的响应时间分配请求,响应时间短的优先分配。
示例:upstream tomcatserver server 192.168.124.21:8080; server 192.168.124.22:8080; fair;
- url_hash
按访问url的hash结果分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。upstream tomcatserver server 192.168.124.21:8080; server 192.168.124.22:8080; hash $request_uri; hash_method crc32;
八、高并发
- 负载均衡:使用服务集群处理
- 动静分离:使用Nginx、CDN搭建静态资源服务器
- 缓存:以空间换时间,提高系统效率
- 限流:对访问流量进行控制
- 降级:对其他非必要业务进行服务降载
以上是关于NginxNginx 常用的基础配置的主要内容,如果未能解决你的问题,请参考以下文章