# Nginx配置协同https
# 适用场景
客户的协同OA默认是HTTP,出于安全合规考虑,需要使用HTTPS访问协同OA,按照本手册,基于Nginx管理HTTPS是目前最推荐、最易于维护的方式!
基础逻辑示意图如下:
默认HTTP访问场景:
http://xx.xx.xx.xx/seeyon
[客户端] - - - - - - - - - → [协同OA]
使用HTTPS访问场景:
https://xxx.com/seeyon http://xx.xx.xx.xx/seeyon
[客户端] - - - - - - - - - → [Nginx+SSL] - - - - - - - - - → [协同OA]
扩展说明:只需要在Nginx侧配置管理HTTPS即可,协同OA侧(含OA依赖的中间件)都无需做任何配置调整。包括东方通、金蝶、宝兰德等等信创中间件,使用HTTPS的模式依然不变:依然基于Nginx管理HTTPS,在信创中间件侧不做任何调整(保持默认HTTP):
[客户端] --- HTTPS --→ [Nginx+SSL] --- HTTP --→ [东方通中间件|协同OA]
[客户端] --- HTTPS --→ [Nginx+SSL] --- HTTP --→ [金蝶中间件|协同OA]
[客户端] --- HTTPS --→ [Nginx+SSL] --- HTTP --→ [宝兰德中间件|协同OA]
[客户端] --- HTTPS --→ [Nginx+SSL] --- HTTP --→ [默认Tomcat|协同OA]
# 视频参考
如不熟悉,可参考部署视频进行更深入掌握: 通过 协同云 (opens new window) - 赋能中心 - 致远学院 - 搜索“Nginx反向代理及https配置”
# 准备事项
完成Nginx的HTTPS配置,需要提前准备如下事项:
1、提前部署Nginx:
- 如果客户环境已经使用Nginx反向代理协同或负载均衡管理协同集群,则直接在已部署的Nginx上面调整配置SSL
- 如果客户环境没有Nginx,则需要先部署NG,部署严格按照《Nginx安装部署参考手册 (opens new window)》编译安装!
2、客户提前准备HTTP的证书,这些需要客户IT部门或信息中心完成:
- 1)客户需要给OA分配一个单独的域名(域名可以在域名厂商购买,如阿里云、腾讯云、华为云、七牛云等)
- 2)客户在证书颁发机构申请https证书,申购完成后,下载Nginx类型的证书(免费证书有效期较短,注意及时更新)
- 3)建议不要使用自签证书,使用自签或无效证书导致的各类问题或隐患由项目上自行负责处理
- 4)提前部署Nginx服务,并将域名解析到Nginx所在服务器(外网使用时,可以解析到外网IP,再将外网端口映射到Nginx服务的端口)
- 5)参考下文进行Nginx服务配置,原始ng类型证书不需要修改,保持pem类型即可
# 部署概要拓扑图
Nginx服务常见的部署模式见以下部署示意图:


# Nginx配置HTTPS
首先,在取得适合Nginx的HTTPS证书后,将相关证书放置到Nginx的conf/ssl目录下(比如pem、key文件放在conf/ssl下,文件名以实际为准)
然后,参考如下方式修改nginx.conf,实现HTTPS管理:
以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 443 ssl;
ssl_certificate ssl/www.seeyon.com.pem;
ssl_certificate_key ssl/www.seeyon.com.key;
# TLS协议按需调整
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
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侧https调整
现在产品默认不再需要通过SeeyonConfig或OA的Tomcat配置文件(ApacheJetspeed/conf/server.xml)修改HTTPS参数。 只有在V8.x、V7.x及更早版本才需要配置。
对于没有明确指出具体协同版本的项目,均可默认采用本手册的配置方案,不再需要修改OA或中间件配置https内容!

# 健康检查
健康检查: 注意upstream每个server都有 max_fails=300 fail_timeout=30s 的参数配置,这个是被动检查健康参数:当前节点30秒内300次失败则后面不会再请求到该节点。 在用户在线数不多的情况下被动健康检查可能一直不会将节点设置为failed,可以考虑“主动健康检查模块”,即定期主动检查服务可用性。主动健康检查模块手册参考 https://open.seeyoncloud.com/#/faq/vuepressFile/v1/share?url=Z2ptZkplPjI5ODg=
# 重启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配置http重定向https
此场景需要在nginx配置了https访问的条件下进行配置
编辑nginx.conf配置
在http段落中增加server段,并新增http协议的端口,做rewrite跳转
......
server {
listen 80;
server_name localhost;
charset utf-8;
location / {
rewrite ^(.*)$ https://$host$1 permanent;
}
}
......
# 参数调优
参数优化需依据nginx的运行情况,及服务器负载情况进行调整。常见的优化参数有以下内容:
worker_processes:nginx的进程数,一般为cpu的倍数,可以为1倍。
worker_rlimit_nofile:nginx的进程打开文件数,可以与ulimit --u的值一致。
worker_connections:每个进程允许的最多连接数。
keepalive_timeout:客户端超时时间,单位秒。
client_max_body_size:客户端连接的最大请求实体,影响协同系统的上传附件大小,建议设置大于或等于运行附件上传的最大值。
access_log:请求日志,建议无需调试时关闭(off)。