# Nginx反向代理和负载均衡协同OA(http)

# 基础概念

反向代理: 传统项目采用【客户端->OA服务器】的访问形式,如客户涉及网络安全或其它需要,要求客户端不能直连OA服务器,可以使用Nginx反向代理能力采用【客户端->Nginx代理->OA服务器】的传输形式。这里的Nginx就采用了反向代理实现理念:客户端http访问Nginx地址和端口,实际最后请求的是OA地址。

负载均衡: 当OA实现了多台服务集群部署时,客户端无法采用【客户端->OA服务器多节点】的访问形式,此时需要一个前置Web服务来做请求规划,让客户端请求合理分配给对应OA节点。我们可以通过【客户端->Nginx负载均衡->OA服务器1 或 OA服务器2】的传输形式,由Nginx来实现请求负载均衡分发。

协同系统的集群要求对应的web服务在做负载均衡时支持会话保持机制。会话保持机制的意义在于,确保将来自相同客户端的请求,转发至后端相同的服务器进行处理。换句话说,就是将客户端与服务器之间建立的多个连接,都发送到相同的服务器进行处理。这种机制,可以识别客户端与服务器之间交互过程的关联性,在负载均衡的同时,保证一系列相关联的访问请求分配到同一台服务器上。

标准产品支持的会话保持策略为:七层会话保持(基于cookie识别)。

# 环境要求

Nginx支持协同系统的Web代理及集群部署的Web分发。

集群模式下,负载均衡且会话保持,需要用到nginx-sticky-module模块,此模块目前仅支持Linux系统,因此用Nginx做为集群模式的web服务时需要Linux操作系统的服务器。

源码编译安装参考手册:https://open.seeyoncloud.com/#/faq/vuepressFile/v1/share?url=Z2ptZkplPjI6Njk=

# 部署概要拓扑图

Nginx服务常见的部署模式见以下部署示意图:

# Nginx反向代理和负载均衡配置HTTP

以nginx安装在/home/nginx下为例,nginx的配置文件为/home/nginx/conf/nginx.conf。配置文件内容示例如下(其中upstream的名称及服务地址依据实际情况进行修改):

worker_processes auto;
worker_rlimit_nofile 20960;
error_log  logs/error.log  error;
events {
    worker_connections  4096;
    multi_accept on;
    accept_mutex on;
    accept_mutex_delay 500ms;
}
http {
        server_tokens off;
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        access_log off;
        include       mime.types;
        default_type  application/octet-stream;
        keepalive_timeout  300;
        client_max_body_size 10240M;

        gzip on;
        gzip_min_length 1k;
        gzip_buffers 4 16k;
        gzip_comp_level 3;
        gzip_types text/xml text/plain text/css text/javascript application/x-javascript application/javascript application/xml;
        gzip_disable "MSIE [1-6]\.";

        upstream seeyon_v5_cluster{
			# 默认安装的Nginx无sticky模块无法启动,必须参考手册基于Linux或信创进行Nginx+sticky编译才能启动
            sticky;
            server 192.168.0.1:80 max_fails=300 fail_timeout=30s;
            server 192.168.0.2:80 max_fails=300 fail_timeout=30s;
        }

        server {
            listen       80;
            server_name  localhost;
            charset utf-8;

            location / {
                proxy_pass http://seeyon_v5_cluster;
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header REMOTE-HOST $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_redirect http:// $scheme://;
                #proxy_redirect  off;
                proxy_connect_timeout 300;
                proxy_read_timeout 300;
                proxy_send_timeout 300;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
}

OA单机部署和OA集群部署(负载均衡)的配置几乎无差别,均采用下面的模板,唯一修改点就是下面配置upstream seeyon_v5_cluster{xxx}中的内容:

集群: 就是把每个OA节点都放到upstream seeyon_v5_cluster里面,并且务必加上sticky;,并且Nginx一定要参考“Nginx部署及配置”章节说明自行部署编译带sticky模块的Nginx才能做到负载均衡,否则无法启动:

upstream seeyon_v5_cluster{
	sticky;
	server 192.168.0.1:80 max_fails=300 fail_timeout=30s;
	server 192.168.0.2:80 max_fails=300 fail_timeout=30s;
	server 超过2台的集群就在后面追加其它集群节点配置即可
}

单机: 仅需要把OA单节点信息放到upstream seeyon_v5_cluster里面,加不加sticky;都可以:

upstream seeyon_v5_cluster{
	# 单节点留一条OA信息即可,这样就已经实现反向代理
	server 192.168.0.1:80 max_fails=300 fail_timeout=30s;
}

# 重启Nginx

以nginx安装在/home/nginx下为例,nginx的启动脚本为/home/nginx/sbin/nginx。启动示例如下:

# 切换命令行到nginx启动脚本目录
cd /home/nginx/sbin
# 启动
./nginx
# 重启
./nginx –s reload
# 指定配置文件重启,一般用于nginx异常停止后的启动
./nginx –c /home/nginx/conf/nginx.conf

# 参数调优

参数优化需依据nginx的运行情况,及服务器负载情况进行调整。常见的优化参数有以下内容:

  • worker_processes:nginx的进程数,一般为cpu的倍数,可以为1倍。

  • worker_rlimit_nofile:nginx的进程打开文件数,可以与ulimit --u的值一致。

  • worker_connections:每个进程允许的最多连接数。

  • keepalive_timeout:客户端超时时间,单位秒。

  • client_max_body_size:客户端连接的最大请求实体,影响协同系统的上传附件大小,建议设置大于或等于运行附件上传的最大值。

  • access_log:请求日志,建议无需调试时关闭(off)。

编撰人:admin