如何配置Nginx实现动态三级域名与端口转发?
修复后的Nginx配置方案
原配置的核心问题是API请求转发时固定了目标域名,没保留请求的三级域名,导致后端Django无法识别租户。以下是调整后的完整配置:
server { listen 80 default_server; listen [::]:80 default_server; root /var/www/example; index index.html index.htm; server_name example.com *.example.com; # 静态资源直接映射到根目录对应文件夹,合并规则更简洁 location ~ ^/(css|js|static)/ { try_files $uri $uri/ =404; } # API请求动态转发到对应三级域名的8000端口,保留完整路径 location /api/ { proxy_pass http://$host:8000; # 传递必要的请求头给后端,确保Django能识别租户和请求来源 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; } # React单页应用路由 fallback,支持前端路由跳转 location / { try_files $uri $uri/ /index.html; } }
关键修改说明:
- 静态资源规则合并:用正则表达式把css、js、static三个目录的规则合并,减少冗余配置
- 动态API转发:用
$host变量替换固定域名,这样任意三级域名(比如clientA.example.com)的/api请求都会转发到clientA.example.com:8000,后端Django就能通过Host头识别对应的租户 - 完善请求头传递:添加
proxy_set_header配置,把原请求的Host头、客户端IP等信息传递给Django,避免后端获取不到正确的请求来源 - 修复前端路由支持:根路径的
try_files调整为$uri $uri/ /index.html,确保React的前端路由(比如/dashboard这类非根路径)能正常fallback到index.html,不会返回404
内容的提问来源于stack exchange,提问作者Dallas Caley
相关产品推荐
相关产品推荐

