搜索
首页后端开发php教程Nginx+tomcat配置集群

本文转载自: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教程有兴趣的朋友有所帮助。

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
PHP电子邮件:分步发送指南PHP电子邮件:分步发送指南May 09, 2025 am 12:14 AM

phpisusedforsendendemailsduetoitsignegrationwithservermailservicesand andexternalsmtpproviders,自动化notifications andMarketingCampaigns.1)设置设置yourphpenvironcormentswironmentswithaweberswithawebserverserverserverandphp,确保themailfunctionisenabled.2)useabasicscruct

如何通过PHP发送电子邮件:示例和代码如何通过PHP发送电子邮件:示例和代码May 09, 2025 am 12:13 AM

发送电子邮件的最佳方法是使用PHPMailer库。1)使用mail()函数简单但不可靠,可能导致邮件进入垃圾邮件或无法送达。2)PHPMailer提供更好的控制和可靠性,支持HTML邮件、附件和SMTP认证。3)确保正确配置SMTP设置并使用加密(如STARTTLS或SSL/TLS)以增强安全性。4)对于大量邮件,考虑使用邮件队列系统来优化性能。

高级PHP电子邮件:自定义标题和功能高级PHP电子邮件:自定义标题和功能May 09, 2025 am 12:13 AM

CustomHeadersheadersandAdvancedFeaturesInphpeMailenHanceFunctionalityAndreliability.1)CustomHeadersheadersheadersaddmetadatatatatataatafortrackingandCategorization.2)htmlemailsallowformattingandttinganditive.3)attachmentscanmentscanmentscanbesmentscanbestmentscanbesentscanbesentingslibrarieslibrarieslibrariesliblarikelikephpmailer.4)smtppapapairatienticationaltication enterticationallimpr

使用PHP和SMTP发送电子邮件的指南使用PHP和SMTP发送电子邮件的指南May 09, 2025 am 12:06 AM

使用PHP和SMTP发送邮件可以通过PHPMailer库实现。1)安装并配置PHPMailer,2)设置SMTP服务器细节,3)定义邮件内容,4)发送邮件并处理错误。使用此方法可以确保邮件的可靠性和安全性。

使用PHP发送电子邮件的最佳方法是什么?使用PHP发送电子邮件的最佳方法是什么?May 08, 2025 am 12:21 AM

ThebestapproachforsendingemailsinPHPisusingthePHPMailerlibraryduetoitsreliability,featurerichness,andeaseofuse.PHPMailersupportsSMTP,providesdetailederrorhandling,allowssendingHTMLandplaintextemails,supportsattachments,andenhancessecurity.Foroptimalu

PHP中依赖注入的最佳实践PHP中依赖注入的最佳实践May 08, 2025 am 12:21 AM

使用依赖注入(DI)的原因是它促进了代码的松耦合、可测试性和可维护性。1)使用构造函数注入依赖,2)避免使用服务定位器,3)利用依赖注入容器管理依赖,4)通过注入依赖提高测试性,5)避免过度注入依赖,6)考虑DI对性能的影响。

PHP性能调整技巧和技巧PHP性能调整技巧和技巧May 08, 2025 am 12:20 AM

phperformancetuningiscialbecapeitenhancesspeedandeffice,whatevitalforwebapplications.1)cachingwithapcureduccureducesdatabaseloadprovesrovesponsemetimes.2)优化

PHP电子邮件安全性:发送电子邮件的最佳实践PHP电子邮件安全性:发送电子邮件的最佳实践May 08, 2025 am 12:16 AM

ThebestpracticesforsendingemailssecurelyinPHPinclude:1)UsingsecureconfigurationswithSMTPandSTARTTLSencryption,2)Validatingandsanitizinginputstopreventinjectionattacks,3)EncryptingsensitivedatawithinemailsusingOpenSSL,4)Properlyhandlingemailheaderstoa

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具