У меня nginx работает как интерфейс для торнадо (который запускает приложение на основе фреймворка Flask). Nginx работает на порту 8080. Однако, когда Flask генерирует «301 редирект», он не принимает во внимание порт 8080. У меня перенаправление на 80 порт, где я ничего не слушаю.
Это мой конфиг nginx для сайта:
server {
listen 8080;
server_name localhost;
location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
expires off;
}
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Port 8080;
proxy_pass http://127.0.0.1:5000;
}
}
Есть ли способ исправить проблему?
proxy_redirect это директива, которую вы ищете. Поскольку внутренний сервер перенаправляется на порт 80, часть проблемы здесь. Протестируйте торнадо прямо на порту 5000, работают ли перенаправления? Думаю, нет. Выясните, как настроить Tornado или Flask, чтобы включить правильный порт в перенаправление.
Даже если вы этого не сделаете, nginx сможет справиться с этим с помощью proxy_redirect (s).
proxy_redirect default;
proxy_redirect http://127.0.0.1:80/ /;