У меня есть это приложение Flask, которое я запускаю с gunicorn на 127.0.0.1:5002 на этом общем сервере. У меня есть экземпляр nginx, в который я могу добавлять собственные конфигурации. Структура каталога nginx такова:
~/.nginx
| conf.d
| nginx.conf
| [...]
Где nginx.conf содержит следующее:
pid /media/sdl1/home/USERNAME/.nginx/pid;
error_log /media/sdl1/home/USERNAME/.nginx/error.log;
worker_processes 1;
worker_rlimit_nofile 65535;
events {
worker_connections 8192;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log off;
sendfile on;
tcp_nopush on;
real_ip_header X-Forwarded-For;
client_max_body_size 1g;
client_body_temp_path /media/sdl1/home/USERNAME/.nginx/client;
fastcgi_temp_path /media/sdl1/home/USERNAME/.nginx/fastcgi;
uwsgi_temp_path /media/sdl1/home/USERNAME/.nginx/uwscgi;
scgi_temp_path /media/sdl1/home/USERNAME/.nginx/scgi;
include conf.d/*.conf;
}
Теперь это указывает на каталог conf.d, который содержит файл с именем 000-default-server.conf и пустой каталог с именем 000-default-server.d.
000-default-server.conf содержит следующее:
server {
listen 8080;
server_name EXAMPLE.com;
root /media/sdl1/home/USERNAME/www/$host/public_html;
index index.html index.php;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
error_log /media/sdl1/home/USERNAME/.nginx/error.log debug;
# Pass files that end in .php to PHP
location ~ \.php$ {
fastcgi_read_timeout 1h;
fastcgi_send_timeout 10m;
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/media/sdl1/home/USERNAME/.nginx/php/socket;
}
location /apps/whatsmyuserinfo {
proxy_redirect off;
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;
proxy_pass http://127.0.0.1:5002/;
}
# Deny access to anything starting with .ht
location ~ /\.ht {
deny all;
}
include conf.d/000-default-server.d/*.conf;
}
Когда личная информация заменена менее показательными значениями, эти значения указаны заглавными буквами.
Теперь это общая настройка nginx. Вот где проявляется моя проблема. Если я использую
curl -i 127.0.0.1:5002
через SSH на сервере, чтобы убедиться, что Gunicorn правильно обслуживает приложение, приложение обслуживается правильно. Если я сделаю это извне, через EXAMPLE.com/apps/whatsmyuserinfo я получу ошибку 502 Bad Gateway. Журнал ошибок nginx, возможно, может пролить свет на это, вот как он выглядит для одного запроса к EXAMPLE.com/apps/whatsmyuserinfo в режиме отладки.
"GET / HTTP/1.0
Host: EXAMPLE.com
X-Real-IP: 10.0.0.1
X-Scheme: http
X-Forwarded-For: 188.176.255.124, 10.0.0.1
Connection: close
X-Host: EXAMPLE.com
X-Forwarded-Proto: http
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Cookie: __utma=18102207.768668361.1377199324.1377199324.1377199324.1; __utmz=18102207.1377199324.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)
Cache-Control: max-age=0
"
2013/08/23 19:00:01 [debug] 31195#0: *14 http cleanup add: 0000000001F44D30
2013/08/23 19:00:01 [debug] 31195#0: *14 get rr peer, try: 1
2013/08/23 19:00:01 [debug] 31195#0: *14 socket 10
2013/08/23 19:00:01 [debug] 31195#0: *14 epoll add connection: fd:10 ev:80000005
2013/08/23 19:00:01 [debug] 31195#0: *14 connect to 127.0.0.1:5002, fd:10 #15
2013/08/23 19:00:01 [debug] 31195#0: *14 http upstream connect: -2
2013/08/23 19:00:01 [debug] 31195#0: *14 posix_memalign: 0000000001F3D850:128 @16
2013/08/23 19:00:01 [debug] 31195#0: *14 event timer add: 10: 90000:1377284491613
2013/08/23 19:00:01 [debug] 31195#0: *14 http finalize request: -4, "/apps/whatsmyuserinfo?" a:1, c:2
2013/08/23 19:00:01 [debug] 31195#0: *14 http request count:2 blk:0
2013/08/23 19:00:01 [debug] 31195#0: *14 http run request: "/apps/whatsmyuserinfo?"
2013/08/23 19:00:01 [debug] 31195#0: *14 http upstream check client, write event:1, "/apps/whatsmyuserinfo"
2013/08/23 19:00:01 [debug] 31195#0: *14 http upstream recv(): -1 (11: Resource temporarily unavailable)
2013/08/23 19:00:01 [debug] 31195#0: *14 http upstream request: "/apps/whatsmyuserinfo?"
2013/08/23 19:00:01 [debug] 31195#0: *14 http upstream process header
2013/08/23 19:00:01 [error] 31195#0: *14 connect() failed (111: Connection refused) while connecting to upstream, client: 10.0.0.1, server: EXAMPLE.com, request: "GET /apps/whatsmyuserinfo HTTP/1.0", upstream: "http://127.0.0.1:5002/", host: "EXAMPLE.com"
2013/08/23 19:00:01 [debug] 31195#0: *14 http next upstream, 2
2013/08/23 19:00:01 [debug] 31195#0: *14 free rr peer 1 4
2013/08/23 19:00:01 [debug] 31195#0: *14 finalize http upstream request: 502
2013/08/23 19:00:01 [debug] 31195#0: *14 finalize http proxy request
2013/08/23 19:00:01 [debug] 31195#0: *14 free rr peer 0 0
2013/08/23 19:00:01 [debug] 31195#0: *14 close http upstream connection: 10
2013/08/23 19:00:01 [debug] 31195#0: *14 free: 0000000001F3D850, unused: 48
2013/08/23 19:00:01 [debug] 31195#0: *14 event timer del: 10: 1377284491613
2013/08/23 19:00:01 [debug] 31195#0: *14 reusable connection: 0
2013/08/23 19:00:01 [debug] 31195#0: *14 http finalize request: 502, "/apps/whatsmyuserinfo?" a:1, c:1
2013/08/23 19:00:01 [debug] 31195#0: *14 http special response: 502, "/apps/whatsmyuserinfo?"
2013/08/23 19:00:01 [debug] 31195#0: *14 http set discard body
2013/08/23 19:00:01 [debug] 31195#0: *14 xslt filter header
2013/08/23 19:00:01 [debug] 31195#0: *14 HTTP/1.1 502 Bad Gateway
Наиболее важные части этого существа:
2013/08/23 19:00:01 [debug] 31195#0: *14 http upstream recv(): -1 (11: Resource temporarily unavailable)
2013/08/23 19:00:01 [error] 31195#0: *14 connect() failed (111: Connection refused) while connecting to upstream, client: 10.0.0.1, server: EXAMPLE.com, request: "GET /apps/whatsmyuserinfo HTTP/1.0", upstream: "http://127.0.0.1:5002/", host: "EXAMPLE.com"
2013/08/23 19:00:01 [debug] 31195#0: *14 HTTP/1.1 502 Bad Gateway
Кто-нибудь может увидеть, что здесь происходит, потому что я не понимаю, почему он отказывается работать. Я пробовал создать новый сервер в конфигурации nginx специально для приложения и имея местоположение /, я попытался избавиться от большинства настроек прокси и просто оставил несколько, например proxy_pass, я попытался создать восходящий поток в конфиге и тд.
Полное раскрытие информации: я также разместил это в stackoverflow, но мне сказали опубликовать и здесь, потому что более вероятно, что я получу помощь здесь.