nginx反向代理到运行nginx+django的应用服务器时的问题
我有一个应用程序在服务器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应用配置或服务器A上的配置有关。
你能发现错误吗?你需要更多的信息吗?
也许这里有我错过的答案?
提前谢谢你!
附言:这是我第一次在StackOverflow上提问,所以如果你有建议让我改进我的问题以获得更好的答案,看到什么地方不对劲,请一定告诉我怎么改进这个问题。 :)
1 个回答
0
其实,看起来Nginx正在正确地处理请求——错误页面是来自Django的(所以请求是由Apache来处理的),它显示的内容是:
http://nova.iguw.tuwien.ac.at/index.html
这个网址无法匹配到TUBadges.urls
中定义的任何网址。
你需要访问一个像这样的网址:http://nova.iguw.tuwien.ac.at/admin/login。