zoukankan      html  css  js  c++  java
  • 【转】搭建nginx+tomcat+Java的负载均衡环境

    一、简介:

    Tomcat在高并发环境下处理动态请求时性能很低,而在处理静态页面更加脆弱。虽然Tomcat的最新版本支持epoll,但是通过Nginx来处理静态页面要比通过Tomcat处理在性能方面好很多。

    二、下载安装:

    下载nginx

    http://nginx.org/en/download.html

    下载解压后放到C: ginx-1.0.4(官网这样要求的,不知道放其它盘有没有问题)

    启动nginx.exe,然后在浏览器输入127.0.0.1即可

    配置自己的项目测试

    第二环节我们使用了默认的nginx.conf 。Nginx的配置文件都存于目录conf文件下,其中nginx.conf是它的主配置文件。

    以下为我加上注释并配置的新的虚拟server]

    Java代码  收藏代码
    1. #运行用户  
    2. #user  nobody;  
    3. #开启进程数 <=CPU数  
    4. worker_processes  1;  
    5. #错误日志保存位置  
    6. #error_log  logs/error.log;  
    7. #error_log  logs/error.log  notice;  
    8. #error_log  logs/error.log  info;  
    9. #进程号保存文件  
    10. #pid        logs/nginx.pid;  
    11.    
    12. #等待事件  
    13. events {  
    14.     #Linux下打开提高性能  
    15.     #use epoll;  
    16.     #每个进程最大连接数(最大连接=连接数x进程数)  
    17.     worker_connections  1024;  
    18. }  
    19.    
    20.    
    21. http {  
    22.     #文件扩展名与文件类型映射表  
    23.     include       mime.types;  
    24.     #默认文件类型  
    25.     default_type  application/octet-stream;  
    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.     #请求日志保存位置  
    32.     #access_log  logs/access.log  main;  
    33.        
    34.     #设定请求缓冲  
    35.     client_header_buffer_size 1k;  
    36.     large_client_header_buffers 4 4k;  
    37.    
    38.     #打开发送文件  
    39.     sendfile        on;  
    40.     #tcp_nopush     on;  
    41.    
    42.     #keepalive_timeout  0;  
    43.     keepalive_timeout  65;  
    44.        
    45.     #客户端上传文件大小控制  
    46.     client_max_body_size 8m;  
    47.        
    48.     #打开gzip压缩  
    49.     #gzip  on;  
    50.        
    51.     #设定负载均衡的服务器列表  
    52.     #upstream mysvr {  
    53.     #    #weigth参数表示权值,权值越高被分配到的几率越大  
    54.     #    #本机上的Squid开启3128端口  
    55.     #    #server 192.168.8.1:3128 weight=5;  
    56.     #    #server 192.168.8.2:80 weight=1;  
    57.     #    #server 192.168.8.3:80 weight=6;  
    58.     #}  
    59.    
    60.     #第一个虚拟主机  
    61.     server {  
    62.         #监听IP端口  
    63.         listen       80;  
    64.         #主机名  
    65.         server_name  localhost;  
    66.         #root    
    67.            
    68.         #设置字符集  
    69.         #charset koi8-r;  
    70.         #本虚拟server的访问日志 相当于局部变量  
    71.         #access_log  logs/host.access.log  main;  
    72.         #日志文件输出格式  
    73.         #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '  
    74.         #                  '$status $body_bytes_sent "$http_referer" '  
    75.         #                  '"$http_user_agent" "$http_x_forwarded_for"';  
    76.            
    77.         location / {  
    78.             root   html;  
    79.             index  index.html index.htm;  
    80.         }  
    81.            
    82.         #静态文件缓存时间设置  
    83.         #location ~ .*.(gif|jpg|jpeg|png|bmp|swf)${           
    84.         #    expires 30d;  
    85.         #}  
    86.            
    87.         #静态文件缓存时间设置  
    88.         #location ~ .*.(js|css)?${           
    89.         #    expires 1h;  
    90.         #}  
    91.            
    92.         #对本server"/"启用负载均衡  
    93.         #location / {  
    94.         #    proxy_pass http://mysvr;  
    95.         #    proxy_redirect off;  
    96.         #    proxy_set_header Host $host;  
    97.         #    proxy_set_header X-Real-IP $remote_addr;  
    98.         #    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
    99.         #    client_max_body_size 10m;  
    100.         #    client_body_buffer_size 128k;  
    101.         #    proxy_connect_timeout 90;  
    102.         #    proxy_send_timeout 90;  
    103.         #    proxy_read_timeout 90;  
    104.         #    proxy_buffer_size 4k;  
    105.         #    proxy_buffers 4 32k;  
    106.         #    proxy_busy_buffers_size 64k;  
    107.         #    proxy_temp_file_write_size 64k;  
    108.         #}  
    109.            
    110.         #设定查看Nginx状态的地址  
    111.         #location /NginxStatus {  
    112.         #    stub_status on;  
    113.         #    access_log on;  
    114.         #    auth_basic “NginxStatus”;  
    115.         #    auth_basic_user_file conf/htpasswd;  
    116.         #}  
    117.    
    118.    
    119.    
    120.         #error_page  404              /404.html;  
    121.    
    122.         # redirect server error pages to the static page /50x.html  
    123.         #  
    124.         error_page   500 502 503 504  /50x.html;  
    125.         location = /50x.html {  
    126.             root   html;  
    127.         }  
    128.    
    129.         # proxy the PHP scripts to Apache listening on 127.0.0.1:80  
    130.         #  
    131.         #location ~ .php$ {  
    132.         #    proxy_pass   http://127.0.0.1;  
    133.         #}  
    134.    
    135.         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000  
    136.         #  
    137.         #location ~ .php$ {  
    138.         #    root           html;  
    139.         #    fastcgi_pass   127.0.0.1:9000;  
    140.         #    fastcgi_index  index.php;  
    141.         #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;  
    142.         #    include        fastcgi_params;  
    143.         #}  
    144.    
    145.         # deny access to .htaccess files, if Apache's document root  
    146.         # concurs with nginx's one  
    147.         #  
    148.         #location ~ /.ht {  
    149.         #    deny  all;  
    150.         #}  
    151.     }  
    152.    
    153.    
    154.     # another virtual host using mix of IP-, name-, and port-based configuration      
    155.     server {  
    156.         #多监听         
    157.         listen       localhost:8666;  
    158.         #主机名  
    159.         server_name  LIULJ2576;  
    160.         #WEB文件路径  
    161.         root         E:/Portal;  
    162.         #默认首页  
    163.         index        HomePage.html;          
    164.         #location / {  
    165.         #    #这里相当于局部变量  
    166.         #    root   E:/Portal;  
    167.         #    index  HomePage.html;  
    168.         #}  
    169.     }  
    170.    
    171.    
    172.     # HTTPS server HTTPS SSL加密服务器  
    173.     #  
    174.     #server {  
    175.     #    listen       443;  
    176.     #    server_name  localhost;  
    177.    
    178.     #    ssl                  on;  
    179.     #    ssl_certificate      cert.pem;  
    180.     #    ssl_certificate_key  cert.key;  
    181.    
    182.     #    ssl_session_timeout  5m;  
    183.    
    184.     #    ssl_protocols  SSLv2 SSLv3 TLSv1;  
    185.     #    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;  
    186.     #    ssl_prefer_server_ciphers   on;  
    187.    
    188.     #    location / {  
    189.     #        root   html;  
    190.     #        index  index.html index.htm;  
    191.     #    }  
    192.     #}  
    193.    
    194. }  

     #号为注释内容,我们在cmd下运行nginx

    启动成功,出错的话,可以查询日志(日志路径是配置文件指定的,你可以修改存到其它位置)

    访问一下第二个server 配置的localhost:8666地址,结果出现

     

    三、Nginx可以通过以下两种方式来实现与Tomcat的耦合:

    将静态页面请求交给Nginx,动态请求交给后端Tomcat处理。

    将所有请求都交给后端的Tomcat服务器处理,同时利用Nginx自身的负载均衡功能进行多台Tomcat服务器的负载均衡。

    下面通过两个配置实例分别讲述这两种实现

    一、动态页面和静态页面分离的实例

    这里假定Tomcat服务器的IP地址为192.168.12.130,同时Tomcat服务器开放的服务器端口为8080。Nginx相关配置代码如下:

    Java代码  收藏代码
    1. server {   
    2.       listen 80;    
    3.       server_name www.ixdba.net;    
    4.       root /web/www/html;    
    5.     
    6. location /img/ {    
    7.       alias /web/www/html/img/;    
    8. }    
    9.     
    10. location ~ (.jsp)|(.do)$ {    
    11.      proxy_pass http://192.168.12.130:8080;    
    12.      proxy_redirect off;    
    13.      proxy_set_header Host $host;    
    14.      proxy_set_header X-Real-IP $remote_addr;    
    15.      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    
    16.      client_max_body_size 10m;    
    17.      client_body_buffer_size 128k;    
    18.      proxy_connect_timeout 90;    
    19.      proxy_send_timeout 90;    
    20.      proxy_read_timeout 90;    
    21.      proxy_buffer_size 4k;    
    22.      proxy_buffers 4 32k;    
    23.      proxy_busy_buffers_size 64k;    
    24.      proxy_temp_file_write_size 64k;    
    25. }    
    26.     
    27. }  

     在这个实例中,首先定义了一个虚拟主机www.ixdba.net,然后通过location指令将/web/www/html/img/目录下的静态文件交给Nginx来完成。最后一个location指令将所有以.jsp、.do结尾的文件都交给Tomcat服务器的8080端口来处理,即http://192.168.12.130:8080

    需要特别注意的是,在location指令中使用正则表达式后,proxy_pass后面的代理路径不能含有地址链接,也就是不能写成http://192.168.12.130:8080/,或者类似http://192.168.12.130:8080/jsp的形式。在location指令不使用正则表达式时,没有此限制。

    2、多个tomcat负载均衡的实例

    这里假定有3台Tomcat服务器,分别开放不同的端口,地址如下:

    1
    2
    3
    192.168.12.131:8000 
    192.168.12.132:8080 
    192.168.12.133:8090

    Nginx的相关配置代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    upstream mytomcats { 
          server 192.168.12.131:8000
          server 192.168.12.132:8080
          server 192.168.12.133:8090
      
    server { 
          listen 80
          server_name www.ixdba.net; 
      
    location ~* .(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ { 
           root /web/www/html/; 
      
    location / { 
              proxy_pass http://mytomcats; 
              proxy_redirect off; 
              proxy_set_header Host $host; 
              proxy_set_header X-Real-IP $remote_addr; 
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
              client_max_body_size 10m; 
              client_body_buffer_size 128k; 
              proxy_connect_timeout 90
              proxy_send_timeout 90
              proxy_read_timeout 90
              proxy_buffer_size 4k; 
              proxy_buffers 4 32k; 
              proxy_busy_buffers_size 64k; 
              proxy_temp_file_write_size 64k; 
  • 相关阅读:
    POJ 1469 COURSES 二分图最大匹配
    POJ 1325 Machine Schedule 二分图最大匹配
    USACO Humble Numbers DP?
    SGU 194 Reactor Cooling 带容量上下限制的网络流
    POJ 3084 Panic Room 求最小割
    ZOJ 2587 Unique Attack 判断最小割是否唯一
    Poj 1815 Friendship 枚举+求最小割
    POJ 3308 Paratroopers 最小点权覆盖 求最小割
    1227. Rally Championship
    Etaoin Shrdlu
  • 原文地址:https://www.cnblogs.com/dsc65749924/p/6052516.html
Copyright © 2011-2022 走看看