检查由nginx反向代理(Django app)

时间:2015-12-12 19:49:23

标签: python django ubuntu nginx proxy

我使用nginx作为我的Django应用程序的gunicorn反向代理,并且是网络服务器配置的新手。我的应用程序有一个postgres后端,托管它的机器安装了Ubuntu 14.04 lts。

我有理由怀疑我的nginx配置没有正确地将代理集头转发到Django应用程序。有没有办法我可以看到(例如打印?)主机,http_user_agent,remote_addr等转发,在linux命令行上测试我的直觉?

其次,如何检查我的Django应用程序是否收到了正确的转发IP?例如。我能以某种方式print吗?

的/ etc / nginx的/位点可用/ myproject的:

server {
    listen 80;
    server_name example.cloudapp.net;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/mhb11/folder/myproject;
    }

    location / {
        proxy_set_header Host $host;
        proxy_set_header User-Agent $http_user_agent;
        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_pass http://unix:/home/mhb11/folder/myproject/myproject.sock;
    }
   error_page 500 502 503 504 /500.html;
   location = /500.html {
        root /home/mhb11/folder/myproject/templates/;
   }
}

2 个答案:

答案 0 :(得分:0)

您所要做的就是在Django项目级别打印request.META,以查看所有这些值的设置。如果您收到错误并且调试设置为True,则会自动发生这种情况(只需向下滚动,您将看到一个包含所有request.META值的大表)。

或者您可以从views.py中自行打印,或者如果不起作用,则可以从您拥有的任何中间件打印。您甚至可以为此编写自定义中间件。如果您需要进一步澄清,请告诉我,我也可以为您提供基本的代码片段。

答案 1 :(得分:0)

这个问题是很久以前发布的,但由于我在需要帮助时来到这里,下面是一些代码,我最终使用这些代码来帮助其他人实现相同的目标。

def getClientIP(request):
    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
    if x_forwarded_for:
        ip = x_forwarded_for.split(',')[-1].strip()
    else:
        ip = request.META.get('REMOTE_ADDR')
    return ip