
隐藏后端真实服务:所有外网请求只访问Nginx节点,后端服务器IP、端口全部隐藏,避免后端服务直接暴露公网,降低被攻击、恶意扫描的风险,提升服务安全性;
统一请求入口:多台后端业务服务器共用同一个域名与端口,客户端无需区分不同后端节点,简化前端访问逻辑;
一站式解决跨域问题:前端页面与后端接口域名、端口不一致产生的浏览器跨域限制,可通过Nginx统一转发消除,无需后端额外配置跨域代码;
动静资源分离:静态图片、css、js、html等静态资源由Nginx直接响应,动态接口请求转发至后端服务,减轻后端服务器压力,提升整体访问速度;
无缝扩容集群:后端业务压力上涨时,直接新增服务器节点,无需修改前端任何访问地址,即可完成服务扩容。
# 基础单节点反向代理配置
server {
listen 80;
server_name www.domain.com;
# 开启日志,方便后续排查转发异常
access_log /usr/local/nginx/logs/proxy_access.log;
error_log /usr/local/nginx/logs/proxy_error.log;
location / {
# 核心反向代理转发地址,填写后端真实服务地址
proxy_pass http://127.0.0.1:8080;
# 传递客户端真实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_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
}
}proxy_pass:反向代理核心指令,定义请求转发的后端目标地址,末尾带/和不带/转发路径逻辑不同,末尾带/会截断原有uri,不带/会拼接原有uri,配置时需要严格区分;
proxy_set_header:请求头透传配置,默认反向代理会修改请求头Host字段,导致后端服务识别异常,必须手动透传客户端真实头部信息,否则会出现接口404、域名识别错误;
三类超时参数:分别控制Nginx连接后端超时、读取后端响应超时、发送请求至后端超时,线上业务建议统一设置为60s,适配慢接口请求,避免正常业务被误判超时断开。
server {
listen 80;
server_name www.domain.com;
# 静态资源:直接本地返回,不转发后端
location ~* \.(jpg|png|gif|css|js|html|ico)$ {
root /usr/local/nginx/static;
expires 7d; # 设置浏览器缓存,减少重复请求
}
# 动态接口:全部转发后端服务
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}# 定义后端服务节点集群
upstream backend_server {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
server {
listen 80;
server_name www.domain.com;
location / {
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}upstream backend_server {
server 192.168.1.10:8080 weight=3;
server 192.168.1.11:8080 weight=1;
}upstream backend_server {
server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.11:8080 max_fails=3 fail_timeout=30s;
}开启长连接复用,减少三次握手开销,降低连接资源消耗;
关闭不必要的响应头隐藏服务版本号,避免Nginx版本漏洞被针对性攻击;
配置缓冲区,避免后端响应内容过小导致频繁分片传输;
统一开启gzip压缩,压缩传输内容,减少网络传输流量,提升访问速度。