当前位置: 首页 > news >正文

Nginx 的多个场景配置

Nginx 的多个场景配置

本文汇总了生产环境中最常见的 Nginx 配置场景,涵盖反向代理、负载均衡、静态资源优化、安全加固、特殊业务适配等核心场景,并提供可直接复用的配置模板。

一、基础配置与核心模块

1.1 最小化生产配置

# /etc/nginx/nginx.conf
user nginx;                  # 运行用户(建议与业务用户隔离,如 www-data)
worker_processes auto;       # 工作进程数(建议与 CPU 核心数一致)
error_log /var/log/nginx/error.log warn;  # 全局错误日志级别
pid /run/nginx.pid;events {worker_connections 10240; # 单进程最大连接数(需配合系统 ulimit 调整)use epoll;               # 高效事件驱动模型(Linux 推荐)
}http {include       /etc/nginx/mime.types;default_type  application/octet-stream;# 自定义日志格式(含代理链 IP、请求耗时)log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for" ''$request_time $upstream_response_time';access_log /var/log/nginx/access.log main;sendfile        on;tcp_nopush      on;    # 配合 sendfile 优化 TCP 包发送tcp_nodelay     on;    # 禁用 Nagle 算法(低延迟场景必备)keepalive_timeout  65; # 长连接超时时间# 引入子配置(模块化管理)include /etc/nginx/conf.d/*.conf;
}

二、反向代理场景

2.1 代理单节点 Web 服务(Tomcat/Node.js 等)

# /etc/nginx/conf.d/proxy-web.conf
server {listen 80;server_name web.example.com;location / {proxy_pass http://127.0.0.1:8080;  # 后端服务地址proxy_set_header Host $host;        # 传递客户端 Hostproxy_set_header X-Real-IP $remote_addr;  # 真实客户端 IPproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 代理链 IPproxy_set_header X-Forwarded-Proto $scheme;  # 协议(http/https)# 超时配置(按需调整,避免业务超时被 Nginx 中断)proxy_connect_timeout 30s;proxy_send_timeout 60s;proxy_read_timeout 60s;# 缓冲区配置(大响应场景建议开启)proxy_buffer_size 16k;proxy_buffers 4 64k;proxy_busy_buffers_size 128k;}# 静态资源单独代理(减轻后端压力)location ~* \.(jpg|jpeg|png|css|js)$ {proxy_pass http://127.0.0.1:8080;expires 7d;  # 静态资源缓存 7 天add_header Cache-Control "public, max-age=604800";}
}

2.2 代理 WebSocket 服务(RabbitMQ/即时通讯)

# /etc/nginx/conf.d/proxy-websocket.conf
server {listen 80;server_name ws.example.com;location /ws {proxy_pass http://127.0.0.1:15674/ws;  # WebSocket 后端地址(如 RabbitMQ)# WebSocket 协议升级核心配置proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";# 长连接超时(需大于后端心跳间隔)proxy_connect_timeout 1d;proxy_send_timeout 1d;proxy_read_timeout 1d;}
}

2.3 代理 HTTPS 后端服务(SSL 透传)

# /etc/nginx/conf.d/proxy-https.conf
server {listen 443 ssl;server_name api.example.com;# 客户端 <-> Nginx 之间的 SSL 配置ssl_certificate /etc/nginx/ssl/api.crt;ssl_certificate_key /etc/nginx/ssl/api.key;ssl_trusted_certificate /etc/nginx/ssl/ca.crt;  # 信任链证书ssl_protocols TLSv1.2 TLSv1.3;  # 仅启用安全协议ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;ssl_prefer_server_ciphers on;# 代理到后端 HTTPS 服务location / {proxy_pass https://192.168.1.100:8443;proxy_ssl_verify off;  # 生产环境建议开启并配置 CAproxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}

三、负载均衡场景

3.1 基础轮询 + 健康检查

# /etc/nginx/conf.d/loadbalance.conf
http {upstream backend_servers {server 192.168.1.101:8080;server 192.168.1.102:8080;server 192.168.1.103:8080 down;  # 手动下线# 健康检查(需 ngx_http_upstream_check_module 模块)check interval=3000 rise=2 fall=3 timeout=1000 type=http;check_http_send "HEAD /health HTTP/1.0\r\n\r\n";check_http_expect_alive http_2xx http_3xx;}server {listen 80;server_name lb.example.com;location / {proxy_pass http://backend_servers;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;# 失败时切换节点proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;}}
}

3.2 加权负载均衡(按服务器性能分配)

upstream backend_servers {server 192.168.1.101:8080 weight=3;  # 处理 3/6 请求server 192.168.1.102:8080 weight=2;  # 处理 2/6 请求server 192.168.1.103:8080 weight=1;  # 处理 1/6 请求
}

3.3 IP 哈希(会话保持)

upstream backend_servers {ip_hash;  # 同一 IP 固定到同一节点server 192.168.1.101:8080;server 192.168.1.102:8080;server 192.168.1.103:8080 backup;  # 备份节点
}

四、静态资源优化场景

4.1 静态资源服务器(缓存 + 压缩 + 防盗链)

# /etc/nginx/conf.d/static.conf
server {listen 80;server_name static.example.com;root /data/static;  # 静态资源根目录autoindex off;  # 关闭目录浏览# 按文件类型配置缓存策略location ~* \.(jpg|jpeg|png|gif|ico|svg)$ {expires 30d;add_header Cache-Control "public, max-age=2592000";}location ~* \.(css|js)$ {expires 7d;add_header Cache-Control "public, max-age=604800";}location ~* \.(html|htm)$ {expires 1h;add_header Cache-Control "public, max-age=3600";}# Gzip 压缩(减少传输大小)gzip on;gzip_types text/css text/javascript text/plain application/json image/svg+xml;gzip_min_length 1k;gzip_comp_level 5;# 防盗链(仅允许指定域名引用)location ~* \.(jpg|jpeg|png|gif)$ {valid_referers none blocked example.com *.example.com;if ($invalid_referer) {return 403;}}
}

4.2 大文件下载优化(断点续传 + 限速)

# /etc/nginx/conf.d/download.conf
server {listen 80;server_name download.example.com;root /data/downloads;location / {# 断点续传支持add_header Accept-Ranges bytes;# 大文件传输优化sendfile on;tcp_nopush on;aio on;directio 4m;          # 大于 4M 的文件直接 I/Ooutput_buffers 1 128k;# 限速(避免带宽耗尽)limit_rate 10m;       # 单连接限速 10MB/slimit_rate_after 50m; # 前 50MB 不限速}
}

五、安全加固场景

5.1 强化 HTTPS 配置(TLS 1.2+ + HSTS)

# /etc/nginx/conf.d/https.conf
server {listen 443 ssl;server_name secure.example.com;ssl_certificate /etc/nginx/ssl/secure.crt;ssl_certificate_key /etc/nginx/ssl/secure.key;ssl_trusted_certificate /etc/nginx/ssl/ca.crt;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;ssl_prefer_server_ciphers on;ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;# 强制客户端使用 HTTPS(HSTS)add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;# 防 XSS、点击劫持、MIME 嗅探add_header X-XSS-Protection "1; mode=block";add_header X-Frame-Options "SAMEORIGIN";add_header X-Content-Type-Options "nosniff";location / {proxy_pass http://127.0.0.1:8080;proxy_set_header Host $host;}
}# HTTP 强制跳转 HTTPS
server {listen 80;server_name secure.example.com;return 301 https://$host$request_uri;
}

5.2 访问控制(IP 白名单 + 密码认证)

# /etc/nginx/conf.d/access-control.conf
server {listen 80;server_name admin.example.com;location /admin {# IP 白名单allow 192.168.1.0/24;allow 123.123.123.123;deny all;# 密码认证(需先执行 htpasswd -c .htpasswd admin)auth_basic "Admin Area";auth_basic_user_file /etc/nginx/conf.d/.htpasswd;proxy_pass http://127.0.0.1:8080/admin;}
}

5.3 防 DDoS 配置(限流 + 连接数限制)

# /etc/nginx/conf.d/anti-ddos.conf
http {# 基于 IP 的请求限流limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;# 基于 IP 的连接数限制limit_conn_zone $binary_remote_addr zone=conn_limit:10m;server {listen 80;server_name api.example.com;location / {limit_req zone=req_limit burst=20 nodelay;  # 突发 20 个请求不延迟limit_conn conn_limit 10;                 # 单 IP 最大 10 个连接limit_conn_status 503;proxy_pass http://backend_servers;}# 敏感接口更严格限流location /api/payment {limit_req zone=req_limit rate=5r/s burst=10;proxy_pass http://backend_servers;}}
}

六、特殊场景配置

6.1 反向代理 FastDFS 分布式存储

# /etc/nginx/conf.d/fastdfs.conf
server {listen 80;server_name fdfs.example.com;# 多组动态匹配(group1、group2...)location ~ ^/group([0-9])/M00/ {alias /data/fastdfs/storage/data/group$1/M00/;autoindex off;expires 30d;# 防盗链valid_referers none blocked *.example.com;if ($invalid_referer) {return 403;}}
}

6.2 适配 SPA 应用(前端路由重写)

# /etc/nginx/conf.d/spa.conf
server {listen 80;server_name spa.example.com;root /data/spa/dist;index index.html;# 前端路由重写(所有路径指向 index.html)location / {try_files $uri $uri/ /index.html;}# API 请求代理到后端location /api {proxy_pass http://127.0.0.1:8080/api;proxy_set_header Host $host;}
}

6.3 灰度发布(按 Cookie/Header 分流)

# /etc/nginx/conf.d/gray-release.conf
http {upstream gray_servers {server 192.168.1.201:8080;  # 灰度环境}upstream prod_servers {server 192.168.1.101:8080;  # 生产环境}server {listen 80;server_name app.example.com;location / {# 按 Cookie 分流(灰度用户携带 gray=1)if ($cookie_gray = "1") {proxy_pass http://gray_servers;break;}# 按 Header 分流(内部测试)if ($http_x_gray = "true") {proxy_pass http://gray_servers;break;}# 默认走生产proxy_pass http://prod_servers;proxy_set_header Host $host;}}
}

七、配置管理与最佳实践

7.1 模块化配置拆分

/etc/nginx/
├── nginx.conf          # 主配置
├── conf.d/
│   ├── proxy-web.conf  # Web 代理配置
│   ├── static.conf     # 静态资源配置
│   ├── ssl.conf        # SSL 通用配置(通过 include 引入)
│   └── ...
├── ssl/                # 证书目录
│   ├── example.crt
│   └── example.key
└── snippets/           # 配置片段(限流、缓存等)├── limit.conf└── cache.conf

7.2 常用运维命令

命令作用
nginx -t配置语法检查
nginx -s reload平滑重启(不中断连接)
nginx -V查看编译参数(确认已安装模块)
curl http://localhost/nginx-status监控连接状态(需启用 stub_status)

7.3 性能优化建议

  1. worker_processes:设置为 CPU 核心数(grep ^processor /proc/cpuinfo | wc -l)。
  2. worker_connections:结合系统 ulimit -n 调整(建议 10240+)。
  3. 缓存策略:静态资源启用浏览器缓存 + Nginx 本地缓存(proxy_cache)。
  4. 日志级别:生产环境调整为 warn,避免日志 IO 阻塞。
  5. 模块精简:编译时仅保留必需模块(如 --without-http_autoindex_module)。

可扩展场景:Nginx + Lua 动态逻辑、WAF 集成、HTTP/2 配置、Kubernetes ingress 适配等。

http://www.dtcms.com/a/579428.html

相关文章:

  • 做网站要具备些什么条件steam怎么注册域名
  • Orangepi Zero2—全志H616开发
  • 荣成住房和城乡建设部网站在线教育网站设计
  • 成都网站网络建设广州网站推广找哪家
  • 那个网站有免费模板wordpress 聊天插件
  • 自建网站 支付宝做网站需求 后期方便优化
  • 做婚纱摄影网站做seo要投入什么
  • C++:类和对象---初级篇
  • 建立公司网站视频域名网查询
  • Linux(3)—— 权限操作
  • 网站系统建站1688创业商机网
  • 实时网站制作wordpress文件管理
  • STM32 采集差分编码器数据的方法
  • 预约网站制作网站空间数据丢失
  • 做网站即墨中国城乡住房和城乡建设部网站
  • 制作网站首页教案免费看网站源码
  • C语言字符串操作实战:手动实现strcpy与strcat函数
  • 开封网站建设-中企动力网页模板怎么设计
  • 推荐系统_runRetainRecommend_如何防止重复插入retain推荐数据表
  • 托管网站服务器怎么弄自己的微信公众号
  • 国外代码开源网站站长之家网页模板下载
  • 建设电影网站点击播放是乱页的新城疫怎么治疗
  • 邯郸有设计网站的吗什么网站ghost做的好
  • 东莞专业做网站建设服务软件科技开发公司
  • 产品销售网站模板网站排名软件包年
  • 网站栏目怎么濮阳自适应网站建设
  • 娱乐网站建设公司排名网站做搜索关键字好吗
  • 地图可视化实践录:leaflet学习之右键菜单
  • 网站关键词优化教程上海高端网站建设服
  • 视频弹幕网站怎么做建设牌官方网站