插件窝 干货文章 Nginx+IIS简单部署实例分析

Nginx+IIS简单部署实例分析

Nginx 配置 IIS 静态 308    来源:    2025-04-21

Nginx + IIS 部署实例分析

部署架构概述

这种架构通常采用 Nginx 作为前端反向代理服务器,IIS 作为后端应用服务器,结合了两者的优势:

  • Nginx:处理静态内容、负载均衡、SSL 终端、高并发连接
  • IIS:运行动态内容(特别是 ASP.NET 应用)、Windows 集成认证、.NET 生态支持

典型部署场景

场景1:反向代理配置

用户请求 → Nginx (80/443) → 反向代理 → IIS (8080或其他端口)

场景2:动静分离

静态请求(js/css/img) → Nginx 直接处理
动态请求(.aspx/.php) → 代理到 IIS

详细配置步骤

1. 安装组件

  • 在 Windows 服务器安装 IIS
  • 在 Linux/Windows 服务器安装 Nginx

2. Nginx 基础配置示例

http {
    upstream iis_backend {
        server 192.168.1.100:8080;  # IIS服务器地址和端口
        # 可以添加多个服务器实现负载均衡
    }

    server {
        listen 80;
        server_name example.com;

        # 静态文件由Nginx直接处理
        location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf|txt|htm|html)$ {
            root /path/to/static/files;
            expires 30d;
        }

        # 动态请求转发到IIS
        location / {
            proxy_pass http://iis_backend;
            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;
        }
    }
}

3. IIS 配置要点

  1. 修改默认网站绑定端口为 Nginx 配置中指定的端口(如8080)
  2. 确保应用程序池使用正确的.NET版本
  3. 配置ARR(Application Request Routing)模块(可选)

4. SSL 配置(推荐在Nginx终止SSL)

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    # SSL优化配置...

    location / {
        proxy_pass http://iis_backend;
        # 其他proxy设置...
    }
}

性能优化建议

  1. Nginx 缓存:对静态内容设置适当的缓存头
  2. Keepalive:配置 Nginx 和 IIS 之间的 keepalive 连接
  3. Gzip 压缩:在 Nginx 层启用 gzip 压缩
  4. 缓冲区优化:调整 proxy_buffer 相关参数
  5. 日志分离:Nginx 和 IIS 分别记录不同日志

常见问题解决

问题1:502 Bad Gateway

可能原因: - IIS 服务未运行 - 防火墙阻止了 Nginx 到 IIS 的端口 - 应用程序池崩溃

解决方案: 1. 检查 IIS 服务状态 2. 测试从 Nginx 服务器能否访问 IIS 端口 3. 查看 Windows 事件查看器中的应用程序日志

问题2:静态文件返回404

可能原因: - Nginx 配置的 root 路径不正确 - 文件权限问题

解决方案: 1. 确认静态文件路径正确 2. 检查 Nginx 进程用户对静态文件的读取权限

问题3:ASP.NET Session 丢失

可能原因: - 负载均衡下未配置共享 session - 客户端 IP 变化影响 session

解决方案: 1. 配置 ASP.NET 使用 SQL Server 或 State Server 存储 session 2. 确保 Nginx 正确传递 X-Forwarded-For 头

监控与维护

  1. Nginx 监控

    • 监控连接数、请求率、错误率
    • 使用 nginx -t 测试配置更改
  2. IIS 监控

    • 监控应用程序池回收事件
    • 检查请求队列长度
  3. 日志分析

    • 定期分析 Nginx 访问日志和错误日志
    • 检查 IIS 失败请求跟踪日志

这种架构结合了 Nginx 的高性能和 IIS 的 Windows 生态兼容性,适合需要运行 ASP.NET 应用同时又需要处理高并发的场景。