一、使用场景

​ 本地开发项目,通常只会启动一个实例,而有些功能是在集群场景下才能得到验证,比如:

1、http session 共享

2、websocket 连接断开机制

3、cas 单点登录

本地项目通过不同端口启动多个服务实例,使用 Nginx 反向代理,用以模拟集群效果。

0Nginx.png

二、安装 Nginx

1、下载 Nginx

http://nginx.org/download/nginx-1.16.1.tar.gz

tar zxvf nginx-1.16.1.tar.gz

2、下载 pcre

https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz

tar zxvf pcre-8.44.tar.gz

3、安装 Nginx

cd nginx-1.16.1

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-pcre=/xxxxx/pcre-8.44

make

make install

# 查看 Nginx 版本
/usr/local/nginx/sbin/nginx -v

三、配置 Nginx

1、进入 conf 目录,新建目录 servers

mkdir servers

2、编辑 nginx.conf 文件,在 http 全局块中增加配置 include servers/*.conf;

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;

    include servers/*.conf;
    server {
        listen       80;
        
    ...

3、在 servers 目录下创建配置文件 test.conf

upstream mytest {
      server 127.0.0.1:8081 max_fails=3 fail_timeout=30s;
      server 127.0.0.1:8082 max_fails=3 fail_timeout=30s;
}
server {
        listen       8099;
        server_name  127.0.0.1;

        location / {
            proxy_pass  http://mytest;
            # proxy_set_header Host $host;
            # 以下配置是支持 websocket 请求
	    	proxy_set_header Upgrade $http_upgrade;
 	    	proxy_http_version 1.1;
 	    	proxy_set_header Connection "Upgrade";
 	    	proxy_set_header Host $host;
        }
}

四、测试效果

1、启动 Nginx

./nginx

# 如果修改配置需要重启则使用  ./nginx -s reload 命令

2、启动 8081 8082 的服务实例,访问 127.0.0.1:8099 测试

在浏览器中多次访问 127.0.0.1:8099,可以在后台看到是访问到了不同的端口服务。

1Nginx8081.jpg

2Nginx8082.jpg

五、其他补充

1、常用命令

# 重新载入配置文件
./nginx -s reload
# 停止
./nginx -s stop
# 重启
./nginx -s reopen

2、负载均衡策略

Nginx 默认为轮询策略,另外还支持加权轮询(可以通过 weight 指定权重)、IP HASH 、扩展策略。

3、使用域名访问

上述步骤中采用了IP + 端口访问,其实通过域名访问同样可以达到效果,比如浏览器访问 www.testlyqiang.com 被转发到两台后端服务上,只需要将 test.conf 改为如下配置,并且配置 hosts

upstream www.testlyqiang.com {
      server 127.0.0.1:8081 max_fails=3 fail_timeout=30s;
      server 127.0.0.1:8082 max_fails=3 fail_timeout=30s;
}
server {
        listen       80;
        server_name  www.testlyqiang.com;

        location / {
            proxy_pass  http://www.testlyqiang.com;
            # proxy_set_header Host $host;
            # 以下配置是支持 websocket 请求
            proxy_set_header Upgrade $http_upgrade;
 	    	proxy_http_version 1.1;
 	    	proxy_set_header Connection "Upgrade";
 	    	proxy_set_header Host $host;
        }
 }

编辑 hosts 文件

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1	localhost
255.255.255.255	broadcasthost
::1             localhost
127.0.0.1 www.testlyqiang.com