• nginx-启动gzip、虚拟主机、请求转发、负载均衡


     

    一、启用gzip

    1     gzip  on;
    2     gzip_min_length 1k;
    3     gzip_buffers 4 16k;
    4     gzip_http_version 1.1;
    5     gzip_comp_level 2;
    6     gzip_types text/plain application/x-javascript text/css application/xml application/json;
    7     gzip_vary on;

    将上面这段放在nginx.conf文件 http{...}之间即可

    二、虚拟主机

     1     server {
     2         listen       80;
     3         server_name  www.aaa.com;
     4         access_log logs/aaa.access.log combined;
     5         location / {
     6             root   r:/www/aaa.com;
     7             index  index.html index.htm;
     8         }       
     9     }
    10 
    11     server {
    12         listen       80;
    13         server_name  www.bbb.com;
    14         access_log logs/bbb.access.log combined;
    15         location / {
    16             root   r:/www/bbb.com;
    17             index  index.html index.htm;
    18         }       
    19     }

    这里配置了二个虚拟主机,分别绑定到域名www.aaa.com及www.bbb.com

    三、请求转发

    如上图,为了安全起见,通常会把真正的web 应用服务器放在内网,不允许外界直接访问,这时可利用nginx的反向代理将请求转到内部服务器

     1     server {
     2         listen       80;
     3         server_name  www.aaa.com;    
     4     location / {
     5         proxy_pass http://192.168.1.201:8080 ;
     6         proxy_set_header Host $host:8080;
     7         proxy_set_header X-Real-IP $remote_addr;
     8         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     9         proxy_set_header Via "nginx";
    10     }
    11     access_log off;    
    12     }

    这样,访问 http://www.aaa.com/home/index.aspx 就相当于访问http://192.168.1.201:8080/home/index.aspx

    有些时候,我们希望将共用的静态资源(比如:jquery,共用css),直接放在nginx下,背后的web app server,只处理动态资源(比如:.aspx/.do/.jsp),可以改进一下:

     1     server {
     2         listen       80;
     3         server_name  www.aaa.com;
     4     root R:/www/aaa.com;
     5 
     6     location / {
     7         proxy_pass http://192.168.1.201:8080 ;
     8         proxy_set_header Host $host:8080;
     9         proxy_set_header X-Real-IP $remote_addr;
    10         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    11         proxy_set_header Via "nginx";
    12     }
    13 
    14     location ~ .*.(js|css)?$ {
    15         expires 1h;
    16     }
    17 
    18     access_log off;    
    19     }

    这样,访问http://www.aaa.com/content/site.css 实际上读取的是R:/www/aaa.com/content/site.css 这个文件

    四、负载均衡

    如上图,nginx在前端利用反向代理实现软件负载均衡,nginx不仅能实现负载均衡,当某一个node失效时,还能自动故障转移,关键配置如下:

     1     proxy_connect_timeout 5; 
     2     
     3     upstream aaa_server_group{    
     4     server 172.21.129.181:9091 max_fails=1 fail_timeout=60s; 
     5     server 172.21.129.181:9092 max_fails=1 fail_timeout=60s; 
     6     server 172.21.129.57:9012 max_fails=1 fail_timeout=60s;
     7     ip_hash;
     8     }
     9 
    10     server {
    11         listen       80;
    12         server_name  www.aaa.com;
    13     root R:/www/aaa.com;
    14 
    15     location / {
    16         proxy_next_upstream http_502 http_504 error timeout invalid_header;
    17         proxy_pass http://aaa_server_group ;            
    18         proxy_set_header X-Forwarded-For $remote_addr;        
    19     }
    20 
    21     location ~ .*.(js|css)?$ {
    22         expires 1h;
    23     }
    24 
    25     access_log off;    
    26     }

    解释一下:

    第1行, proxy_connect_timeout 5;表示nginx连接后端服务器时,如果超过5秒没反应,则认为超时

    第3行,这里定义了一组服务器aaa_server_group,其中max_fails=1 fail_timeout=60s 表示如果该节点转发失败1次,接下来的60秒内,将不再转发到这台服务器

    第6行,表示如果后端服务器返回502,504,超时等错误时,即认为节点失效,自动将请求转发到其它节点

    nginx负载均衡的方案有好几种,这里我们配置为ip_hash;表示会根据客户端的IP生成hash,固定转发到某一台node,这样可解决集群环境中session丢失的问题。如果web应用中没有使用session,去掉ip_hash;即变成轮讯方案。此外,4-6行上,还可以加weight=N来指定权重,按权重转发,如果服务器配置不均衡,比如某一台服务器配置特别强,可以考虑将这台服务器的weight值加大。

    如果某台服务器暂时不想加入负载均衡,在最后加 down即可。

    最后附送一个小技巧:nginx -t 可以检查配置文件是否正确 

  • 相关阅读:
    细思极恐-你真的会写java吗?
    java定时器无法自动注入的问题解析(原来Spring定时器可以这样注入service)
    java并发编程之volatile
    细思极恐-你真的会写java吗?
    细思极恐-你真的会写java吗?
    细思极恐-你真的会写java吗
    1月中旬值得一读的10本技术新书(机器学习、Java、大数据等)!
    0基础小白怎么学好Java?
    java日常知识点积累
    (解决)ECSHOP info: Can't Connect MySQL Server(localhost:3306)!转删
  • 原文地址:https://www.cnblogs.com/shijiaoyun/p/9024479.html
Copyright © 2020-2023  润新知