• Nginx+tomcat配置负载均衡


    window下对Nginx+tomcat负载均衡做了配置尝试,将全部请求转发到tomcat,并未做静态,动态分开,图片防盗链等配置。

    Nginx 介绍


         Nginx (发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。  其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页伺服器中表现较好.

     

    Window xp环境:Nginx+Tomcat6

    1、下载地址

           http://nginx.org/en/download.html,这里我们推荐下载稳定版(stable versions),本文采用nginx-1.0.4。


    2、目录结构


          Nginx-

                   |_  conf   配置目录

                   |_  contrib

                   |_  docs 文档目录

                   |_  logs  日志目录

                   |_  temp 临时文件目录

                   |_  html 静态页面目录

                   |_  nginx.exe 主程序


          window下安装Nginx极其简单,解压缩到一个无空格的英文目录即可,双击nginx启动,这里我安装到:D:software ginx-1.0.4目录,下面涉及到的tomcat也安装在此目录。

          在DOS命令下即可启动Nginx:d:  --->  cd d:software ginx-1.0.4 ---> start nginx

              如果要对启动的Nginx进程进行控制,也可以使用DOS命令:

              nginx -s [stop | quit | reopen | reload]

    3、nginx.conf配置


       Nginx配置文件默认在conf目录,主要配置文件为nginx.conf。下面是nginx作为前端反向代理服务器的配置。

    Java代码  收藏代码
    1. <span>#使用的用户和组,window下不指定  
    2. #user  www www;  
    3. #指定工作衍生进程数(一般等于CPU总和数或总和数的两倍,例如两个四核CPU,则总和数为8)  
    4. worker_processes  1;  
    5. #指定错误日志文件存放路径,错误日志级别可选项为【debug|info|notice|warn|error|crit】  
    6. #error_log  logs/error.log;  
    7. #error_log  logs/error.log  notice;  
    8. error_log  logs/error.log  info;  
    9. #指定pid存放路径  
    10. pid        logs/nginx.pid;  
    11.   
    12. #工作模式及连接数上限   
    13. events {  
    14.     #使用网络I/O模型,Linux系统推荐使用epoll模型,FreeBSD系统推荐使用kqueue;window下不指定  
    15.     #use epoll;  
    16.     #允许的连接数  
    17.     worker_connections  1024;  
    18. }  
    19.   
    20. #设定http服务器,利用他的反向代理功能提供负载均衡支持   
    21. http {  
    22.     #设定mime类型   
    23.     include       mime.types;  
    24.     default_type  application/octet-stream;  
    25.   
    26.     #设定日志格式   
    27.     #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '  
    28.     #                  '$status $body_bytes_sent "$http_referer" '  
    29.     #                  '"$http_user_agent" "$http_x_forwarded_for"';  
    30.   
    31.     log_format main '$remote_addr - $remote_user [$time_local]'     
    32.                                         '"$request" $status $bytes_sent'     
    33.                                         '"$http_referer" "$http_user_agent" "$http_x_forwarded_for"'     
    34.                                         '"$gzip_ratio"';     
    35.         log_format download '$remote_addr - $remote_user [$time_local]'     
    36.                                         '"$request" $status $bytes_sent'     
    37.                                         '"$http_referer" "$http_user_agent"'     
    38.                                         '"$http_range" "$sent_http_content_range"';  
    39.       
    40.     #设定请求缓冲     
    41.     client_header_buffer_size 1k;     
    42.     large_client_header_buffers 4 4k;  
    43.       
    44.     #设定access log    
    45.     access_log  logs/access.log  main;  
    46.     client_header_timeout 3m;     
    47.         client_body_timeout 3m;     
    48.         send_timeout 3m;   
    49.   
    50.     sendfile        on;  
    51.     tcp_nopush     on;  
    52.     tcp_nodelay on;    
    53.     #keepalive_timeout  0;  
    54.     keepalive_timeout  65;  
    55.   
    56.     #开启gzip模块   
    57.     gzip  on;  
    58.     gzip_min_length 1100;     
    59.         gzip_buffers 4 8k;     
    60.         gzip_types text/plain application/x-javascript text/css application/xml;    
    61.            
    62.         output_buffers 1 32k;     
    63.         postpone_output 1460;  
    64.       
    65.     server_names_hash_bucket_size 128;    
    66.     client_max_body_size 8m;    
    67.       
    68.     fastcgi_connect_timeout 300;    
    69.     fastcgi_send_timeout 300;    
    70.     fastcgi_read_timeout 300;    
    71.     fastcgi_buffer_size 64k;    
    72.     fastcgi_buffers 4 64k;    
    73.     fastcgi_busy_buffers_size 128k;    
    74.     fastcgi_temp_file_write_size 128k;    
    75.     gzip_http_version 1.1;    
    76.     gzip_comp_level 2;    
    77.     gzip_vary on;   
    78.   
    79.     #设定负载均衡的服务器列表     
    80.         upstream localhost {   
    81.             #根据ip计算将请求分配各那个后端tomcat,许多人误认为可以解决session问题,其实并不能。    
    82.         #同一机器在多网情况下,路由切换,ip可能不同      
    83.             #weigth参数表示权值,权值越高被分配到的几率越大     
    84.             server localhost:8080 weight=1;     
    85.             server localhost:9080 weight=1;     
    86.         }   
    87.   
    88.     #设定虚拟主机  
    89.     server {  
    90.         listen       80;  
    91.         server_name  localhost;  
    92.   
    93.         #koi8-r  
    94.         charset UTF-8;  
    95.   
    96.         #设定本虚拟主机的访问日志  
    97.         access_log  logs/host.access.log  main;  
    98.           
    99.         #假如访问 /img/*, /js/*, /css/* 资源,则直接取本地文档,不通过squid     
    100.         #假如这些文档较多,不推荐这种方式,因为通过squid的缓存效果更好    
    101.         location ~ ^/(img|js|css)/ {     
    102.                     root /data3/Html;     
    103.                     expires 24h;     
    104.                 }   
    105.                   
    106.                 #对 "/" 启用负载均衡  
    107.         location / {  
    108.             root   html;  
    109.             index  index.html index.htm index.jsp;  
    110.               
    111.                         proxy_redirect off;   
    112.                         #保留用户真实信息    
    113.                         proxy_set_header Host $host;     
    114.                         proxy_set_header X-Real-IP $remote_addr;     
    115.                         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   
    116.                         #允许客户端请求的最大单个文件字节数    
    117.                         client_max_body_size 10m;     
    118.                         #缓冲区代理缓冲用户端请求的最大字节数,可以理解为先保存到本地再传给用户  
    119.                         client_body_buffer_size 128k;     
    120.                         #跟后端服务器连接超时时间 发起握手等候响应超时时间  
    121.                         proxy_connect_timeout 90;  
    122.                         #连接成功后 等待后端服务器响应时间 其实已进入后端的排队之中等候处理   
    123.                         proxy_read_timeout 90;     
    124.                       #后端服务器数据回传时间 就是在规定时间内后端服务器必须传完所有数据     
    125.                         proxy_send_timeout 90;  
    126.                         #代理请求缓存区 这个缓存区间会保存用户的头信息一共Nginx进行规则处理 一般只要能保存下头信息即可  
    127.                         proxy_buffer_size 4k;     
    128.                         #同上 告诉Nginx保存单个用的几个Buffer最大用多大空间  
    129.                         proxy_buffers 4 32k;     
    130.                         #如果系统很忙的时候可以申请国内各大的proxy_buffers 官方推荐 *2  
    131.                         proxy_busy_buffers_size 64k;    
    132.                         #proxy 缓存临时文件的大小   
    133.                         proxy_temp_file_write_size 64k;   
    134.                         proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;  
    135.                         proxy_max_temp_file_size 128m;   
    136.                           
    137.                         proxy_pass http://localhost;  
    138.     
    139.         }  
    140.   
    141.         #设定查看Nginx状态的地址     
    142.                 #location /NginxStatus {     
    143.                 #       stub_status on;     
    144.                 #       access_log on;     
    145.                 #       auth_basic "NginxStatus";     
    146.                 #       auth_basic_user_file conf/htpasswd;     
    147.                 #}     
    148.   
    149.         #error_page  404              /404.html;  
    150.   
    151.         # redirect server error pages to the static page /50x.html  
    152.         #  
    153.           
    154.         error_page   500 502 503 504  /50x.html;  
    155.         location = /50x.html {  
    156.             root   html;  
    157.         }  
    158.   
    159.         # proxy the PHP scripts to Apache listening on 127.0.0.1:80  
    160.         #  
    161.         #location ~ .php$ {  
    162.         #    proxy_pass   http://127.0.0.1;  
    163.         #}  
    164.   
    165.         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000  
    166.         #  
    167.         #location ~ .php$ {  
    168.         #    root           html;  
    169.         #    fastcgi_pass   127.0.0.1:9000;  
    170.         #    fastcgi_index  index.php;  
    171.         #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;  
    172.         #    include        fastcgi_params;  
    173.         #}  
    174.   
    175.         # deny access to .htaccess files, if Apache's document root  
    176.         # concurs with nginx's one  
    177.         #  
    178.         #location ~ /.ht {  
    179.         #    deny  all;  
    180.         #}  
    181.     }  
    182.   
    183.   
    184.     # another virtual host using mix of IP-, name-, and port-based configuration  
    185.     #  
    186.     #server {  
    187.     #    listen       8000;  
    188.     #    listen       somename:8080;  
    189.     #    server_name  somename  alias  another.alias;  
    190.   
    191.     #    location / {  
    192.     #        root   html;  
    193.     #        index  index.html index.htm;  
    194.     #    }  
    195.     #}  
    196.   
    197.   
    198.     # HTTPS server  
    199.     #  
    200.     #server {  
    201.     #    listen       443;  
    202.     #    server_name  localhost;  
    203.   
    204.     #    ssl                  on;  
    205.     #    ssl_certificate      cert.pem;  
    206.     #    ssl_certificate_key  cert.key;  
    207.   
    208.     #    ssl_session_timeout  5m;  
    209.   
    210.     #    ssl_protocols  SSLv2 SSLv3 TLSv1;  
    211.     #    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;  
    212.     #    ssl_prefer_server_ciphers   on;  
    213.   
    214.     #    location / {  
    215.     #        root   html;  
    216.     #        index  index.html index.htm;  
    217.     #    }  
    218.     #}  
    219.   
    220. }  
    221. </span>  

      4、Tomcat配置

          tomcat的配置依然使用 Apache+tomcat集群配置的中配置。

    5、验证配置与测试负载均衡


        首先测试nginx配置是否正确,测试命令:nginx -t  (默认验证:conf ginx.conf),也可以指定配置文件路径。

        最后验证配置负载均衡设置,http://localhost/http://localhost/index.jsp

        测试负载均衡 参考 Apache + Tomcat集群配置详解(2)

     

    至此window下nginx+tomcat负载均衡配置结束,关于tomcat Session的问题通常是采用memcached,或者采用nginx_upstream_jvm_route ,他是一个 Nginx 的扩展模块,用来实现基于 Cookie 的 Session Sticky 的功能。如果tomcat过多不建议session同步,server间相互同步session很耗资源,高并发环境容易引起Session风暴。请根据自己应用情况合理采纳session解决方案。

    下面几篇不错的文章:

         http://czllfy.iteye.com/blog/510295

         http://www.blogjava.net/Alpha/archive/2011/06/21/352745.html

         http://www.jtben.com/document/4440

         http://tmsoft.lsxy.com/index.php?load=read&id=938

    张宴的Blog:http://blog.s135.com/nginx_cache/

  • 相关阅读:
    Python爬虫学习01
    Python学习Day02
    JavaScript学习笔记01
    Python学习Day01
    MarkDown实例代码
    MarkDwon的使用方法
    (转)探究requestDisallowInterceptTouchEvent失效的原因
    JNI字符串转字节数组指针方法
    justfun
    dsad
  • 原文地址:https://www.cnblogs.com/fx2008/p/4086545.html
Copyright © 2020-2023  润新知