Joh*_*ang 23 deployment django nginx subdirectory
我有一个在http:// localhost:12345上运行的django应用程序.我希望用户通过网址http://my.server.com/myapp访问它.我使用nginx来反向代理,如下所示:
... ...
server_name my.server.com;
location /myapp {
rewrite /myapp(.*) $1 break;
... ... # proxy param
proxy_pass http://localhost:12345;
}
... ...
Run Code Online (Sandbox Code Playgroud)
问题是,当如上配置时,如何使我的响应页面中的URL具有前缀"/ myapp",以便nginx可以正确地将它们引导到myapp.例如,像"/ foo/far"这样的页面中的url应该更改为"/ myapp/foo/bar"以允许nginx代理到myapp.什么是正确的nginx配置用来实现这一目标?
我可以使用django的设置变量来指定根URL前缀,但它不能灵活,因为变量必须根据不同的nginx配置进行修改(比如有一天nginx可能会将郊区从"/ myapp"更改为"/anotherapp").
pis*_*che 15
由于前缀是在Nginx中设置的,托管Django应用程序的Web服务器无法知道URL前缀.正如orzel所说,如果你使用甚至nginx + gunicorn/uwsgi的apache + mod_wsgi(带有一些额外的配置),你可以使用Django自动读取的WSGIScriptAlias值.
当我需要使用URL前缀时,我通常将它自己放在我的root urls.py中,其中我只有一行,前缀为前缀并包含其他urls.py
(r'^/myapp/', include('myapp.urls')),
Run Code Online (Sandbox Code Playgroud)
但我想这与在settings.py中设置前缀有相同的瓶颈,你在nginx和Django中有冗余配置.
您需要在承载Django应用程序的服务器上执行以下操作:12345.您可以在那里设置前缀,并使用WSGIScriptAlias或其等效的外部mod_wsgi将其传递给Django.我不能提供更多信息,因为我不知道你的Django应用程序是如何运行的.另外,也许你应该考虑使用uWSGI或gunicorn直接从Django运行你的Django应用程序.
要从Web服务器将前缀传递给Django,您可以使用:
proxy_set_header SCRIPT_NAME /myapp;
Run Code Online (Sandbox Code Playgroud)
更多信息在这里
yuw*_*ang 10
您需要更新您的设置:
USE_X_FORWARDED_HOST = True
FORCE_SCRIPT_NAME = /myapp
Run Code Online (Sandbox Code Playgroud)
并更新MEDIA_URL和STATIC_URL相应.
我没有在nginx下部署的经验,但在apache下,它运行正常.参考:https://docs.djangoproject.com/en/dev/ref/settings/#use-x-forwarded-host
| 归档时间: |
|
| 查看次数: |
9741 次 |
| 最近记录: |