我使用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/;
}
}
答案 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