系统环境: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软件包。
bash
dnf -y install nginx
1.2 添加nginx系统用户
默认情况下,openEuler会自动添加nginx系统用户,若没有则通过以下命令添加,否则就跳过该操作。
bash
# 查看是否有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节)的配置,其它按默认的即可。
bash
[root@nginxproxy ~]# vim /etc/nginx/nginx.conf
user 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策略,否则无法方法前端页面。
bash
# 添加安全上下文
semanage fcontext -at httpd_sys_content_t "/usr/local/website(/.*)?"
# 生效安全上下文配置
restorecon -Rv /usr/local/website/
1.5 配置防火墙
bash
# 添加防行http服务
firewall-cmd --permanent --add-service=http
# 生效配置
firewall-cmd --reload
1.6 重启nginx服务
重启nginx服务,以便让配置生效。
bash
# 重启服务
systemctl restart nginx.service
# 查看服务状态
systemctl status nginx.service
2 配置Web服务器
两台Web服务器均要操作,以下以某一台为例。
2.1 配置防火墙
因两台Web服务器运行的Java Web后端端口为8080,故需将此端口放行。
bash
# 添加防行8080端口
firewall-cmd --permanent --add-port=8080/tcp
# 生效配置
firewall-cmd --reload
3 测试
浏览器测试访问nginx代理服务器的外部IP地址(192.168.8.10)即可。