我有一个运行在http://localhost:12345上的django应用程序。我想让用户通过url http://my.server.com/myapp访问它。我使用nginx来反向代理它,如下所示:
... ...
server_name my.server.com;
location /myapp {
rewrite /myapp(.*) $1 break;
... ... # proxy param
proxy_pass http://localhost:12345;
}
... ...问题是,当像上面这样配置时,如何使我响应页面中的urls具有前缀"/myapp“,以便nginx可以正确地将它们定向到myapp。例如,像“/foo/bar”这样的页面中的urls应该改为"/ myapp /foo/bar“,以允许nginx代理到myapp。要实现这一点,正确的nginx配置是什么?
我可以使用django的设置变量来指定根url前缀,但我认为这并不灵活,因为这个变量必须根据不同的nginx配置进行修改(比方说有一天nginx可能会将郊区从"/myapp“更改为"/anotherapp")。
发布于 2012-10-21 02:05:43
因为前缀是在Nginx中设置的,所以托管Django应用程序的web服务器无法知道URL前缀。正如orzel所说,如果您使用的是偶数nginx+gunicorn/uwsgi的apache+mod_wsgi (带有一些额外的配置),那么您可以使用Django自动读取的WSGIScriptAlias值。
当我需要使用urls.py前缀时,我通常会自己把它放在根URL中,在根URL中我只有一行,以前缀为前缀,并包括另一个URL
(r'^/myapp/', include('myapp.urls')),但我猜这与在settings.py中设置前缀有相同的瓶颈,在nginx和Django中有冗余的配置。
您需要在托管Django应用程序的服务器中执行一些操作,时间为:12345。您可以在那里设置前缀,然后在mod_wsgi外部使用WSGIScriptAlias或其等效对象将其传递给Django。我不能提供更多信息,因为我不知道您的Django应用程序是如何运行的。此外,也许你应该考虑直接从Django运行你的Django应用程序,使用uWSGI或gunicorn。
要将前缀从the服务器传递给Django,您可以使用以下命令:
proxy_set_header SCRIPT_NAME /myapp;更多信息here
https://stackoverflow.com/questions/8133063
复制相似问题