Nginx的upstream配置

Scroll Down

背景

系统现在有两台服务器作为集群方式部署,想通过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信息存入数据库或缓存中。