这种架构通常采用 Nginx 作为前端反向代理服务器,IIS 作为后端应用服务器,结合了两者的优势:
用户请求 → Nginx (80/443) → 反向代理 → IIS (8080或其他端口)
静态请求(js/css/img) → Nginx 直接处理
动态请求(.aspx/.php) → 代理到 IIS
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;
}
}
}
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设置...
}
}
可能原因: - IIS 服务未运行 - 防火墙阻止了 Nginx 到 IIS 的端口 - 应用程序池崩溃
解决方案: 1. 检查 IIS 服务状态 2. 测试从 Nginx 服务器能否访问 IIS 端口 3. 查看 Windows 事件查看器中的应用程序日志
可能原因: - Nginx 配置的 root 路径不正确 - 文件权限问题
解决方案: 1. 确认静态文件路径正确 2. 检查 Nginx 进程用户对静态文件的读取权限
可能原因: - 负载均衡下未配置共享 session - 客户端 IP 变化影响 session
解决方案: 1. 配置 ASP.NET 使用 SQL Server 或 State Server 存储 session 2. 确保 Nginx 正确传递 X-Forwarded-For 头
Nginx 监控:
nginx -t
测试配置更改IIS 监控:
日志分析:
这种架构结合了 Nginx 的高性能和 IIS 的 Windows 生态兼容性,适合需要运行 ASP.NET 应用同时又需要处理高并发的场景。