vlambda博客
学习文章列表

使用 Nginx 本地模拟集群访问

一、使用场景
本地开发项目,通常只会启动一个实例,而有些功能是在集群场景下才能得到验证,比如:
1、http session 共享
2、websocket 连接断开机制
3、cas 单点登录
本地项目通过不同端口启动多个服务实例,使用 Nginx 反向代理,用以模拟集群效果。

二、安装 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 测试,可以在后台看到是访问到了不同的端口服务。


五、其他补充
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