【发布时间】:2017-07-17 04:01:25
【问题描述】:
一个 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 正在为其他几个站点提供服务并且可以正常工作,我还使用静态 html 站点测试了与 django_server.com 的连接,这也可以。所以问题似乎出在 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;
}
有什么想法吗?
编辑我: 我已经用 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')),
...
现在 request.META 信息应该告诉我,出了什么问题?
【问题讨论】:
标签: django nginx reverse-proxy