我已经使用Gunicorn和NGINX部署了Django,如果Django应用程序在根URL上提供,它的工作正常,具有以下配置:
server {
listen 80;
location = /favicon.ico { access_log off; log_not_found off; }
location / {
include proxy_params;
proxy_pass http://unix:my_app.sock;
}
}
然而,当我尝试在另一个URL上提供Django应用程序时,它不起作用。 如果我尝试访问http://domain/my_app/admin/,那么Django告诉我它无法找到该视图。
这是NGINX配置:
server {
listen 80;
location = /favicon.ico { access_log off; log_not_found off; }
location /my_app {
include proxy_params;
proxy_pass http://unix:/var/my_app/app.sock;
}
}
我怎么能让这个工作?到目前为止,我无法找到任何解决方案来指定类似“BASE_URL”的内容。
答案 0 :(得分:3)
我的评论并未显示整体情况。当我在子文件夹上运行Django网站时,我喜欢使用动态配置,这样你仍然可以直接访问机器(没有代理)并拥有一个可用的网络应用程序。这可以帮助很多人调试这样难以在dev中重现的棘手的东西。
如果您无法传递标题或修改wsgi.py,您仍然可以在Django设置中设置FORCE_SCRIPT_NAME
。
3个步骤:
X-Script-Name
标题,以便您的Django网站在其前面/myapp/
生成其网址 - 确保您使用{% url %}
代码和{{1} },与硬编码!reverse
(基于this flask snippet)下面是代理的Nginx配置示例,该代理指向子目录上的Django站点并设置X-Script-Name(步骤1和2),请注意,这不使用unix套接字,所以它与OP的问题略有不同。欢迎编辑:
nginx.conf
SCRIPT_NAME
阅读X-Script-Name:
的myapp / wsgi.py
location /my_app {
rewrite ^/my_app/(.*)$ /$1 break;
proxy_pass https://mywebapp.com/$uri$is_args$args;
proxy_set_header Host $host;
proxy_set_header X-Script-Name /my_app;
proxy_cookie_path / /my_app;
}