Heim  >  Artikel  >  Backend-Entwicklung  >  Nginx+tomcat配置集群

Nginx+tomcat配置集群

WBOY
WBOYOriginal
2016-08-08 09:20:13847Durchsuche

本文转载自:http://os.51cto.com/art/201111/304608.htm

本文介绍了通过在Windows xp和ubuntu两种环境下nginx和tomcat的集群配置,最终实现负载均衡。

AD:

开发的应用采用F5负载均衡交换机,F5将请求转发给5台hp unix服务器,每台服务器有多个webserver实例,对外提供web服务和socket等接口服务。之初,曾有个小小的疑问为何不采用开源的apache、Nginx软件负载,F5设备动辄几十万,价格昂贵?自己一个比较幼稚的问题,后续明白:F5是操作于IOS网络模型的传输层,Nginx、apache是基于http反向代理方式,位于ISO模型的第七层应用层。直白些就是TCP UDP 和http协议的区别,Nginx不能为基于TCP协议的应用提供负载均衡。

了解了二者之间的区别于应用场景,对Nginx产生浓厚的兴趣,阅读张宴的(这个85年的小伙子年轻有为羡慕+妒忌),搞明白了大致原理和配置,Ubuntu10.10,window下对Nginx+tomcat负载均衡做了配置尝试,将全部请求转发到tomcat,并未做静态,动态分开,图片防盗链等配置。

Nginx 介绍

Nginx (发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。  其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页伺服器中表现较好.目前中国大陆使用nginx网站用户有:新浪、网易、 腾讯,另外知名的微网志Plurk也使用nginx。
上面的全是Nginx介绍基本上是废话,下面转入正题,图文结合展示基本配置,首先是window环境、其次是Ubuntu环境(Vbox虚拟)。

Window xp环境:Nginx+Tomcat6
1、下载地址
http://nginx.org/en/download.html ,这里我们推荐下载稳定版(stable versions),本文采用nginx-0.8.20。

2、目录结构
      Nginx-
               |_  conf   配置目录
               |_  contrib
               |_  docs 文档目录
               |_  logs  日志目录
               |_  temp 临时文件目录
               |_  html 静态页面目录
               |_  nginx.exe 主程序
window下安装Nginx极其简单,解压缩到一个无空格的英文目录即可(个人习惯,担心中文出问题),双击nginx启动,这里我安装到:D:\server目录,下面涉及到的tomcat也安装在此目录。
DOS环境启动
若果想停止nginx,dos环境运行命令:nginx -s stop

3、nginx.conf配置
Nginx配置文件默认在conf目录,主要配置文件为nginx.conf,我们安装在D:\server\nginx-0.8.20、默认主配置文件为D:\server\nginx-0.8.20\nginx.conf。下面是nginx作为前端反向代理服务器的配置。

Nginx.conf代码

  1. #Nginx所用用户和组,window下不指定 
  2. #user  niumd niumd; 
  3.  
  4. #工作的子进程数量(通常等于CPU数量或者2倍于CPU) 
  5. worker_processes  2
  6.  
  7. #错误日志存放路径 
  8. #error_log  logs/error.log; 
  9. #error_log  logs/error.log  notice; 
  10. error_log  logs/error.log  info; 
  11.  
  12. #指定pid存放文件 
  13. pid        logs/nginx.pid; 
  14.  
  15. events { 
  16.     #使用网络IO模型linux建议epoll,FreeBSD建议采用kqueue,window下不指定。 
  17.     #use epoll; 
  18.      
  19.     #允许最大连接数 
  20.     worker_connections  2048
  21.  
  22. http { 
  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.     #access_log  off; 
  32.     access_log  logs/access.log; 
  33.  
  34.     client_header_timeout  3m; 
  35.     client_body_timeout    3m; 
  36.     send_timeout           3m; 
  37.   
  38.     client_header_buffer_size    1k; 
  39.     large_client_header_buffers  4 4k; 
  40.  
  41.     sendfile        on; 
  42.     tcp_nopush      on; 
  43.     tcp_nodelay     on; 
  44.  
  45.     #keepalive_timeout  7520
  46.  
  47.     include    gzip.conf; 
  48.     upstream localhost { 
  49.       #根据ip计算将请求分配各那个后端tomcat,许多人误认为可以解决session问题,其实并不能。 
  50.       #同一机器在多网情况下,路由切换,ip可能不同 
  51.       #ip_hash;  
  52.       server localhost:18081
  53.       server localhost:18080
  54.      } 
  55.  
  56.     server { 
  57.             listen       80
  58.             server_name  localhost;    
  59.  
  60.             location / { 
  61.                     proxy_connect_timeout   3
  62.                     proxy_send_timeout      30
  63.                     proxy_read_timeout      30
  64.                         proxy_pass http://localhost; 
  65.             } 
  66.              
  67.    } 

代理设置如下:

Proxy.conf代码:

  1. proxy_redirect          off; 
  2. proxy_set_header        Host $host; 
  3. proxy_set_header        X-Real-IP $remote_addr; 
  4. proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for; 
  5. client_max_body_size    10m; 
  6. client_body_buffer_size 128k; 
  7. proxy_connect_timeout   300
  8. proxy_send_timeout      300
  9. proxy_read_timeout      300
  10. proxy_buffer_size       4k; 
  11. proxy_buffers           4 32k; 
  12. proxy_busy_buffers_size 64k; 
  13. proxy_temp_file_write_size 64k;

gzip压缩相关配置如下:

Gzip.conf代码:

  1. gzip              on; 
  2. gzip_min_length      1000
  3. gzip_types         text/plain text/css application/x-javascript;

4、Tomcat配置

对于tomcat大家都很熟悉,只需要修改server.xml配置文件即可,这里我们以apache-tomcat-6.0.14为例,分别在 server目录,解压缩并命名为:apache-tomcat-6.0.14_1、apache-tomcat-6.0.14_2。

第一处端口修改:Xml代码

  1.  
  2. Serverport="18006"shutdown="SHUTDOWN">

第二处端口修改:Xml代码

  1.  
  2. Connectorport="18081"protocol="HTTP/1.1"  
  3.                connectionTimeout="20000"  
  4.                redirectPort="8443"/> 

第三处端口修改:Java代码

  1. "8009" protocol="AJP/1.3" redirectPort="8443" /> 

Engine元素增加jvmRoute属性:Xml代码

Enginename="Catalina"defaultHost="localhost"jvmRoute="tomcat1">

两个tomcat的端口别重复,保证能启动起来,另一个tomcat配置希捷省略,监听端口为18080,附件中我们将上传所有的配置信息。

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

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

其次验证tomcat,启动两个tomcat,不出现端口冲突即为成功(tomcat依赖的java等搞“挨踢”的就废话不说了);

最后验证配置负载均衡设置,http://localhost/ 或http://localhost/index.jsp 。我修改了index.jsp页面,增加日志输出信息,便于观察。注意:左上角小猫头上的:access tomcat2、access tomcat1。说明访问了不同的tomcat。

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

Ubuntu10.10环境:Nginx+Tomcat6

我们下面简单说下ubuntu10.10下如何安装配置

1、下载Nginx

地址:http://nginx.org/en/download.html ,linux版本:nginx-0.8.20.tar.。解压缩命令:

tar -zxvf nginx-0.8.20.tar.gz


2、编译安装Nginx

Nginx依赖一些其他PCRE、openssl(依赖libssl-dev),本人笔记本Ubuntu环境已经安装PCRE,仅需安装依赖的openssl,下面我们简单说下如何安装PCRE和openssl等

PCRE下载地址:ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/

Shell代码

  1. tar zxvf  pcre-8.01.tar.gz 
  2. cd pcre-8.01 
  3. sudo ./configure 
  4. sodu make 
  5. sodu make install

openssl通过apt-get install安装

  1. sudo apt-get install openssl 
  2. sudo apt-get install libssl-dev 
  3. //如缺少其他包,请采用此方法安装,ubuntu有依赖提示

依赖的软件包安装完毕,下面来编译Nginx:

Shell代码

  1. #将window共享目录软件拷贝到当前工作目录 
  2. cp /mnt/fileshare/nginx-0.8.20.tar.gz ./ 
  3.  
  4. #解压缩软件包 
  5. tar zxvf nginx-0.8.20.tar.gz 
  6.  
  7. cd nginx-0.8.20 
  8. //编译源码,默认使用nobody,指定本机已存在的用户,组,启用nginx-status功能,监控nginx状态。启动debug 
  9. sudo ./configure  --user=niumd --group=niumd --with-debug --with-http_stub_status_module  
  10.   
  11.  
  12. sudo make  
  13. sudo make install

编译安装正确结束,按照上述window下方法检查默认配置,然后在默认配置下启动nginx,访问http://127.0.0.1

Nginx配置成功后我们对window下nginx.conf少做修改,如下:

Ubuntu nginx.conf代码

  1. #Nginx所用用户和组 
  2. user  niumd niumd; 
  3.  
  4. #工作的子进程数量(通常等于CPU数量或者2倍于CPU) 
  5. worker_processes  2
  6.  
  7. #错误日志存放路径 
  8. #error_log  logs/error.log; 
  9. #error_log  logs/error.log  notice; 
  10. error_log  logs/error.log  info; 
  11.  
  12. #指定pid存放文件 
  13. pid        logs/nginx.pid; 
  14.  
  15. events { 
  16.   #使用网络IO模型linux建议epoll,FreeBSD建议采用kqueue 
  17.     use epoll; 
  18.      
  19.     #允许最大连接数 
  20.     worker_connections  2048
  21.  
  22. http { 
  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.     #access_log  off; 
  32.     access_log  logs/access.log; 
  33.  
  34.     client_header_timeout  3m; 
  35.     client_body_timeout    3m; 
  36.     send_timeout           3m; 
  37.   
  38.     client_header_buffer_size    1k; 
  39.     large_client_header_buffers  4 4k; 
  40.  
  41.     sendfile        on; 
  42.     tcp_nopush      on; 
  43.     tcp_nodelay     on; 
  44.  
  45.     #keepalive_timeout  7520
  46.  
  47.     include    gzip.conf; 
  48.     upstream localhost { 
  49.      #ip_hash 
  50.       #ip_hash; 
  51.       server localhost:18081
  52.       server localhost:18080
  53.      } 
  54.  
  55.     server { 
  56.             listen       80
  57.             server_name  localhost;    
  58.  
  59.             location / { 
  60.               proxy_connect_timeout   3
  61.               proxy_send_timeout      30
  62.               proxy_read_timeout      30
  63.                 proxy_pass http://localhost; 
  64.             } 
  65.              
  66.    } 

对于上面关于ubuntu下Nginx配置和window下基本相同,区别在使用的IO网络模型,linux下建议使用epoll,另外就是运行所用的用户和组;

3、配置tomcat

请参考window下配置,完全相同。

4、启动停止nginx

ubuntu下启动nginx与window稍有不同,大致启动停止方法如下。

Java代码

  1. #nginx目录执行 
  2. sbin/nginx 
  3. 或通过-c 指定配置文件 
  4. sbin/nginx -c usr/local/nginx8.20/conf/nginx/conf

Shell代码

  1. niumd@niumd-laptop:/usr/local/nginx$ pwd 
  2. /usr/local/nginx 
  3. niumd@niumd-laptop:/usr/local/nginx$ sudo sbin/nginx -t 
  4. the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok 
  5. configuration file /usr/local/nginx/conf/nginx.conf test is successful 
  6. niumd@niumd-laptop:/usr/local/nginx$ sudo sbin/nginx -v 
  7. nginx version: nginx/0.8.20 
  8. niumd@niumd-laptop:/usr/local/nginx$ sudo sbin/nginx -V 
  9. nginx version: nginx/0.8.20 
  10. built by gcc 4.4.3 (Ubuntu 4.4.3-4ubuntu5)  
  11. configure arguments: --user=niumd --group=niumd --with-debug --with-http_sub_module 
  12. niumd@niumd-laptop:/usr/local/nginx$ sudo sbin/nginx  
  13. niumd@niumd-laptop:/usr/local/nginx$ ps -ef|grep nginx 
  14. root      5158     1  022:32 ?        00:00:00 nginx: master process sbin/nginx 
  15. niumd     5159  5158  022:32 ?        00:00:00 nginx: worker process 
  16. niumd     5161  1577  022:32 pts/0    00:00:00 grep --color=auto nginx 
  17. niumd@niumd-laptop:/usr/local/nginx$  

我们通过ps  -ef|grep nginx,看到如下结果:

注意:在启动时linux提示一句警告【warn】……,是因为我们设置的 #允许最大连接数 worker_connections  2048,超过linux默认1024的限制。

停止:kill -信号类型 pid

nginx/logs目录下有个nginx。pid的文件,此文件记录了每次运行的pid,也可以通过ps命令查询。

信号类型如下:

信号类型 描述
RERM.INT 快速关闭
HUP 平滑重启,加载配置
USR1 重新加载日志
USER2 平滑升级执行程序
WINCH 从容关闭工作进程
QUIT 从容关闭

以上就介绍了Nginx+tomcat配置集群,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn