Nginx 反向代理配置指南
Nginx 反向代理配置指南
目录
- 简介
- 基本概念
- 安装配置
- 基础配置示例
- 高级配置
- 性能优化
- 安全配置
- 常见问题
- 实际用法
简介
Nginx 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。本文档主要介绍 Nginx 反向代理的配置和使用方法。
基本概念
什么是反向代理?
反向代理是指代理服务器接收客户端的请求,然后将请求转发给内部服务器,并将内部服务器的响应返回给客户端。客户端只知道代理服务器的地址,不知道内部服务器的存在。
反向代理的优势
- 负载均衡
- 提高安全性
- 性能优化
- SSL 终止
- 缓存加速
安装配置
安装 Nginx
# Ubuntu/Debian sudo apt-get update sudo apt-get install nginx # CentOS sudo yum install nginx
基本配置文件结构
http { # 全局配置 include mime.types; default_type application/octet-stream; # 日志格式 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; # 上游服务器组 upstream backend { server 127.0.0.1:8080; server 127.0.0.1:8081; } # 服务器配置 server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } }基础配置示例
1. 简单的反向代理
server { listen 80; server_name example.com; location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }2. 负载均衡配置
upstream backend { server 127.0.0.1:8080 weight=3; server 127.0.0.1:8081 weight=2; server 127.0.0.1:8082 weight=1; } server { listen 80; server_name example.com; location / { proxy_pass http://backend; } }高级配置
SSL 配置
server { listen 443 ssl; server_name example.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; location / { proxy_pass http://backend; } }缓存配置
http { proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off; server { location / { proxy_cache my_cache; proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504; proxy_cache_valid 200 60m; proxy_pass http://backend; } } }性能优化
1. 启用 Gzip 压缩
http { gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; }2. 调整工作进程
worker_processes auto; worker_rlimit_nofile 65535;
3. 优化缓冲区
http { client_body_buffer_size 10K; client_header_buffer_size 1k; client_max_body_size 8m; large_client_header_buffers 2 1k; }安全配置
1. 限制请求大小
http { client_max_body_size 10m; }2. 访问控制
location /admin { allow 192.168.1.0/24; deny all; }3. 超时设置
http { proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; }常见问题
1. 502 Bad Gateway
- 检查后端服务是否正常运行
- 检查代理配置是否正确
- 查看错误日志
2. 性能问题
- 检查工作进程数是否合适
- 确认是否启用了缓存
- 检查缓冲区设置
3. 内存问题
- 调整 worker_connections
- 优化缓冲区大小
- 检查文件描述符限制
最佳实践
- 始终使用 HTTPS
- 定期更新 Nginx 版本
- 配置适当的日志级别
- 实施监控和告警
- 定期备份配置文件
参考资源
- Nginx 官方文档
- Nginx 配置指南
- Nginx 性能调优
实际用法
1. 前后端分离项目配置
# 前端静态文件 server { listen 80; server_name example.com; # 前端文件目录 root /var/www/html; index index.html; # 处理前端路由 location / { try_files $uri $uri/ /index.html; } # API 反向代理 location /api { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }2. 微服务架构配置
# 定义多个上游服务 upstream auth_service { server 127.0.0.1:8001; server 127.0.0.1:8002; } upstream user_service { server 127.0.0.1:8003; server 127.0.0.1:8004; } upstream order_service { server 127.0.0.1:8005; server 127.0.0.1:8006; } server { listen 80; server_name api.example.com; # 认证服务 location /auth/ { proxy_pass http://auth_service/; } # 用户服务 location /users/ { proxy_pass http://user_service/; } # 订单服务 location /orders/ { proxy_pass http://order_service/; } }3. 静态资源加速
server { listen 80; server_name static.example.com; # 静态文件缓存配置 location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { root /var/www/static; expires 30d; add_header Cache-Control "public, no-transform"; # 开启 gzip 压缩 gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; } }4. WebSocket 代理
server { listen 80; server_name ws.example.com; location /ws { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }5. 多域名配置
# 主域名 server { listen 80; server_name example.com; location / { proxy_pass http://backend; } } # 博客子域名 server { listen 80; server_name blog.example.com; location / { proxy_pass http://blog_backend; } } # 管理后台子域名 server { listen 80; server_name admin.example.com; location / { proxy_pass http://admin_backend; } }6. 文件上传配置
server { listen 80; server_name upload.example.com; # 上传文件大小限制 client_max_body_size 100M; location /upload { proxy_pass http://upload_backend; # 上传超时设置 proxy_connect_timeout 300s; proxy_send_timeout 300s; proxy_read_timeout 300s; # 临时文件目录 proxy_temp_path /tmp/nginx_proxy; proxy_temp_file_write_size 100k; } }7. 负载均衡策略配置
# 轮询(默认) upstream backend1 { server 127.0.0.1:8080; server 127.0.0.1:8081; } # 权重轮询 upstream backend2 { server 127.0.0.1:8080 weight=3; server 127.0.0.1:8081 weight=2; server 127.0.0.1:8082 weight=1; } # IP Hash upstream backend3 { ip_hash; server 127.0.0.1:8080; server 127.0.0.1:8081; } # 最少连接 upstream backend4 { least_conn; server 127.0.0.1:8080; server 127.0.0.1:8081; }8. 健康检查配置
upstream backend { server 127.0.0.1:8080 max_fails=3 fail_timeout=30s; server 127.0.0.1:8081 max_fails=3 fail_timeout=30s; server 127.0.0.1:8082 backup; # 备用服务器 } server { location / { proxy_pass http://backend; proxy_next_upstream error timeout http_500 http_502 http_503 http_504; proxy_next_upstream_tries 3; } }(图片来源网络,侵删)(图片来源网络,侵删)(图片来源网络,侵删)
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。




