Nginx代理配置

298 阅读1分钟
# nginx.conf配置

worker_processes  1;
events {
  worker_connections  1024;
}
http {    
    include       mime.types;    
    default_type  application/octet-stream;    
    sendfile        on;    
    keepalive_timeout  65;    
    gzip  on;    
    include extra/*.conf;    
    server {        
        listen       80;        
        server_name  localhost;        
        charset koi8-r;        
        access_log  logs/host.access.log  main;        
        location / {            
            root   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   html;        
        }    
    }
}



# extra/test.conf配置:

server {    
    listen       443 ssl;    
    server_name  aa.bb.com;    
    # SSL开启    
    ssl_certificate      ./conf/extra/ssl/ssl.crt/server.crt;    
    ssl_certificate_key  ./conf/extra/ssl/ssl.key/server.key;    
    ssl_session_cache    shared:SSL:1m;    
    ssl_session_timeout  5m;    ssl_ciphers  HIGH:!aNULL:!MD5;    
    ssl_prefer_server_ciphers  on;    
    # route00开头的接口代理配置
    location ^~ /route00 {        
        proxy_ignore_client_abort   on;        
        proxy_send_timeout          15;        
        proxy_connect_timeout       15;        
        proxy_read_timeout          15;        
        proxy_buffering             on;        
        proxy_buffer_size           32k;        
        proxy_buffers               8 32k;        
        proxy_busy_buffers_size     64k;        
        proxy_next_upstream         http_502 http_504 error timeout invalid_header;        
        proxy_pass                  https://aa.bb.com;  #接口代理
        proxy_set_header            Host            $http_host;        
        proxy_set_header            X-Real-IP       $remote_addr;        
        proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;        
        break;    
    }    
    # 页面代理
    location / {            
        proxy_ignore_client_abort   on;            
        proxy_send_timeout          15;            
        proxy_connect_timeout       15;            
        proxy_read_timeout          15;            
        proxy_headers_hash_max_size 512;            
        proxy_headers_hash_bucket_size 128;             
        proxy_buffering             on;            
        proxy_buffer_size           32k;            
        proxy_buffers               8 32k;            
        proxy_busy_buffers_size     64k;            
        proxy_next_upstream         http_502 http_504 error timeout invalid_header;   
        proxy_set_header       Host            $host;            
        proxy_set_header       X-Real-IP       $http_x_real_ip;            
        proxy_set_header Connection "";            
        proxy_pass http://127.0.0.1:8082/;    
    }
} 
server {    
    listen       80;    
    server_name  aa.bb.com;    
    #强制到HTTPS    
    return 301 https://$host:443$request_uri;
}

# 直接aa.bb.com访问会代理到本地http://127.0.0.1:8082/
# 本地host配置127.0.0.1-->aa.bb.com
# 页面请求的是本地的js、css、html但是接口访问的是线上环境aa.bb.com对应的远程ip

以上配置是我在项目中的代理基本配置,回到正题

nginx是什么?

Nginx 是一个高性能的HTTP反向代理web服务器

nginx负载均衡 upstream 配置

关于负载均衡的说法:

当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。

我们可以建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器。如此以来,用户的每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况。

负载均衡是用反向代理的原理实现的。

# 常规配置
upstream backserver {
    server 192.168.1.12:8080  weight=5 max_fails=2 fail_timeout=15s;
    server 192.168.1.13:8080  weight=6 max_fails=2 fail_timeout=15s;
}

location / {     
    proxy_pass                  http://backserver;     
    break;
}

1、轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器

upstream backserver {
    server 192.168.1.12:8080
    server 192.168.1.13:8080
}

**2、weight权重:**指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况

upstream backserver {
    server 192.168.1.12:8080 weight=10;
    server 192.168.1.13:8080 weight=90;
}

3、ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session不能跨服务器的问题。

upstream backserver {    
    ip_hash;     
    server 192.168.1.12:8080;    
    server 192.168.1.13:8080
}

4、least_conn:把请求转发给连接数较少的后端服务器

upstream backserver {
    least_conn;
    server 192.168.1.12:8080
    server 192.168.1.13:8080
}

5、fair(第三方插件):第三方的负载均衡策略的实现需要安装第三方插件。这种方式根据后端服务器的响应时间进行分配,响应快的优先分配请求

upstream backserver {
    server 192.168.1.12:8080
    server 192.168.1.13:8080
    fair;    #实现响应时间短的优先分配
}

6、url hash(第三方插件):此种方式和ip_hash比较类似,根据url的hash值进行分配,将url分配到同一个后端服务器,当服务器存在缓存时比较有效

upstream backserver {
    server 192.168.1.12:8080
    server 192.168.1.13:8080
    hash $request_uri;    #实现每个url定向到同一个后端服务器
    hash_method crc32;    #hash_method是使用的hash算法
}