关于nginx,不了解的请先阅读这里:
http://wiki.nginx.org/Main,中文文档:
http://wiki.nginx.org/NginxChs
这是最近比较流行的一个轻量级的web server,在我的同机压力测试实验中,响应能力是apache的3倍以上。功能比apache简单,小巧,最大并发连接能到3万。
对于nginx的使用,我也是近期才开始,使用的目的是在不增加硬件的条件下提升服务响应能力,以下配置适用环境:
linux + nginx0.7.64+ tomcat6
nginx同时是一个很强的反向代理server,可以用来跟tomcat做负载均衡集群,而且配置很简单,不过有个需要注意的地方:目前nginx跟后端server使用http1.0协议,不能keepalive,只能每次重新打开连接。需要关闭后端的keepalive,否则会产生大量后端的timewait状态的socket连接。
1 nginx代理tomcat关键配置代码如下:
server {
listen 80;
server_name YOUR_DOMAIN;
root /PATH/TO/YOUR/WEB/APPLICATION;
location / {
index.jsp;
}
location ~ ^/WEB-INF/* {#禁止访问被保护的目录
deny all;
}
location ~ \.do$ {
proxy_pass http://localhost:8080;#转发给tomcat端口,也可以是任何server。
proxy_set_header X-Real-IP $remote_addr;#转发客户端真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
location ~ \.jsp$ {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
location ~ ^/servlet/* {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}
2 nginx负载均衡核心配置代码:
http {
upstream myproject {
server 127.0.0.1:8000 weight=3;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
server {
listen 80;
server_name www.domain.com;
location / {
proxy_pass http://myproject;#myproject 前面要加http://,否则异常
}
}
}
3 nginx+tomcat负载均衡简单配置:不用修改任何tomcat配置,只要tomcat开启http1.1协议端口(tomcat默认开启)
http {
upstream myproject {
server 127.0.0.1:8000 weight=3;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
server {
listen 80;
server_name www.domain.com;
root /PATH/TO/YOUR/WEB/APPLICATION;
location / {
index.jsp;
}
location ~ ^/WEB-INF/* {#禁止访问被保护的目录
deny all;
}
location ~ \.do$ {
proxy_pass http://myproject;#转发给tomcat端口,也可以是任何server。
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
location ~ \.jsp$ {
proxy_pass http://myproject;#myproject可以任意自定义,但是一定要在前面加http://
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
location ~ ^/servlets/* {
proxy_pass http://myproject;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}
}
4 实际环境复杂配置:tomcat动态负载均衡 + 静态文件
worker_processes 8;
worker_rlimit_nofile 65535;
events {
use epoll;#开启epoll模式
worker_connections 65535;
}
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 logs/access.log main;
sendfile on;#linux下强大的静态文件发送功能,一定要开启
tcp_nopush on;
tcp_nodelay on;
#keepalive_timeout 0;
keepalive_timeout 5;
keepalive_requests 10;
server_names_hash_bucket_size 128;
client_header_timeout 10;
client_body_timeout 10;
send_timeout 10;
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
client_max_body_size 8m;
gzip on;#开启gzip,节省带宽
gzip_min_length 1100;
gzip_buffers 4 8k;
gzip_types text/xml;
output_buffers 1 32k;
postpone_output 1460;
limit_rate_after 3m;#限速模块,前3M下载时不限速
limit_rate 512k; #限速模块
upstream statproxy {#负载均衡模块,核心配置
server 127.0.0.1:8080;
server 127.0.0.1:8180;
}
server {#纯静态文件访问
listen 80;
server_name a.udomain.com;
index index.html index.php;
root /PATH/TO/YOUR/WEB/APPLICATIONA;
#charset koi8-r;
#access_log logs/host.access.log main;
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ ^/server-status/ {#服务器状态监控,可以通过:http://a.udomain.com/server-status/访问,需要在编译安装是添加此模块,默认不带。
stub_status on;
access_log off;
}
}
server {#动态负载均衡 + 动态静态分离
listen 80;
server_name b.udomain.com;
index index.html index.php;
root /PATH/TO/YOUR/WEB/APPLICATIONB;
error_page 500 502 503 504 /50x.html;
location ~ ^/WEB-INF/* {#禁止访问被保护的目录
deny all;
}
location ~ \.do$ {
proxy_pass http://statproxy;#经负载均衡模块转发
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
location ~ \.jsp$ {
proxy_pass http://statproxy;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
location ~ ^/servlet/* {
proxy_pass http://statproxy;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}
server {#动态无负载均衡+静态访问
listen 80;
server_name c.udomain.com;
index index.html index.php;
root /PATH/TO/YOUR/WEB/APPLICATIONC;
#charset koi8-r;
#access_log logs/host.access.log main;
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ ^/WEB-INF/* {#禁止访问被保护的目录
deny all;
}
location ~ \.jsp$ {
proxy_pass http://localhost:8280;#直接转发
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
location ~ \.do$ {
proxy_pass http://localhost:8280;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
location ~ ^/servlet/* {
proxy_pass http://localhost:8280;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}
}
5 tomcat端配置:
默认开启http1.1协议即可。建议使用NIO连接器。关于NIO,可以参考tomcat官方文档:
http://tomcat.apache.org/tomcat-6.0-doc/config/http.html
注意问题:
nginx+tomcat下:
request.getRemoteAddr()会取不到正确的ip地址的,但是
proxy_set_header X-Real-IP $remote_addr;
这个配置把正确的ip地址放在了header里了,可以通过:
String ip = request.getHeader("X-Real-IP");
获取到正确的用户ip地址,当然这样会需要修改程序,的确不是个好的办法,不能适用所有场景。
参考文档:
nginx文档:
http://wiki.nginx.org/Main,中文文档:
http://wiki.nginx.org/NginxChs
nginx+tomcat配置示例:
http://wiki.nginx.org/NginxJavaServers
nginx负载均衡配置示例:
http://wiki.nginx.org/NginxLoadBalanceExample
tomcat nio配置参数文档:
http://tomcat.apache.org/tomcat-6.0-doc/config/http.html
分享到:
相关推荐
apache+nginx+tomcat+
最近学习Nginx+tomcat实现 负载均衡。 首先大家注意: 本文章中没有session共享,关于session共享我会在下一篇中讲解,先实现Nginx+tomcat负载均衡再实现session共享。 从网上查了好多资料,多走了很多弯路,现在把...
Tomcat6集群 + Apache + Nginx 均衡负载 以及apache 的ab进行压力测试的方法
linux下apache+tomcat实现集群,压缩包里包括两篇文档(操作步骤和详解),3个压缩包(安装文件)
配置apache+tomcat负载均衡和session复制,并且解决了tomcat报2009-6-5 10:10:12 org.apache.jk.common.ChannelSocket processConnection 警告: processCallbacks status 2 的问题
目前官方 Nginx 并不支持 Windows,您只能在包括 Linux、UNIX、BSD 系统下安装和使用; Nginx 本身只是一个 HTTP 和反向代理服务器,它无法像 Apache 一样通过安装各种模块来支持不同的页面脚本,例如 PHP、CGI 等...
目前可以和Tomcat做负载均衡的主流服务器是Apache,但是Nginx由于功能多、配置简单等优点逐渐成为很多负载均衡服务器的首选。Nginx的并发数可达到50000,所以理论上可以和Tomcat以1:100的比例来配置,这样便可以很好...
1,tomcat8的配置: 1.1修改tomcat8.x/conf/context.xml的配置如下: <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file ...
linux 下实现apache+tomcat集群及session复制
技术分享:linux下Nginx+tomcat整合的安装与配置 目的:搭建 Nginx 与 tomcat 整合,用 Nginx 代替 apache
#========controller,负载均衡控制器======== worker.controller.type=lb worker.controller.balanced_workers=tomcat1,tomcat2 worker.controller.sticky_session=1 5 修改tomcat的端口号(3处) ...
由于工作的需求,在使用中,需要搭建负载均衡,研究了Apache+Tomat负载均衡的方案,并且通过检索相关的文章,进行了比较发现,Apache负载负载均衡在使用的效率上,远远不如Nginx的效率高,因此决定使用Nginx来进行...
tomcat+apache+linux负载均衡集群配置反向代理
内置内存存储,并且他的分布式算法是在客户端完成的,不需要服务器端进行通信,我们当时在做项目的时候因为考虑到项目的高可用性高扩展性,因此在服务器部署方面采用了apache+jk+tomcat这种负载均衡的方式,...
详细讲解apache/tomcat和nginx的区别,可以充分掌握他们的应用场景
非常经典nginx-1.11.3+apache-tomcat-7.0.47搭建高性能负载均衡集群适合初学者、入门手册。
tomcat8+Redis+nginx负载均衡集群部署,apache-tomcat-8.0.47+nginx-1.13.6+Redis-x64-3.2.100
手把手教你搭建https服务器,部署ssl证书到php java服务器(Nginx-Apache PHP-Tomcat java+SSL证书) 1.购买免费的SSL证书 2.下载SSL证书 3.往nginx上新增ssl 4.往Apache上新增ssl 5.往Tomcat上新增ssl 6.解决警告 7....
nginx:1.4.4 apache:2.2.29、2.4.10 mysql:5.1.73、5.5.40、5.6.21 php:5.2.17、5.3.29、5.4.23、5.5.7 php扩展:memcache、Zend Engine/ OPcache jdk:1.7.0 tomcat:7.0.54 ftp:(yum/apt-get安装) phpwind...
nginx+apache+mysql+php+memcached+squid搭建门户网站