Django + Gunicorn + SCRIPT_NAME

时间:2019-01-24 02:09:15

标签: django gunicorn

我有许多django应用程序都运行在同一域之外,但是在使SCRIPT_NAME与Gunicorn正常工作时遇到问题。

示例应用路径:

  • www.domain.com/app1
  • www.domain.com/demo

场景1::我目前在Elastic Beanstalk上运行每个应用程序,并修改apache配置以处理SCRIPT_NAME方面的问题。这行得通。

场景2::我一直在使用AWS ECS / FARGATE进行测试,在该配置中,我只有一个运行Django / Gunicorn的容器。没有Apache / Nginx等。我打算只使用Django / Gunicorn / Whitenoise / Cloudfront。 这不起作用。正在使django与子路径一起工作的SCRIPT_NAME值正在复制。

为简化/故障排除,我在本地运行以下代码/命令,因此不涉及AWS。我还创建了一个简单的django应用程序进行测试。

我的应用页面结构如下:

  • 首页
    • Page1链接<a href="{% url 'demo:page1' %}">Page1</a>
      • 首页链接<a href="{% url 'demo:home' %}">Home</a>
    • 第2页链接<a href="{% url 'demo:page2' %}">Page2</a>
      • 首页链接<a href="{% url 'demo:home' %}">Home</a>

步骤:

  1. 我启动Web服务器: gunicorn config.wsgi --env SCRIPT_NAME=demo -b 0.0.0.0:80 --keep-alive 20 --log-file=- --log-level debug --capture-output(在docker容器中运行)

  2. 我可以去http://127.0.0.0:8000/demo。它将按预期加载应用程序主页。

  3. Page1 链接显示为http://127.0.0.0:8000/demo/page1,单击并按预期将我带到 Page1

  4. 主页链接显示为http://127.0.0.0:8000/demo/demo/。它已复制了SCRIPT_NAME,并且该链接无效。

有什么主意我做错了吗?这是要工作吗?

1 个答案:

答案 0 :(得分:0)

您需要在服务器启动命令行中将“ SCRIPT_NAME = demo”替换为“ SCRIPT_NAME = / demo”(请注意其他斜杠)。