背景
系统现在有两台服务器作为集群方式部署,想通过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 /usr/local/nginx/nginx.pid;
events {
worker_connections 2048;
}
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;
- worker_processes 是表示工作进程的数量,一般设置和cpu核心数量相同即可。
- pid我们设置到我们nginx安装的目录/usr/local/nginx/nginx.pid
配置http中的内容
下面我们使用upstream来进行代理
在http中我们编辑upstream
upstream tomcat{
server 127.0.0.1:8080;
server 127.0.0.1:8088;
}
配置location
location /{
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://tomcat;
proxy_redirect off;
}
判断是否配置成功
./sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
如果出现successful就说明配置已经是成功的了。
重新接在配置文件
./sbin/nginx-s reload
weight权重配置
upstream tomcat{
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8088 weight=2;
}
我们设置让8088的权重比8080的权重高一倍,经过测试也就是我们访问两次都是代理到了8088上。 在访问就代理到了8080上。
ip_hash配置
如果我们的session是放在内存中的话,我们就会出现频繁登录的现象。
这时候我们就要设置粘性ip
upstream tomcat{
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:8088;
}
这时候我们去访问永远被代理到8088或者8080上其中的一台不会发生改变。
我们这样配置也就是每个访问者都会按照他的ip的hash来分配,也就是一个用户只能访问一个执行的服务器,这样也就解决了我们的session的问题。当然session上可以在客服端进行处理可以将session信息存入数据库或缓存中。