首页 > 代码库 > Nginx 做系统的前端反向proxy

Nginx 做系统的前端反向proxy

Nginx是一款非常优秀的基于event的web服务器,吞吐量大,占用资源少,不过文档就很让人郁闷了,免费的Nginx和收费的Nginx+的文档共用一份,配置完之后才发现免费的Nginx启动某些命令失败。。。。。。非常伤感。

在我们的系统中,一直使用httpd做前端的7层负载均衡,最近想转换到Nginx,学习了下怎么配置,留作纪念,另外nginx的配置需要操作系统参数(linux)也做一些优化才能达到更好的效果

1.设置server locationcopy

  1.    location / {  
  2.                 proxy_pass http://appservers/;  
  3.                 #health_check interval=10 fails=3 passes=2; match=server_ok;  
  4.             }  

2. 设置appservers对应的服务器,服务器地址,尝试次数,尝试时间间隔,负载算法

ip_hash来代替默认的rr方式,即可以将某客户端IP的请求通过哈希算法定位到同一台后端web服务器上,这样避免了session丢失,解决了session问题

设定Nginx与服务器通信的尝试失败的次数。在fail_timeout参数定义的时间段内,如果失败的次数达到此值,Nginx就认为服务器不可用。在下一个fail_timeout时间段,服务器不会再被尝试

[plain] view plaincopy
  1. <strong>upstream appservers {  
  2.       ip_hash # for session persistence</strong>  
  3.       #least_conn default: round-robin  
  4.       #zone appservers 64k; nginx plus function  
  5.         
  6.         <strong>server localhost:8080 max_fails=1 fail_timeout=30s;</strong>  
  7.         # nginx plus function route=node1;  
  8.         <strong>server localhost:9090 max_fails=1 fail_timeout=30s;</strong>  
  9.         # nginx plus function route=node2;  
  10.         #sticky route $route_cookie $route_uri;  
  11.    <strong> }</strong>  

3. 性能调优参数 (以后补充)

nginx.conf配置

user  nginx nginx;  worker_processes  4;  # == cpu core number, total nginx process: one master + all workers  #error_log  logs/error.log;  #error_log  logs/error.log  notice;  #error_log  logs/error.log  info;    #pid        logs/nginx.pid;    #http://nginx.org/en/docs/ngx_core_module.html#worker_connections  events {    worker_connections  1024;  # need to check os limitation here}      http {      #include       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  logs/access.log  main;      access_log off;    #sendfile        on;      #tcp_nopush     on;        #timeout    #client_body_timeout 12;    #client_header_timeout 12;    #send_timeout 10;      #keepalive_timeout  0;      keepalive_timeout  65;      gzip  on;    gzip_comp_level  2;    gzip_min_length  1000;    gzip_proxied     expired no-cache no-store private auth;    gzip_types       text/plain application/x-javascript text/xml text/css application/xml;      # 防止cache不足频繁读写文件,header cache一般不会大于1k,最小设置系统分页大小(<span style="font-family: 'Lucida Grande', Verdana, Lucida, Helvetica, Arial, sans-serif; font-size: 13px; text-align: justify;">getconf PAGESIZE</span>)    client_body_buffer_size 10K;    client_header_buffer_size 4k;    client_max_body_size 8m;    large_client_header_buffers 2 4k;        #http://nginx.com/resources/admin-guide/load-balancer/      #http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream_conf      upstream appservers {        ip_hash; # for session persistence         #least_conn default: round-robin        #zone appservers 64k; nginx plus function                  server localhost:8080 max_fails=3 fail_timeout=30s;          # nginx plus function route=node1;          server localhost:9090 max_fails=3 fail_timeout=30s;          # nginx plus function route=node2;          #sticky route $route_cookie $route_uri;      }            #map $cookie_jsessionid $route_cookie {          #    ~.+\.(?P<route>\w+)$ $route;          #}                    #map $request_uri $route_uri {          #    ~jsessionid=.+\.(?P<route>\w+)$ $route;          #}        #match server_ok {      #    status 200-399;      #    body !~ "maintenance mode";      #}        server {              location / {                  proxy_pass http://appservers/;                  #health_check interval=10 fails=3 passes=2; match=server_ok;              }                             # Location for configuration requests          #location /upstream_conf {          #    upstream_conf;          #    allow 127.0.0.1;          #    deny all;          #}                          listen       80;          server_name  localhost;            charset UTF-8;          #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;          #}            # proxy the PHP scripts to Apache listening on 127.0.0.1:80          #          #location ~ \.php$ {          #    proxy_pass   http://127.0.0.1;          #}            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000          #          #location ~ \.php$ {          #    root           html;          #    fastcgi_pass   127.0.0.1:9000;          #    fastcgi_index  index.php;          #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;          #    include        fastcgi_params;          #}            # deny access to .htaccess files, if Apache's document root          # concurs with nginx's one          #          #location ~ /\.ht {          #    deny  all;          #}      }          # another virtual host using mix of IP-, name-, and port-based configuration      #      #server {      #    listen       8000;      #    listen       somename:8080;      #    server_name  somename  alias  another.alias;        #    location / {      #        root   html;      #        index  index.html index.htm;      #    }      #}          # HTTPS server      #      #server {      #    listen       443 ssl;      #    server_name  localhost;        #    ssl_certificate      cert.pem;      #    ssl_certificate_key  cert.key;        #    ssl_session_cache    shared:SSL:1m;      #    ssl_session_timeout  5m;        #    ssl_ciphers  HIGH:!aNULL:!MD5;      #    ssl_prefer_server_ciphers  on;        #    location / {      #        root   html;      #        index  index.html index.htm;      #    }      #}    }

PS: Nginx和Httpd都是非常优秀的Web服务器,两者的比较可以看Apache_vs_nginx

Nginx 做系统的前端反向proxy