【问题标题】:Issues with nginx reverse proxy to an app server running nginx+djangonginx 反向代理到运行 nginx+django 的应用服务器的问题
【发布时间】:2014-07-22 18:42:45
【问题描述】:

我有一个在服务器 A 上运行的应用程序。我有一个服务器 B,我想用作反向代理来访问服务器 A 上的应用程序。服务器 A 正在运行 nginx 1.4.5 和 Django(Python 2.7.6 与fastcgi),服务器 B 也在运行 nginx 1.4.5。我也想以这种方式添加 SSL。

代理有点工作。问题是请求看不到正确传递。转到https://servera.org/ 时,我只收到 404 错误,而不是我期待的登录页面。

这是我在浏览器中看到的错误消息(这是一条错误消息,所以我知道请求正在到达服务器 A):

Page not found (404)
Request Method: GET
Request URL:    http://nova.iguw.tuwien.ac.at/index.html
Using the URLconf defined in TUBadges.urls, Django tried these URL patterns, in this order:
1. ^admin/doc/
2. ^admin/
3. ^$
4. ^badges/?$
5. ^badges/(?P<uid>\d+)/?$
6. ^presets/$
7. ^svg$
8. ^bgsvg$
9.

这是我的反向代理配置:

upstream server_a {
    server servera.org:8080 fail_timeout=0;
}

server {
    listen              443 ssl;
    listen          80;
    server_name         subdomain1.serverb.org;
    server_name     subdomain2.serverb.org;
    keepalive_timeout   70;

    ssl_certificate     /etc/certificates/server_b.pem;
    ssl_certificate_key /etc/certificates/server_b.key; 

    error_log           /var/log/nginx/aurora.ssl.error.log error;
    access_log          off;

    client_max_body_size 50M;

    location ~ ^/(.+)$ {
        proxy_intercept_errors  off;
        proxy_buffering     off;

        proxy_connect_timeout 5;
        proxy_send_timeout    5;
        proxy_read_timeout    5;

        proxy_set_header    Host                $host;
        proxy_set_header    X-Forwarded-By      $server_addr:$server_port;
        proxy_set_header    X-Forwarded-Fo      $remote_addr;
        proxy_set_header    X-Forwarded-Proto   $scheme;
        proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;

        access_log          off;
        error_log           /var/log/nginx/tubadges.error.log debug;

        proxy_pass          http://server_a;
        proxy_redirect      off;
    }
}

这就是我在服务器 A 上用来运行应用程序的配置:

server {
    listen                  8080; ## listen for ipv4
    server_name             localhost;
    server_name             servera.org;
    client_max_body_size    5M;
    error_log               /var/log/nginx/app1.error.log;
    access_log              /var/log/nginx/app1.access.log;

    location /static {
        root /srv/django/projects/app1;
    }
    location /media {
        root /srv/django/projects/app1;
    }
    location / {
        # host and port to fastcgi server
        fastcgi_pass unix:/srv/django/run/app1.socket;

        fastcgi_param PATH_INFO $fastcgi_script_name;
        fastcgi_param REQUEST_METHOD $request_method;
        fastcgi_param QUERY_STRING $query_string;
        fastcgi_param CONTENT_TYPE $content_type;
        fastcgi_param CONTENT_LENGTH $content_length;
        fastcgi_param SERVER_ADDR $server_addr;
        fastcgi_param SERVER_PORT $server_port;
        fastcgi_param SERVER_NAME $server_name;
        fastcgi_param SERVER_PROTOCOL $server_protocol;
        fastcgi_param REMOTE_ADDR $remote_addr;
        fastcgi_pass_header Authorization;
        fastcgi_intercept_errors off;
    }
}

我假设它与我的 Django App 配置或服务器 A 上的配置有关。

你能发现错误吗?您需要更多信息吗?
这里有没有我刚刚错过的答案?

提前致谢!

PS:这是我第一次在 StackOverflow 上提问,所以如果有什么方法可以改进我的问题以获得更好的答案,并且您发现了一些真正的错误,请随时向我指出我怎样才能改善这个问题。 :)

【问题讨论】:

    标签: python ajax django nginx proxy


    【解决方案1】:

    实际上,看起来 Nginx 正确地传递了请求 - 错误页面来自 Django(因此请求由 Apache 提供服务)并且它指出 url:

    http://nova.iguw.tuwien.ac.at/index.html

    无法解析到TUBadges.urls中定义的任何url

    您需要点击诸如http://nova.iguw.tuwien.ac.at/admin/login 之类的网址。

    【讨论】:

    • 我经历了从配置中删除实际 URI 的所有麻烦,并在错误消息中忘记了它们。 m) 既然已经发布了,您可以在nova.iguw.tuwien.ac.at 看到当前状态,非常感谢。我只是不明白»index.html« 的来源。 ://
    猜你喜欢
    • 2017-07-17
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 2017-08-16
    • 2018-09-10
    • 2016-09-07
    • 2020-09-22
    • 1970-01-01
    相关资源
    最近更新 更多