[英]Port proxy for nginx/gunicorn Django Rest Framework app
我正在使用 gunicorn 和 nginx 将传入请求路由到我的 Django Rest Framework API。
gunicorn 运行在 8001 端口,nginx 运行在 8000 端口。 nginx 配置为将请求转发到 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 返回指向 8001 端口而不是 8000 端口的 url。 这是(我猜)因为 Django Rest Framework,不知道 gunicorn 或 nginx,只是看到请求在端口 8001 上传入,因此它根据该端口形成其 URL 超链接。
我必须在我的 nginx conf 文件或 settings.py(或两者)中缺少一些配置选项,但是,令人惊讶的是(对我而言),这个问题以前没有被问过/回答过——我一直在搜索。 非常感谢 DRF 或 Nginx 专家的任何帮助!
改变
proxy_set_header Host $host:8000;
到
proxy_set_header Host $http_host;
在 nginx 配置文件中似乎已经解决了这个问题——
改变
proxy_set_header Host $host:8000;
到
proxy_set_header Host $http_host;
为我工作。
此外,我必须将主机名添加到settings.py
文件中的ALLOWED_HOST
字段。
我正在使用 wsgi、nginx 和 Django。 实际上,我想在同一 IP 地址的多个端口上重定向请求。 这该怎么做。
我有一个网址,例如“mysite.com”。 当它被调用时,我希望服务器处理不同端口上的请求。 每件事都一样,就像只有一个实例,相同的 url,但服务器应该将请求重定向到不同的端口。 mysite.com:8080、mysite.com:8001、mysite.com:8002 等用于负载平衡。 如何在nginx中做到这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.