Nginx常见配置
文件结构
... events { ... } http { ... server { ... location [PATTERN] { ... } location [PATTERN] { ... } } server { ... } ... }
|
全局块
配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
events块
配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
http块
可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
server块
配置虚拟主机的相关参数,一个http中可以有多个server。
location块
配置请求的路由,以及各种页面的处理情况。
示例
error_log log/error.log debug; events { accept_mutex on; multi_accept on; worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; access_log log/access.log myFormat; sendfile on; keepalive_timeout 65; upstream mysvr { server 127.0.0.1:7878; server 192.168.10.121:3333 backup; } error_page 404 https://www.baidu.com; server { keepalive_requests 120; listen 4545; server_name 127.0.0.1; location ~*^.+$ { proxy_pass http://mysvr; deny 127.0.0.1; allow 172.18.5.54; } } }
|
上面是nginx的基本配置,需要注意的有以下几点:
1、参数相关
$remote_addr与$http_x_forwarded_for 用以记录客户端的ip地址; $remote_user :用来记录客户端用户名称; $time_local : 用来记录访问时间与时区; $request : 用来记录请求的url与http协议; $status : 用来记录请求状态;成功是200, $body_bytes_s ent :记录发送给客户端文件主体内容大小; $http_referer :用来记录从那个页面链接访问过来的; $http_user_agent :记录客户端浏览器的相关信息;
|
2、每个指令必须有分号结束。
常用功能
http代理、反向代理
项目地址:http://192.168.37.136:8080/a/
nginx地址:192.168.37.133的服务器下面安装成功了Nginx。
那怎么样将tomcat下部署的网站使用Nginx代理呢?
下面是server相关的代理配置:
http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream gw { server 192.168.37.136:8080 weight=1; } server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } location /a { proxy_pass http://gw/a; } location /sapi { proxy_pass http://gw/shopappapi; } location /cas{ proxy_pass http://gw/cas-server-webapp-4.0.0/login; } location /doc{ proxy_pass http://gw/docs; }
error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
|
负载均衡
配置upstream
http {
…… upstream myserver { server 192.168.11.110:8080; server 192.168.11.110:8081; } ……
}
|
配置location
server { listen 80; server_name 192.168.11.110;
location / { proxy_pass http://myserver; root html; index index.html index.htm; } }
|
几种分配策略
1.轮询(默认的策略)每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,自动剔除 2.weight(权重) upstream myserver { server 192.168.11.110:8080 weight=10; server 192.168.11.110:8081 weight=10; } 3.ip_hash upstream myserver{ ip_hash; server 192.168.11.110:8080; server 192.168.11.110:8081; } 4.fair后端服务器谁响应时间越短,就分配给谁 upstream myserver { server 192.168.11.110:8080; server 192.168.11.110:8081; fair; }
|
web缓存
配置方式
http { proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
●path:强制参数,指定缓存文件的存放路径。 ●levels:定义了缓存目录的层级。每层可以用1(最多16种选择,0-f)或2(最多256种选择,00-ff)表示,中间用 : 分隔。 proxy_cache_path /data/nginx/cache; 代表所有缓存只有一个目录,比如/data/nginx/cache/d7b6e5978e3f042f52e875005925e51b proxy_cache_path /data/nginx/cache levels=1:2; 代表缓存是二层目录(有16*256=4096个目录),比如/data/nginx/cache/b/51/d7b6e5978e3f042f52e875005925e51b ●keys_zone:强制参数,定义共享内存区的名称和大小,该共享内存用于保存缓存项目的元数据(所有活动的key和缓存数据相关的信息),这样nginx可以快速判断一个request是否命中或者未命中缓存,1m可以存储8000个key,10m可以存储80000个key。 ●inactive:删除指定时间内未被访问的缓存文件,默认10分钟。 ●max_size:设置了缓存存储的上限,如果不指定,最大会用掉所有磁盘空间。 ●use_temp_path:直接把临时文件放在缓存目录中。
|
upstream cache_server{ server 192.168.60.44:80; server 192.168.60.112:80; } server { listen 80; server_name www.kfc.com; location / { proxy_cache my_cache; proxy_cache_valid 200 5m; proxy_cache_key $request_uri; add_header Nginx-Cache-Status $upstream_cache_status; proxy_pass http://cache_server; } } }
|
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off; server { listen 80; server_name cache.lion.club; if ($request_uri ~ \.(txt|text)$) { set $cache_name "no cache" } location / { proxy_no_cache $cache_name; proxy_cache my_cache; proxy_cache_valid 200 5m; proxy_cache_key $request_uri; add_header Nginx-Cache-Status $upstream_cache_status proxy_pass http://cache_server; } }
|
重定向
重定向的写法比较多有的版本不支持。下面是最新的写法。
server { listen 80; server_name domain.com; return 301 https://$server_name$request_uri; }
server { listen 443 ssl; server_name domain.com; }
|
Nginx http和https访问配置
同一域名下在开启https的时候访问http的地址会404,可以通过简单的配置重定向实现http也能访问。
server { listen 80; listen 443 ssl; ssl on; server_name 域名; index index.html index.htm index.php default.html default.htm default.php; ssl_certificate /usr/local/nginx/cert/21402058063066221.pem; //下载申请后阿里ssh提供的pem ssl_certificate_key /usr/local/nginx/cert/21402058063066221.key;//下载申请后阿里ssh提供的key ssl_session_timeout 5m; 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;
root /home/wwwroot/网站目录;
include laravel.conf; //好吧,这里是laravel配置,不一定合适您哈,请或略 #error_page 404 /404.html; include enable-php.conf;
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; }
location ~ .*\.(js|css)?$ { expires 12h; }
|
上面监听的80端口,443端口就没有意义了,既然是https传输数据我们必须将http转发到https上。
这里需要写一个重定向,也就是需要加一个server,监听80端口并转发到443server上。
server { listen 80; server_name www.domain.com; rewrite ^/(.*) https://$server_name$1 permanent; #跳转到Https }
|
或者
rewrite ^/(.*)$ https://domain.com/$1 permanent;
|
或者
rewrite ^ https://domain.com$request_uri? permanent;
|
博客Nginx配置
user nobody; worker_processes 1;
#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;
#pid logs/nginx.pid;
events { worker_connections 1024; }
http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name quxingping.com; return 301 http://blog.quxingping.com; } server { listen 80; server_name blog.quxingping.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name blog.quxingping.com; #ssl on; root /home/hexo; index index.html index.htm; ssl_certificate cert/a.crt; ssl_certificate_key cert/a.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; } server { listen 80; server_name biji.quxingping.com; proxy_set_header X-Forwarded-For $remote_addr; location / { proxy_pass http://127.0.0.1:9000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } error_page 400 403 404 497 https://$host$uri$args; }
server { listen 80; server_name upload.quxingping.com; location / { root html; index index.html index.htm; } } }
|