django应用程序正在django_server.com上运行,我无法让nginx反向代理服务于该应用程序。
当直接连接到django服务器时,让我们说django_server.com
每个工作正常,用户被重定向到django_server.com/user/login
。该应用程序在gunicorn + nginx(上游和unix套接字)上运行
现在,我们组织中的所有流量都必须通过一台服务器,比方说https://www.reverse_proxy.com
,所以我添加了一个位置https://www.reverse_proxy.com/django_app
,我无法使此连接正常工作。与reverse_proxy.com的连接是https,从reverse_proxy.com到django_server.com的连接是http。 reverse_proxy服务于其他几个站点和工作,我还测试了与django_server.com的连接,带有静态html站点,也可以。所以问题似乎是django方面,但我无法弄清楚错误。两个nginx的错误日志中都没有错误消息,它只是一个404错误。
这是django_server.com上的nginx配置:
#upstream gunicorn_socket { commented out for debugging
# server unix:/home/django/w_plan/django/fakw/fakw.sock fail_timeout=0;
#}
server {
server_name django_server.com;
listen 80 default_server;
location ~ ^/django_app(.*)$ {
try_files $uri $1 /$1;
}
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_redirect off;
#proxy_pass http://gunicorn_socket/; debugging
proxy_pass http://localhost:8000; # debugging
}
}
这里是reverse_proxy:
...
location /django_app {
proxy_pass http://django_server.com:80;
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 Host $host;
proxy_read_timeout 60;
}
有什么想法吗?
编辑I: 我用django服务器取代了gunicorn进行调试,并添加了@danielgpm的建议
在django应用程序中,为了调试我修改了我的views.py文件:
def index(request):
#return HttpResponse("HelloWorld") # that works
print(request.META)
if not request.user.is_authenticated():
return HttpResponseRedirect('/user/login/') #does not work
urls.py
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^admin/', admin.site.urls),
url(r'^user/', include('userauth.urls', namespace='userauth')),
...
现在请求.META信息应该告诉我,出了什么问题?
答案 0 :(得分:1)
您的django应用程序似乎没有/django_app
路径的路由器。您必须在" django_server.com"中将/ django_app在reverse_proxy中重写为/
。服务器或在您的应用中配置路由。
尝试将以下位置添加到django_server.com
服务器:
...
location ~ ^/django_app(.*)$ {
try_files $uri $1 /$1;
}
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://gunicorn_socket/;
}