Nginx / gunicorn Django Rest Framework应用程序的端口代理

我使用gunicorn和nginx将传入的请求路由到我的Django Rest Framework API。

gunicorn在端口8001上运行,nginx在端口8000上运行。nginx被configuration为根据以下configuration文件将请求转发到gunicorn:

server { listen 8000; server_name ec2-ww.xx.yy.zz.compute-1.amazonaws.com; # public address of my server, redacted for stack overflow access_log /vol/logs/ftv.access.log; location ^~ /static/ { alias /vol/server/ftv/static/; autoindex on; } location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|mov) { #access_log off; expires 30d; } location / { proxy_pass_header Server; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_connect_timeout 10; proxy_read_timeout 10; proxy_set_header Host $host:8000; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://ec2-ww.xx.yy.zz.compute-1.amazonaws.com:8001/; } } 

我遇到的问题是,DRF的HyperlinkedModelSerializer返回的URL指向8001端口,而不是8000端口。 这是(我猜),因为Django Rest Framework,不知道gunicorn或nginx,只是看到端口8001上的请求,所以它形成了基于该端口的URL超链接。

我必须在我的nginx conf文件或者settings.py(或者两者)中丢失一些configuration选项,但是,对于我来说,这个问题在我search之前还没有被问到/回答。 任何DRF或Nginx专家的帮助将非常感激!

更改

 proxy_set_header Host $host:8000; 

 proxy_set_header Host $http_host; 

在nginx配置文件中似乎已经修复了这个问题 –