Nginx (发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。 其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页伺服器中表现较好.目前中国大陆使用nginx网站用户有:新浪、网易、 腾讯,另外知名的微网志Plurk也使用nginx。
上面的全是Nginx介绍基本上是废话,下面转入正题,图文结合展示基本配置,首先是window环境、其次是Ubuntu环境(Vbox虚拟)。本文主要基于Nginx下配置两台tomcat,结构如下图:
linux环境:Nginx+Tomcat6
这里我是用3台服务器做测试的 A,B,C
A服务器做主服务器用,也就是在A服务器上配置NGINX 再由A转发到B,C
1、A服务器目录结构
启动nginx : /usr/local/nginx/sbin/nginx
3、nginx.conf配置
以下是A服务器 nginx.conf 配置文件内容
Nginx配置文件默认在conf目录,主要配置文件为nginx.conf,下面是nginx作为前端反向代理服务器的配置。
#Nginx所用用户和组,window下不指定 #user niumd niumd; #工作的子进程数量(通常等于CPU数量或者2倍于CPU) worker_processes 2; #错误日志存放路径 #error_log logs/error.log; #error_log logs/error.log notice; error_log logs/error.log info; #指定pid存放文件 pid logs/nginx.pid; events { #使用网络IO模型linux建议epoll,FreeBSD建议采用kqueue,window下不指定。 use epoll; #允许最大连接数 worker_connections 10000; } http { include mime.types; #文件扩展名与文件类型映射表 default_type application/octet-stream; #默认文件类型 #定义日志格式 #log_format main '$remote_addr - $remote_user [$time_local] $request ' # '"$status" $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log off; access_log logs/access.log; client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; client_header_buffer_size 1k; #上传文件大小限制 large_client_header_buffers 4 4k; #设定请求缓 sendfile on; tcp_nopush on; #防止网络阻塞 tcp_nodelay on; #防止网络阻塞 #keepalive_timeout 75 20; #长连接超时时间,单位是秒 #zip gzip on; #开启gzip压缩输出 gzip_min_length 1024; #最小压缩文件大小 gzip_buffers 4 8k; #压缩缓冲区 gzip_comp_level 9; #压缩等级 gzip_proxied any; gzip_types application/xml application/javascript application/x-javascript application/atom+xml application/rss+xml; 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 300; proxy_send_timeout 300; proxy_read_timeout 300; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; upstream localhost { #根据ip计算将请求分配各那个后端tomcat,许多人误认为可以解决session问题,其实并不能。 #同一机器在多网情况下,路由切换,ip可能不同 #ip_hash; #weigth参数表示权值,权值越高被分配到的几率越大 server localhost:28080 weight=1; server 10.19.105.114:28088 weight=6; } server { listen 80; server_name localhost; index index.html index.htm index.php index.jsp; #location / { # root /usr/local/apache-tomcat-6.0.20/webapps/nginxtest; # index index.html index.htm; #} #location ~ \.(html|js|css|png|gif)$ { # root /usr/local/apache-tomcat-6.0.20/webapps/nginxtest; #} ######以下是实现动静分离的 也就是 location ~ \.(jsp|action)$ { proxy_set_header Host $host:80; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 3; proxy_send_timeout 30; proxy_read_timeout 30; proxy_pass http://localhost; } location ~\.(bmp|css|js|doc|docx|et|exe|gif|htm|html|ico|jpg|pdf|png|rar|swf|txt|xls|xlsx|xml|xsl|zip)$ { proxy_set_header Host $host:80; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 3; proxy_send_timeout 30; proxy_read_timeout 30; proxy_pass http://localhost; } location /YunDaPlatform { proxy_set_header Host $host:80; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 3; proxy_send_timeout 30; proxy_read_timeout 30; proxy_pass http://localhost; } location ~\.(css|js)$ { expires 7d; } # 7 status location /nginx_status { stub_status on; access_log off; allow 10.0.2.0/24; deny all; } } }
对于tomcat大家都很熟悉,只需要修改server.xml配置文件即可,这里我们以apache-tomcat-6.0.14为例,分别在server目录,解压缩并命名为:apache-tomcat-6.0.14_1、apache-tomcat-6.0.14_2。 这里我做的实验是公司一台服务上做的测试 所以其中一个 server.xml 就要修改相关端口了 我这里把server.xml里相关的 port值前面都加个2 这样端口号就不会冲突了 如果是两台服务器做的测试就不需要改了 但前提是两台服务器都在一个局域网内 因为是要在nginx里做 集群的
以下例子是 A服务器需要启动nginx 再转发到B C 服务器上 这样就增加了一定的安全性
其次再从网上看到其它的一些的资料上说 B C服务器也需要装nginx 但是我在B C服务器不装的情况下也可以实现集群 这里我也不知什么原因了