使用“Nginx”更改我的 Django 项目中的请求 URL 设置

使用“Nginx”更改我的 Django 项目中的请求 URL 设置

我正在将 Django 与 Nginx 和 Gunicorn 一起使用。

当我输入https://域名[dot]com下面的浏览器中是我收到的消息。

    Page not found (404)
    Request Method: GET
    Request URL:    http://127.0.0.1:8001/

有人可以解释一下为什么请求 URL 与浏览器中输入的 URL 不同吗(https://域名[dot]com)。 我将衷心感谢您的帮助。

以下是我的域名的“Nginx”服务器配置。

server {
        listen 80;
        server_name DomainName[dot]com;

        access_log off;

       # root /opt/myenv/projects/myproject;

        location /static/ {
            alias /opt/myenv/static/;
        }

        location / {
                proxy_pass http://127.0.0.1:8001;
                proxy_set_header X-Forwarded-Host $server_name;
                proxy_set_header X-Real-IP $remote_addr;
                add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
        }
}

下面是我的 Gunicorn 配置

command = '/opt/myenv/bin/gunicorn'
pythonpath = '/opt/myenv/projects/myproject'
bind = '127.0.0.1:8001'
workers = 3
user = 'nobody'

编辑:

以下是我尝试过的一些配置:

  1. 将我的 Gunicorn 配置中的 proxy_pass (在我的服务器块内)和 bind 设置设置为'http://mydomain[点]com'当我访问该网址时,我得到了

    500内部服务器错误

    当我检查 Nginx 的错误日志时,我得到以下信息:

    [警报] 16730#0:*766 768 连接到上游时 worker_connections 不足,客户端:192.241.xxx.xxx,服务器:mydomain.com,请求:“GET / HTTP/1.0”,上游:“http://192.241.xxx.xxx:80/", 主机: "mydomain[dot]com"

    [错误] 16870#0:*7 open()“/opt/myenv/static/assets/jqm/js_css/images/ajax-loader.gif”失败(2:没有此文件或目录),客户端:183.82.xxx.xx,服务器:mydomain.com,请求:“GET /static/assets/jqm/js_css/images/ajax-loader.gif HTTP/1.1”,主机:“www.mydomain[dot]com”,引荐来源:“http://www.mydomain[dot]com/home/

  2. 将我的 Gunicorn 配置中的 proxy_pass (在我的服务器块内)和 bind 设置设置为'http://我的域名[点]com:8001'当我访问该网址时,我得到了

    Page not found (404)
    Request Method: GET
    Request URL:    http://mydomain[dot]com:8001/
    

我想要实现的是将我的请求网址设置为'http://我的域名.com' 这样,当我为 Facebook 身份验证启用 OAuth2 时,请求 URL 与 Facebook 中应用程序的域设置一致。

注意:为了表示“。”我使用了 [点],因为服务器故障不允许声誉低于 10 的用户发布超过 2 个链接。

答案1

Django 认为它正在运行,127.0.0.1:8001因为这是正在运行127.0.0.1:8001。事实上,你有一个 nginx 实例将请求转发给它,但这并不会改变这一点。

您是否考虑过让 Gunicorn 监听 UNIX 套接字,然后让 nginx 将请求转发到该套接字?这应该可以解决问题,因为 Gunicorn 根本不会监听 TCP 套接字。

这可以通过修改 Nginx 和 Gunicorn 配置来实现,如下所示

Nginx 配置:

 upstream app_server {
    server unix:/path/gunicorn.sock fail_timeout=0;
 }

server {
        listen 80;
        server_name DomainName[dot]com;

        access_log off;

        location /static/ {
            alias /opt/myenv/static/;
        }

        location / {

      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_redirect off;

                if (!-f $request_filename) {
                    proxy_pass http://app_server;
                    break;
                    }
        }
 }

将 Gunicorn 配置替换bind为如下所示的内容:

bind = 'unix:/path/gunicorn.sock'

相关内容