在实际运维中,可能有使用到大量的服务或者访问大量的域名,这些服务可能部署在不同的区域不同的设备上,实际网络质量或者访问的体验感受也可能不一样。
以思科WLC为例,在为中国屈臣氏做代维的时候,由于屈臣氏有多个IDC,门店使用的AP也都说注册到IDC的WLC上,北京的WLC跟佛山的WLC访问体验完全不一样,即便2个WLC的版本或者CPU、内存等都一样,访问也都是通过专线直连,但访问BJ的WLC实际体验就是慢,但通过BJ IDC的网络访问任意WLC速度又很快,在此基础上,就做了一个Nginx反向代理,通过某台机器来实现快捷访问的方式。
worker_processes auto; # 自动根据CPU核心数调整
events {
worker_connections 4096; # 提高并发连接数
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 第一个server块:HTTP反向代理(监听7777端口)
server {
listen 7777;
server_name 10.X.X.X; ##实际访问的地址
location / {
proxy_pass http://1.1.1.2; # 反向代理到后端服务的服务器
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 跨域配置(建议指定具体域名而非*)
add_header 'Access-Control-Allow-Origin' 'https://example.com';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
}
# 第二个server块:HTTP→HTTPS重定向(监听80端口)
server {
listen 80;
server_name 10.X.X.X;
return 301 https://$server_name$request_uri;
}
# 第三个server块:HTTPS反向代理(监听7777端口)
server {
listen 7777 ssl fastopen=3 reuseport;
server_name 10.X.X.X; #
add_header X-Content-Type-Options nosniff;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
# 填写实际证书路径
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
ssl_protocols TLSv1.2 TLSv1.3; # 仅保留安全协议
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 60m;
location / {
proxy_pass https://1.1.1.2; # 需要反向代理到HTTPS后端的IP
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_ssl_verify off;
}
}
}
- 端口使用说明:
- 第一个 server 块监听 7777 端口(HTTP)
- 第二个 server 块监听 80 端口(HTTP→HTTPS 重定向)
- 第三个 server 块监听 7777 端口(HTTPS)
这种配置允许通过以下两种方式访问: http://10.X.X.X:7777
→ 转发到http://1.1.1.2
https://10.X.X.X:7777
→ 转发到https://1.1.1.
2
验证配置的步骤:
- 修改配置文件后,先检查语法:
nginx -t
- 如果语法正确,重载 Nginx:
nginx -s reload
- 使用 curl 测试 HTTP 和 HTTPS 代理:
测试HTTP代理 curl -I http://10.X.X.X:7777
测试HTTPS代理(可能需要忽略证书验证) curl -Ik https://10.X.X.X:7777