# 处理请求的进程个数(干活的进程数),线上服务建议设置为1,设置大于1不能提升nginx的代理性能,甚至性能会更低,但nginx如果要进行大量cpu运算工作,则可以设置为cpu核心数
worker_processes 1;
events {
# 每一个worker的最大连接数,如果设置大于操作系统最大文件打开数量,则需要修改ulimit
worker_connections 1024;
}
http {
# 存储server_name的大小,出现“could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32”后再进行修改即可
server_names_hash_bucket_size 64;
# mime.types包含了绝大部分的“Content-type”,没必要修改
include mime.types;
# 访问io流编码(本地文件或接口),线上环境设置为utf-8
charset gbk,utf-8;
# 是否采用sendfile方式传输,启用就完了,默认会采用read/wirte模式
sendfile on;
# 接口存活时长,单位秒
keepalive_timeout 65;
# 下面这些是把当前request中的一些请求头传入下一层
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 获取用户真实ip
set_real_ip_from 0.0.0.0/0;
real_ip_header X-Forwarded-For;
# 服务器组定义,建议都加上权值
upstream websocket {
# 默认启用的服务ip,max_fails和fail_timeout表示再10秒内错误一次,则表示服务不可用,启用backup服务
server 192.168.0.11:8080 weight=100 max_fails=1 fail_timeout=10s;
# backup标记代表是备用服务器,如果主服务器不可用,则会分发到备用服务器
# websocket可以先采用这个方式,保证用户只会连接到一台服务器上
server 192.168.0.12:8080 weight=100 backup;
}
server {
# 监听的端口号
listen 8089;
# 需要证书认证,如果不需要,删掉即可
# 如果配置了需要证书,那么需要配置证书的公钥和私钥
ssl on;
server_name localhost;
# 证书公钥
ssl_certificate 4480050_www.baidu.com.pem;
# 证书私钥
ssl_certificate_key 4480050_www.baidu.com.key;
proxy_read_timeout 100;
location /ws {
# 这个是websocket代理的配置 如果是websocket的代理,则必须加上下面三条
proxy_http_version 1.1;
proxy_set_header Upgrade "websocket";
proxy_set_header Connection "Upgrade";
#error # 与服务器建立连接,向其传递请求或读取响应头时发生错误;
#timeout # 在与服务器建立连接,向其传递请求或读取响应头时发生超时;
#invalid_header # 服务器返回空的或无效的响应;
#http_500 # 服务器返回代码为500的响应;
#http_502 # 服务器返回代码为502的响应;
#http_503 # 服务器返回代码为503的响应;
#http_504 # 服务器返回代码504的响应;
#http_403 # 服务器返回代码为403的响应;
#http_404 # 服务器返回代码为404的响应;
#http_429 # 服务器返回代码为429的响应(1.11.13);
#non_idempotent # 通常,请求与 非幂等 方法(POST,LOCK,PATCH)不传递到请求是否已被发送到上游服务器(1.9.13)的下一个服务器; 启用此选项显式允许重试此类请求;
#off # 禁用将请求传递给下一个服务器。
# upstream触发规则配置,满足指定后面的情况才会执行执行upstream规则
# 不建议其它状态进行重试,可能只是服务出现错误,如果重试会造成多次执行,比如多次派车,多次发短信等
# 如果是400系列错误,无论访问多少次也是一样,也不建议添加400系列
proxy_next_upstream error http_502 http_503 http_504;
# 使用服务器组进行访问,会根据权值分配对应服务器
# 注意,如果以"/"结尾,nginx会忽略掉location配置的地址
# 例如:https://www.baidu.com/ws/123,忽略掉后,访问到服务的地址为:https://192.168.0.17:8080/123,不忽略的地址为:https://192.168.0.17:8080/ws/123
proxy_pass http://websocket;
}
}
}