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软件包。

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)即可。