繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM