Очередные грабли на которые в LF многие наступили.
Есть nginx с такой конфигурацией:
server {
listen 80;
server_name _;
location /app {
proxy_pass http://localhost:5000;
}
}
И есть приложение:
from flask import
Flask app = Flask(__name__)
@app.route('/')
def hello():
return 'Привет, Linux Factory!'
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True)
Плюс к нему Dockerfile:
FROM python:3.8-slim
WORKDIR /app COPY .
/app RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["python", "app.py"]
Собираем и запускаем контейнер:
docker build -t bashdays .
docker run -d -p 5000:5000 bashdays
Идем в браузере на http://bashdays.ru/app и получаем хуй с маслом:
Важно! Уже по этой ошибке можно сделать какие-то выводы, эт не стандартная ошибка от nginx, а значит запрос отлично доходит до приложения. Но где-то внутри приложения теряется. Тренируй насмотренность, у nginx ошибки обычно по центру выводятся, а тут align вправо.
Еще как вариант, можешь остановить контейнер и еще раз в браузере тыкнуться, если получишь 502 Плохой шлюх, то значит что nginx нормально всё у тебя передает запросы на Flask. Но где-то внутри Flask происходит какое-то гавнище.
А что случилось? Всёж верно? Локейшен в nginx прописан, прокси-пасс тоже присутствует, где ответ от приложения?
Все дело в слэшах!
location /app {
proxy_pass http://localhost:5000/;
}
В конце порта 5000 ставим слэш и проверяем. Хуяк и оно начинает работать!
Что вообще происходит?
Когда мы делаем локейшен без последнего слэша в прокси-пассе, nginx проксирует запросы на приложение без изменения пути.
То есть приложение app.py получает роут /app а его там естественно нет. А есть просто корень /.
А когда мы добавляем слэш, nginx добавляет путь после /app к целевому урлу.
Короче опять заумно расписал, давай снова на котиках!
Без слэша запрос /app проксируется на http://localhost:5000/app, что не совпадает с маршрутом, настроенным в Flask.
С слэшем запрос /app проксируется на http://localhost:5000, и приложение Flask обслуживает его как корневой путь /.
/app и отправляет запрос на корень приложения Flask.Вот и вся наука. Грабли прям жизненные и порой доставляют проблемы с многочасовым дебагом.
Так что держи это в голове, если с виду вроде все правильно, но не работает, пиздани в конце слэш, типа метод тыка.
Вечерком еще чтива подвезу, случайно набрал интеграций, теперь отдуваюсь.








Комментарии