Со вчерашнего дня я прочитал много инструкций по этой проблеме, но все они имеют похожие шаги. Однако я следовал шаг за шагом, но до сих пор не могу все понять.
На самом деле я могу заставить работать Flask + Gunicorn + supervisor, но Nginx не работает.
Я подключаю свой удаленный облачный сервер с помощью SSH и не развертываю сайт на своем компьютере.
Nginx установлен правильно, потому что, когда я захожу на сайт через доменное имя (aka. 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
вот привязываю сервер к порту 8000 и Я на самом деле не знаю, что означает 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
но это все равно не работает.
Кто-нибудь может помочь?
Что nginx делает, так это для местоположения / передает запрос на значение proxy_pass. В этом случае запрос будет отправлен на адрес http://127.0.0.0:8000 это означает, что ваш пулемет должен слушать этот интерфейс. Обычно Gunicorn слушает локальный хост, например
gunicorn --bind 127.0.0.1:8000 myapp:app
Это потому, что вы не хотите, чтобы внешние пользователи подключались к Gunicorn напрямую, а скорее через nginx.
Это образец конфигурации nginx, который отлично работает с запуском Gunicorn, как указано выше.
location / {
proxy_read_timeout 120;
proxy_pass http://127.0.0.1:8000;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}