2016-10-06 2 views
-1

Я прочитал много инструкций со вчерашнего дня об этой проблеме, но все они имеют схожие шаги. Однако я последовал шаг за шагом, но все равно не могу получить все.python - Как развернуть Flask + Gunicorn + Nginx + supervisor на сервере облаков?

На самом деле я могу сделать Flask + Gunicorn + supervisor, но Nginx не работает.

Я подключаю свой удаленный сервер облаков с помощью SSH, и я не развертываю сайт на своем компьютере.

Nginx установлен правильно, потому что, когда я посещаю сайт через доменное имя (ака. example.com), он показывает страницу приветствия Nginx.

Я использую supervisor начать Gunicorn и конфигурация

[program:myapp] 
command=/home/fh/test/venv/bin/gunicorn -w4 -b 0.0.0.0:8000 myapp:app 
directory=/home/fh/test 
startsecs=0 
stopwaitsecs=0 
autostart=false 
autorestart=false 
stdout_logfile=/home/fh/test/log/gunicorn.log 
stderr_logfile=/home/fh/test/log/gunicorn.err 

здесь я связываю сервера к порту и я на самом деле не знаю, что делает 0.0.0.0 стенд для, но я думаю, что это не означает localhost, потому что я могу посетить сайт через http://example.com:8000, и он работает хорошо.

Затем я попытался использовать Nginx в качестве прокси-сервера.

Я удален /etc/nginx/sites-available/default' and '/etc/nginx/sites-enabled/default/ и создано /etc/nginx/sites-available/test.com и /etc/nginx/sites-enabled/test.com и ссылки на них.

test.com

server { 
     server_name www.penguin-penpen.com; 
     rewrite^http://example/ permanent; 
} 

# Handle requests to example.com on port 80 
server { 
     listen 80; 
     server_name example.com; 

     # Handle all locations 
     location/{ 
       # Pass the request to Gunicorn 
       proxy_pass http://127.0.0.1:8000; 

       # Set some HTTP headers so that our app knows where the request really came from 
       proxy_set_header Host $host; 
       proxy_set_header X-Real-IP $remote_addr; 
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     } 
} 

В моем понимании, что делают Nginx, когда я посещаю http://example.com он передает свой запрос на http://example.com:8000.

Я не совсем уверен, что я должен использовать proxy_pass http://127.0.0.1:8000 здесь, потому что я не знаю, стоит ли Nginx передать запрос на LOCALHOST Но я пробовал изменить его 0.0.0.0:8000, но она по-прежнему не работает.

Может ли кто-нибудь помочь?

ответ

0

0.0.0.0 означает, что сервер будет принимать соединения со всего IP-адреса. См. https://en.wikipedia.org/wiki/0.0.0.0 для более подробной информации.

Если сервер gunicorn прослушивает 127.0.0.1, только вы (или кто-то другой на той же машине с сервером gunicorn) можете получить к нему доступ через локальную петлю https://en.wikipedia.org/wiki/Local_loop.

Но так как вы используете Nginx для приема соединения из Интернета, вы можете просто proxy_pass http://127.0.0.1:8000; и сменить команду на command=/home/fh/test/venv/bin/gunicorn -w4 -b 127.0.0.1:8000 myapp:app. В этом сценарии сам пулемет должен только принимать соединения от Nginx, который работает на той же машине с помощью пушки.

Весь процесс выглядит следующим образом

Connections from the Internet -> Nginx (reverse proxy, listen on 0.0.0.0:80) -> Gunicorn (which runs your Python code, listen on 127.0.0.1:8000) 
Смежные вопросы