Nginx+Tomcat 动静分离实现负载均衡

来源:互联网 发布:openoffice linux下载 编辑:程序博客网 时间:2024/06/02 00:57

.1.一份Nginx.conf配置文件:


  1. 定义Nginx运行的用户 和 用户组 如果对应服务器暴露在外面的话建议使用权限较小的用户 防止被入侵  
  2. # user www www;  
  3.   
  4. #Nginx进程数, 建议设置为等于CPU总核心数  
  5. worker_processes 8;  
  6.   
  7. #开启全局错误日志类型  
  8. error_log /var/log/nginx/error.log info;  
  9.   
  10. #进程文件  
  11. pid /var/run/nginx.pid;  
  12.   
  13. #一个Nginx进程打开的最多文件描述数目 建议与ulimit -n一致  
  14. #如果面对高并发时 注意修改该值 ulimit -n 还有部分系统参数 而并非这个单独确定  
  15. worker_rlimit_nofile 65535;  
  16.   
  17. events{  
  18.     #使用epoll模型提高性能  
  19.     use epoll;  
  20.     #单个进程最大连接数  
  21.     worker_connections 65535;  
  22. }  
  23.   
  24. http{  
  25.     #扩展名与文件类型映射表  
  26.     include mime.types;  
  27.     #默认类型  
  28.     default_type application/octet-stream;  
  29.     sendfile on;  
  30.     tcp_nopush on;  
  31.     tcp_nodelay on;  
  32.     keepalive_timeout 65;  
  33.     types_hash_max_size 2048;  
  34.     #日志  
  35.     access_log /var/log/nginx/access.log;  
  36.     error_log /var/log/nginx/error.log;  
  37.     #gzip 压缩传输  
  38.     gzip on;  
  39.     gzip_min_length 1k;  #最小1K  
  40.     gzip_buffers 16 64K;  
  41.     gzip_http_version 1.1;  
  42.     gzip_comp_level 6;  
  43.     gzip_types text/plain application/x-javascript text/css application/xml application/javascript;  
  44.     gzip_vary on;  
  45.     #负载均衡组  
  46.     #静态服务器组  
  47.     upstream static.zh-jieli.com {  
  48.         server 127.0.0.1:808 weight=1;  
  49.     }  
  50.     #动态服务器组  
  51.     upstream zh-jieli.com {  
  52.         server 127.0.0.1:8080;  
  53.         #server 192.168.8.203:8080;  
  54.     }  
  55.     #配置代理参数  
  56.     proxy_redirect off;  
  57.     proxy_set_header Host $host;  
  58.     proxy_set_header X-Real-IP $remote_addr;  
  59.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
  60.     client_max_body_size 10m;  
  61.     client_body_buffer_size 128k;  
  62.     proxy_connect_timeout 65;  
  63.     proxy_send_timeout 65;  
  64.     proxy_read_timeout 65;  
  65.     proxy_buffer_size 4k;  
  66.     proxy_buffers 4 32k;  
  67.     proxy_busy_buffers_size 64k;  
  68.     #缓存配置  
  69.     proxy_cache_key '$host:$server_port$request_uri';  
  70.     proxy_temp_file_write_size 64k;  
  71.     proxy_temp_path /dev/shm/JieLiERP/proxy_temp_path;  
  72.     proxy_cache_path /dev/shm/JieLiERP/proxy_cache_path levels=1:2 keys_zone=cache_one:200m inactive=5d max_size=1g;  
  73.     proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;  
  74.   
  75.     server{  
  76.         listen 80;  
  77.         server_name erp.zh-jieli.com;  
  78.         location / {  
  79.             index index; #默认主页为 /index  
  80.             #proxy_pass http://jieli;  
  81.         }  
  82.         location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff) {  
  83.             proxy_cache cache_one;  
  84.             proxy_cache_valid 200 304 302 5d;  
  85.             proxy_cache_valid any 5d;  
  86.             proxy_cache_key '$host:$server_port$request_uri';  
  87.             add_header X-Cache '$upstream_cache_status from $host';  
  88.             proxy_pass http://static.zh-jieli.com;  
  89.             #所有静态文件直接读取硬盘  
  90.             #           root /var/lib/tomcat7/webapps/JieLiERP/WEB-INF ;  
  91.             expires 30d; #缓存30天  
  92.         }  
  93.         #其他页面反向代理到tomcat容器  
  94.         location ~ .*$ {  
  95.             index index;  
  96.             proxy_pass http://zh-jieli.com;  
  97.         }  
  98.     }  
  99.     server{  
  100.         listen 808;  
  101.         server_name static;  
  102.         location / {  
  103.   
  104.         }  
  105.         location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff) {  
  106.             #所有静态文件直接读取硬盘  
  107.             root /var/lib/tomcat7/webapps/JieLiERP/WEB-INF ;  
  108.             expires 30d; #缓存30天  
  109.         }  
  110.     }  
  111. }  


     基本配置这个文件,就可以实现负载了。但是里面的各种关系要了解就比较麻烦了。这篇博客,也不是教学篇,是记录一下,方便以后自己看了。



2.基础讲解

  现在假使有一台电脑192.168.8.203这台电脑,上面部署了Tomcat,里面8080端口有J2EE的服务,通过浏览器可以正常浏览网页。现在有一个问题tomcat是一个比较全面的web容器,对静态网页的处理,应该是比较费资源的,特别是每次都要从磁盘读取静态页面,然后返回。这中间会消耗Tomcat的资源,可能会使那些动态页面解析性能影响。秉承Linux哲学,一个软件只做一件事的原则。Tomcat就应该只处理JSP动态页面。这里就用到以前了解的Nginx来进行反向代理。第一步代理,实现动静网页分离。这个很简单的。
  1. worker_processes 8;  
  2.           
  3.         pid /var/run/nginx.pid;  
  4.           
  5.         worker_rlimit_nofile 65535;  
  6.           
  7.         events{  
  8.             use epoll;  
  9.             worker_connections 65535;  
  10.         }  
  11.           
  12.         http{  
  13.             include mime.types;  
  14.             default_type application/octet-stream;  
  15.             sendfile on;  
  16.             tcp_nopush on;  
  17.             tcp_nodelay on;  
  18.             keepalive_timeout 65;  
  19.             types_hash_max_size 2048;  
  20.   
  21.             proxy_redirect off;  
  22.             proxy_set_header Host $host;  
  23.             proxy_set_header X-Real-IP $remote_addr;  
  24.             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
  25.             client_max_body_size 10m;  
  26.             client_body_buffer_size 128k;  
  27.             proxy_connect_timeout 65;  
  28.             proxy_send_timeout 65;  
  29.             proxy_read_timeout 65;  
  30.             proxy_buffer_size 4k;  
  31.             proxy_buffers 4 32k;  
  32.             proxy_busy_buffers_size 64k;  
  33.           
  34.             server{  
  35.                 listen 80;  
  36.                 server_name xxx.com;  
  37.                 location / {  
  38.                     index index;   
  39.                 }  
  40.                 location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff) {  
  41.                     proxy_pass http://192.168.8.203:8080;  
  42.                     expires 30d;   
  43.                 }  
  44.                 location ~ .*$ {  
  45.                     index index;  
  46.                     proxy_pass http://192.168.8.203:8080;  
  47.                 }  
  48.             }  
  49.         }

修改nginx的配置文件 /etc/nginx/nginx.conf 默认有个配置文件的。其实大部分都差不多,关键还是server段的设置。这里我设置server段如上所示,其他段复制就可以了。server段里面的解释如下:第35行为监听本机80端口。37-39行表示默认主页,这里的默认主页我是index.jsp 对应到我项目中是一个index。 这里根据需要可以改为


  1. index index.jsp index.html index.htm index.php  

具体可参考其他文章。 关键的第40行,这个是正则匹配,网上也有很多介绍。这里匹配我项目中用到的所有静态网页后缀。第41行是代理地址。这里我代理到我的web应用中。expires 30d缓存为30天,这里的缓存是对应到前端页面,用户的Cache-Control字段,