Nginx 反向代理配置指南

06-01 1454阅读

Nginx 反向代理配置指南

目录

  • 简介
  • 基本概念
  • 安装配置
  • 基础配置示例
  • 高级配置
  • 性能优化
  • 安全配置
  • 常见问题
  • 实际用法

    简介

    Nginx 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。本文档主要介绍 Nginx 反向代理的配置和使用方法。

    基本概念

    什么是反向代理?

    反向代理是指代理服务器接收客户端的请求,然后将请求转发给内部服务器,并将内部服务器的响应返回给客户端。客户端只知道代理服务器的地址,不知道内部服务器的存在。

    反向代理的优势

    1. 负载均衡
    2. 提高安全性
    3. 性能优化
    4. SSL 终止
    5. 缓存加速

    安装配置

    安装 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
        • 优化缓冲区大小
        • 检查文件描述符限制

          最佳实践

          1. 始终使用 HTTPS
          2. 定期更新 Nginx 版本
          3. 配置适当的日志级别
          4. 实施监控和告警
          5. 定期备份配置文件

          参考资源

          • 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;
                }
            } 
            
            Nginx 反向代理配置指南
            (图片来源网络,侵删)
            Nginx 反向代理配置指南
            (图片来源网络,侵删)
            Nginx 反向代理配置指南
            (图片来源网络,侵删)
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码