nginx负载均衡篇二、nginx配置
如果不知道在Linux下如何安装nginx请参考前一篇文章。 nginx负载均衡的配置较apache要简单许多,这里用nginx做负载均衡将不再描述tomcat集群的配置,如果对tomcat集群配置有不懂的地方,请参考Apache反向代理结合Tomcat集群来实现负载均衡(三)、tomcat集群文章进行配置。下边进入正题,开始配置nginx负载均衡。 先来看
如果不知道在Linux下如何安装nginx请参考前一篇文章。
nginx负载均衡的配置较apache要简单许多,这里用nginx做负载均衡将不再描述tomcat集群的配置,如果对tomcat集群配置有不懂的地方,请参考Apache反向代理结合Tomcat集群来实现负载均衡(三)、tomcat集群文章进行配置。下边进入正题,开始配置nginx负载均衡。
先来看下nginx的完全配置:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
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;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream tom_server {
server 172.18.117.113:8090 weight=2;
server 172.18.117.116:8080 weight=3;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://tom_server;
#root html;
#index index.html index.htm;
}
#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;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
扶好了,不要被这个配置文件给吓到了,其实我们用配的文件很少,下边说下我们主要加入的负载均衡配置。
首先需要加入需要代理的服务器地址
upstream tom_server {
server 172.18.117.113:8090 weight=2;
server 172.18.117.116:8080 weight=3;
}
名字可以随意起,只要前后保持一致即可,这里需要注意的是upstream节点一定要加在http节点中,否则启动会报错。
其次加入代理配置
server {
listen 80;#要监听的端口
server_name localhost;#要监听的主机
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://tom_server;#代理的upstream名
}
}
到这里重启下nginx就已经生效了,其实nginx的反向代理就这么简单。
下边我们说下一些高级配置,首先是被代理的服务器的
upstream设备上的状态设置
down 表示单前的server暂时不参与负载
weight 默认为1.weight越大,负载的权重就越大。
max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
fail_timeout:max_fails 次失败后,暂停的时间。
backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
另外大家到这里会考虑一个问题,session如何共享,nginx有以下两种方法(先不考虑tomcat集群中的session复制):
(1)ip_hash
(2 ) nginx-upstream-jvm-route (Nginx +tomcat )
nginx中的ip_hash技术能够将某个ip的请求定向到同一台后端,这样一来这个ip下的某个客户端和某个后端就能建立起稳固的session,ip_hash是在upstream配置中定义的:
upstream backend {
ip_hash;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
}
ip_hash
ip_hash是容易理解的,但是因为仅仅能用ip这个因子来分配后端,
因此ip_hash是有缺陷的,不能在一些情况下使用:
1/ nginx不是最前端的服务器。ip_hash要求nginx一定是最前端的服务器,否则nginx得不到正确ip,就不能根据ip作hash。譬如使用的是squid为最前端,那么nginx取ip时只能得到squid的服务器ip地址
2/ nginx的后端还有其它方式的负载均衡。假如nginx后端又有其它负载均衡,将请求又通过另外的方式分流了,那么某个客户端的请求不能定位到同一台session应用服务器上
nginx-upstream-jvm-route 基于nginx+tomcat的解决方案
patch -p0 <../nginx-upstream-jvm-route-read-only/jvm_route.patch
使用./configure对nginx进行makefile描述时需要加上
--add-module=<path:nginx-upstream-jvm-route path>
tomcat的配置文件修改Server.xml
Tomcat01:
<Enginename="Catalina" defaultHost="localhost"jvmRoute="a">
Tomcat02:
<Enginename="Catalina" defaultHost="localhost"jvmRoute="b">
nginx的配置文件修改
upstreambackend {
server 192.168.2.88:8080 srun_id=a;
server 192.168.2.89:8080 srun_id=b;
jvm_route $cookie_JSESSIONID|sessionidreverse;
}
location/ aa/
{
proxy_pass http://backend;
proxy_redirect off;
proxy_set_header X-Forwarded-For; $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
}
最后再补充下nginx的一些额外设置:
server
{
listen 80;
server_name 192.168.1.104;
location / {
<strong> proxy_pass http://mysvr;</strong>
}
#以下是一些反向代理的配置可删除.
proxy_redirect off;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
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; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
}
更多推荐
所有评论(0)