1.Nginx配置
nginx.conf配置文件:
# 工作进程数量
worker_processes 4;
# 单进程能打开的最大文件描述符数量
worker_rlimit_nofile 65535;
events {
#使用epoll的I/O模型
use epoll;
# 工作进程的最大连接数量
worker_connections 1024;
}
# 流式转发配置
stream {
...
}
- worker_processes
Nginx 的进程数,建议按照CPU的个数或者是核心数量设定。nginx 1.3.8以后版本, 如不设定, 默认值会设为自动检测的cpu核心数。 - worker_rlimit_nofile
一个nginx 进程打开的最多文件描述符数量,性能要求较高的场景下, 建议与ulimit -n 保持一致, 理论上是ulimit数 / Nginx进程数, 但是Nginx 分配并不均匀, 可以略多一些。 - use epoll
采用epoll的I/O模型, 适合高并发场景,基于linux内核2.6+版本。 - worker_connections
每个Woker工作进程所能处理的最大连接数。注意,worker_connections 不能超过 worker_rlimit_nofile数量。
2.Nginx配置示例
# 工作进程数量
worker_processes 4;
# 单进程能打开的最大文件描述符数量
worker_rlimit_nofile 65535;
events {
#使用epoll的I/O模型
use epoll;
# 工作进程的最大连接数量
worker_connections 1024;
#空闲连接有效保持时间(秒)
keepalive_timeout 60;
}
# http转发配置
http{
# 编码设置
charset utf-8;
#最大上传的文件大小
client_max_body_size 64m;
# 文件传输模式(采用zero copy零拷贝方式), 如果I/O过于频繁,比如文件/图片服务器, 可以将其关闭,减少系统负载
sendfile on;
# http长连接空闲存活时间(秒)
keepalive_timeout 120;
# 服务信息配置(默认轮询策略, 支持weight和ip_hash等方式)
upstream bserver{
server 192.168.168.100:10840;
server 192.168.168.101:10850 ;
}
# 主机服务配置
server {
# 监听端口
listen 10851;
#服务域名,可以映射多个, 空格分隔
server_name localhost;
# 路径访问配置, 针对具体路径配置(支持正则匹配,
# 例: ^~ /images/*.(gif|jpg|jpeg) 意思是匹配/images开头,指定格式的图片请求, ~ 为区分大小写, !~为不区分大小写匹配)
location /loginApi {
# 路径重写, 将/loginApi请求全部重写, 前面附加/user, 示例: /loginApi/validate -> /user/loginApi/validate
# break 代表浏览器地址不变, 为内部跳转
rewrite ^/loginApi(.*)$ /user/loginApi$1 break;
# 代理转发的服务
proxy_pass http://bserver;
#头部信息设置, 添加主机信息
proxy_set_header Host $host:$server_port;
# 头部信息设置, 添加IP信息
proxy_set_header X-Real-IP $remote_addr;
# 头部信息设置, 添加转发IP信息
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
3.Nginx流式Stream配置
Nginx不仅可以支持http的代理, 也可以支持Mysql集群的流式访问代理, 在实现配置之前,
要确保Nginx的Stream插件已安装, 安装配置参数 --with-stream=dynamic
完整配置命令:
./configure --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/nginx.conf --with-http_ssl_module --with-http_realip_module --with-stream=dynamic
如果之前没有安装, 不用重装Nginx, 重新执行configure命令, 然后执行make命令即可, 不需执行
make install, 再将编译好的Nginx执行文件覆盖:
# 先停止服务
/usr/local/nginx/sbin/nginx -s stop
# 覆盖Nginx执行文件
cp /usr/local/nginx/objs/nginx /usr/local/nginx/sbin/
# 启动Nginx服务
/usr/local/nginx/sbin/nginx -s start
主要配置如下:
...
# 流式服务转发配置
stream {
# 服务信息配置, 这里配置的是MySQL服务集群的节点信息
upstream mysql_cluster {
server 10.10.20.25:3306;
server 10.10.20.26:3306;
server 10.10.20.27:3306;
}
# 主机服务配置
server {
# 监听端口
listen 13306;
# 代理转发的服务, 直接指向上面配置的服务名称
proxy_pass mysql_cluster;
}
}
4. 多层nginx代理如何获取真实IP
实际生产环境的部署会比较复杂, 一个请求可能会经过多个Nginx代理, 需要做多层转发配置, 否则会丢失客户端的IP信息。
确保已安装reaip模块, 配置命令: --with-http_realip_module 如果没有安装, 参考上面的增加插件处理方法。
...
server {
...
real_ip_header X-Forwarded-For;
set_real_ip_from 192.168.168.0/24;
real_ip_recursive on;
...
}
- 采用realip插件, r e m o t e a d d r 输 出 为 真 实 客 户 端 I P , 使 用 remote_addr输出为真实客户端IP, 使用 remoteaddr输出为真实客户端IP,使用realip_remote_addr获取最后一个反向代理的IP。
- set_real_ip_from 192.168.168.0/24: 代表哪些是反向代理的IP,这里通过网段范围来配置, 如果还有其他内部的网段, 可以都配置上去。
- real_ip_recursive on: 代表是否递归解析, 如果关闭, Nginx会从real_ip_header中取最后一个IP作为客户端的真实IP, 开启代表递归解析real_ip_header, 直到最后一个不匹配set_real_ip_from的IP作为真是的客户端IP。
5. Nginx的SSL加密访问配置
这里实现了SSL服务配置, 以及80端口重定向至443加密访问配置:
...
upstream bserver{
server 192.168.168.100:10840;
server 192.168.168.101:10850 ;
}
# SSL服务配置
server {
#监听端口, 一般为443
listen 443;
# 服务访问域名配置
server_name testssl.com;
# 证书路径配置
include /opt/cert/testssl.com.conf;
# 请求路径配置, 这里配置的是所有请求路径
location / {
# 重定向配置, 将http配置重定向为https请求
proxy_redirect http:// https:// ;
# 转发的具体服务
proxy_pass http://bserver;
# 连接超时时间配置
proxy_connect_timeout 180s;
# 发送超时时间配置
proxy_send_timeout 180s;
# 数据接收超时时间配置
proxy_read_timeout 300s;
# 日志存储位置
access_log /var/log/nginx/testssl.access.log main;
}
# 将普通http的80端口访问自动重定向至https加密访问
server {
#监听端口
listen 80;
# 服务访问域名配置
server_name testssl.com;
# 请求路径配置, 这里配置的是所有请求路径
location / {
# 头部信息设置, 增加 X-Forwarded-For
proxy_set_header X-Forwarded-For $remote_addr;
# 头部信息设置, 增加X-Real-IP
proxy_set_header X-Real-IP $remote_addr;
# 头部信息设置, 增加X-Forwarded-Host
proxy_set_header X-Forwarded-Host $server_name;
# 头部信息设置, 增加Host
proxy_set_header Host $host;
# 将所有请求, 重写为https加密方式访问 (重点)
rewrite ^(.*)$ https://$server_name$1 permanent;
# 连接超时时间配置
proxy_connect_timeout 180s;
# 发送超时时间配置
proxy_send_timeout 180s;
# 数据接收超时时间配置
proxy_read_timeout 300s;
# 日志存储位置
access_log /var/log/nginx/testssl.access.log main;
}
6. Nginx的VUE项目部署
一般VUE前端是在本地开发调试, 如果部署在服务端, 采用绝对路径访问, 会出现跨域等问题, 可以通过Nginx反向代理来解决此问题, 前端服务配置为相对路径访问即可.
...
server {
listen 20008;
server_name test.com;
location / {
add_header Access-Control-Allow-Origin *;
root /usr/local/front_servers/admin;
index index.html index.htm;
}
location ^~ /admin/ {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
rewrite ^/admin/(.*)$ /admin/$1 break;
proxy_pass http://192.168.0.128:10680/;
}
}
...
7. Nginx的WebSocket连接配置
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream websocket {
server 192.168.0.180:20001;
}
# 要连接的目标WS服务, ws://192.168.0.180:20001/stock
location /stock {
proxy_pass http://websocket;
proxy_http_version 1.1;
# 请求头增加, Upgrade: websocket
proxy_set_header Upgrade $http_upgrade;
# 请求投增加, Connection: upgrade
proxy_set_header Connection $connection_upgrade;
}
未经本人同意, 请勿随意转载! 相逢是缘, 希望对大家有所帮助, 谢谢!
如需获取最新技术资讯或交流, 请关注: