Nginx常见配置

特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过。如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/mao2080/

1、配置重定向

1 server {  
2     listen  80;  
3     server_name test.com;
4     rewrite ^(.*)$  https://$host$1 permanent;  
5 }  

2、配置443端口

 1     server {
 2         listen       443 ssl;
 3         server_name  example.com www.example.com;
 4         
 5         ssl_certificate     /usr/local/application/cert/server.crt;
 6         ssl_certificate_key /usr/local/application/cert/server.key;
 7         ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
 8         ssl_ciphers         HIGH:!aNULL:!MD5:!DH;
 9 
10         location / {
11             root   /usr/local/application/html;
12             index  index.html;
13         }
14 
15         error_page   500 502 503 504  /50x.html;
16         location = /50x.html {
17             root   html;
18         }
19 
20     }

3、配置反向代理

  现在web的趋势已经是动静分离模式,比如:我们访问http://localhost(静态网页),但是通常通过ajax访问后台接口的时候是不同端口或者ip的,这个时候会存在跨域问题,所以需要做下反向代理,比如我们请求后台接口:http://localhost/api/userController/getList,实际上Nginx遇到/api/会将请求转发给具体的后台8080端口的服务并等待服务给出最终响应。

 1     server {
 2         listen       80;
 3         server_name  location;
 4 
 5         location / {
 6             root   /usr/local/application/html;
 7             index  index.html;
 8         }
 9         
10         location /api/ {
11             proxy_pass   http://localhost:8080/;
12         }
13 
14         error_page   500 502 503 504  /50x.html;
15         location = /50x.html {
16             root   html;
17         }
18 
19     }

4、配置负载均衡

  1、Nginx的upstream目前支持的分配算法一共有3种

  1)、轮询 ——1:1 轮流处理请求(默认)
    每个请求按时间顺序逐一分配到不同的应用服务器,如果应用服务器down掉,自动剔除,剩下的继续轮询。

 1     upstream backends {
 2         server localhost:8080;
 3         server localhost:8081;
 4     }
 5     server {
 6         listen       80;
 7         server_name  location;
 8 
 9         location / {
10             root   /usr/local/application/html;
11             index  index.html;
12         }
13         
14         location /service/ {
15             proxy_pass   http://backends/;
16         }
17 
18         error_page   500 502 503 504  /50x.html;
19         location = /50x.html {
20             root   html;
21         }
22 
23     }

  2)、权重 ——you can you up

    通过配置权重,指定轮询几率,权重和访问比率成正比,用于应用服务器性能不均的情况。

1      upstream backends {
2         server localhost:8080 weight 20;
3         server localhost:8081 weight 80;
4     }

  3)、ip_hash算法
    每个请求按访问ip的hash结果分配,这样每个访客固定访问一个应用服务器,可以解决session共享的问题。

 1     upstream backends {
 2         ip_hash;
 3         server localhost:8080;
 4         server localhost:8081;
 5     }

2、第三方Nginx的upstream目前支持的分配算法一共有2种(目前还未验证)

  1)fair

  fair顾名思义,公平地按照后端服务器的响应时间(rt)来分配请求,响应时间短即rt小的后端服务器优先分配请求。

1     upstream backends {
2         server localhost:8080;
3         server localhost:8081;
4         fair;
5     }

  2)url_hash

  与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景下。

1     upstream backends {
2         server localhost:8080;
3         server localhost:8081;
4         hash $request_uri;
5         hash_method crc32;
6     }

  其中,hash_method为使用的hash算法,需要注意的是:此时,server语句中不能加weight等参数。

5、upstream配置详解

1、upstream的配置

  server address [parameters]
  address也必选,可以是主机名、域名、ip或unix socket,也可以指定端口号。
  parameters是可选参数,可以是如下参数:
    down:表示当前server已停用,暂时不参与负载。
    backup:表示当前server是备用服务器,只有其它非backup后端服务器都挂掉了或者很忙才会分配到请求。
    weight:表示当前server负载权重,权重越大被请求几率越大。默认是1.
    max_fails和fail_timeout一般会关联使用,如果某台server在fail_timeout时间内出现了max_fails次连接失败,那么Nginx会认为其已经挂掉了,从而在fail_timeout时间内不再去请求它,fail_timeout默认是10s,max_fails默认是1,即默认情况是只要发生错误就认为服务器挂掉了,如果将max_fails设置为0,则表示取消这项检查。

2、举例说明

1     upstream backends {
2         server localhost:8080 weight=5;
3         server localhost:8081 max_fails=3 fail_timeout=30s;
4         server localhost:8082;
5         server localhost:8083;
6     }

6、配置禁止访问目录或文件

1         location ^~ /default.html {
2             deny  all;
3         }
4         
5         location ^~ /path{
6             deny  all;
7         }

也可以把 deny all 改换成 return 404,这样将返回 404 而不是 403 Forbidden,更有“欺骗性”。

7、参考网站

  http://www.cnblogs.com/yun007/p/3739182.html

  https://blog.csdn.net/jiangguilong2000/article/details/52278255

  http://www.cnblogs.com/cinlap/p/9322934.html

原文地址:https://www.cnblogs.com/mao2080/p/9562943.html