You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django应用部署Nginx反向代理后重定向路径错误修复

问题描述

我有一个Django应用,views.py中包含以下视图函数:

def load_form(request):
    if request.method == 'POST':
        newQAForm = QAForm(request.POST)
        if newQAForm.is_valid():
            instance = newQAForm.save(commit=False)
            instance.save(using='RadDataWarehouse')
            return redirect('confirmation')

以及

def confirmation(request):
    return render(request, 'confirmation.html')

本地运行时,表单提交后会正常重定向至http://127.0.0.1:8000/confirmation/;部署到Linux服务器并配置Nginx反向代理(配置如下)后,表单提交后重定向至https://abcdomain.com/confirmation/,而非预期的https://abcdomain.com/protocolqa/confirmation/,如何解决该问题?

Nginx配置片段:

location /protocolqa/ {
        proxy_pass http://localhost:8511/;
        proxy_http_version 1.1;
        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;
        proxy_set_header X-Script-Name /protocolqa;
        proxy_set_header X-Original-URI $request_uri;
    }
解决方法

1. 配置Django识别反向代理前缀

Django需要获取请求的前缀路径(/protocolqa)才能生成正确的重定向URL,在项目的settings.py中添加以下配置:

# 允许访问的域名
ALLOWED_HOSTS = ['abcdomain.com']
# 启用反向代理头部支持
USE_X_FORWARDED_HOST = True
# 识别HTTPS的转发头部
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
# 设置全局脚本路径前缀
FORCE_SCRIPT_NAME = '/protocolqa'

2. 确认URL路由配置无硬编码

检查项目根目录或应用的urls.py,确保confirmation视图的路由是相对路径,没有硬编码根路径:

from django.urls import path
from . import views

urlpatterns = [
    path('confirmation/', views.confirmation, name='confirmation'),
    # 其他路由配置...
]

3. 验证Nginx配置有效性

当前Nginx配置中已正确设置X-Script-Name /protocolqa,且proxy_pass末尾的斜杠能正确转发路径,无需修改。如果后续出现路径转发异常,可检查proxy_pass是否保留了正确的路径结构。

4. 重启服务生效

修改配置后,重启Django应用(以gunicorn为例)和Nginx服务:

sudo systemctl restart gunicorn
sudo systemctl restart nginx

内容的提问来源于stack exchange,提问作者Ag Long

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 06:42:04