Nginx反向代理与负载均衡
系统环境:openEuler22.03 LTS
网络拓扑如下:
需求与说明:
- Web服务器1、Web服务器2和Nginx代理服务器位于同一局域网内;
- Web服务器1和Web服务器2运行着同一个前后端分离的Java Web项目;
- 前端项目打包后的dist目录放置在Nginx代理服务器的/usr/local/website/目录下;
- 后端项目的jar包则分别运行在Web服务器1和Web服务器2中,端口号为8080;
- 现需配置Nginx服务,实现Nginx反向代理和负载均衡,其中Web服务器2的性能较好,配置权重为2/3。
1 配置nginx代理服务器
1.1 安装nginx
在Nginx服务器上安装nginx软件包。
dnf -y install nginx
1.2 添加nginx系统用户
默认情况下,openEuler会自动添加nginx系统用户,若没有则通过以下命令添加,否则就跳过该操作。
# 查看是否有nginx系统用户
id nginx# 若没有nginx系统用户,则添加
useradd -r -d /var/lib/nginx -s /usr/sbin/nologin
1.3 编辑nginx配置文件
编辑/etc/nginx/nginx.conf配置文件,重点关注站点根目录root、负载均衡(upstream模块)和反向代理(server模块中的location节)的配置,其它按默认的即可。
[root@nginxproxy ~]# vim /etc/nginx/nginx.confuser nginx;
……此处省略其它配置与注释……http {……此处省略其它配置与注释……include /etc/nginx/conf.d/*.conf;# 添加负载均衡服务器upstream ozonservers {server 192.168.18.20:8080 weight=1;server 192.168.18.30:8080 weight=2;}server {listen 80;listen [::]:80;server_name _;root /usr/local/website/dist; #此处为Web前端目录所在位置index index.html;# 配置反向代理location /prod-api/ { #prod-api为后端接口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_set_header X-Forwarded-Proto $scheme;proxy_pass http://ozonservers/; #注意最后面的“/”不能少}# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}……此处省略后续其它配置与注释……
1.4 配置SELinux
由于Web主目录为自定义的,故需要配置SELinux策略,否则无法方法前端页面。
# 添加安全上下文
semanage fcontext -at httpd_sys_content_t "/usr/local/website(/.*)?"# 生效安全上下文配置
restorecon -Rv /usr/local/website/
1.5 配置防火墙
# 添加防行http服务
firewall-cmd --permanent --add-service=http# 生效配置
firewall-cmd --reload
1.6 重启nginx服务
重启nginx服务,以便让配置生效。
# 重启服务
systemctl restart nginx.service # 查看服务状态
systemctl status nginx.service
2 配置Web服务器
两台Web服务器均要操作,以下以某一台为例。
2.1 配置防火墙
因两台Web服务器运行的Java Web后端端口为8080,故需将此端口放行。
# 添加防行8080端口
firewall-cmd --permanent --add-port=8080/tcp# 生效配置
firewall-cmd --reload
3 测试
浏览器测试访问nginx代理服务器的外部IP地址(192.168.8.10)即可。