Зарисовки DevOps

Нашел противный баг в блоге Ghost, который я запускаю прямо из официального докер контейнера. На этом движке крутится наш корпоративный блог.

Суть баги: в конфиге докер контейнера прописываете ссылку на блог с HTTPS (у нас же 2k18 и сейчас без https и http/2 живет только ленивый):

#docker-compose.yml
ghost:
image: ghost:latest
container_name: blog
restart: always
ports:
- ...
environment:
...
url : https://blog.newhr.ru
NODE_ENV : production
volumes:
...

Запускаете и получаете бесконечные редиректы 301. Если же меняете url на ссылку с http, то все работает. Где там внутри кода проблемы — вот чес. слово, нет времени разбираться. Фиксится это все на уровне конфигов (хе хей, devops way).

В качестве веб-сервера у меня используется Nginx. В конфиге для блога прописываем следующий хак:

server {
listen 80;
listen [::]:80;
server_name blog.newhr.ru;
...
location / {
...
proxy_set_header X-Forwarded-Proto https;
//вместо $scheme
proxy_intercept_errors on;
proxy_buffering off;
...
proxy_pass http://127.0.0.1;
}
}

Жестко захардкодив передачу заголовка X-Forwarded-Proto все заработало корректно. Почему так происходит — можно догадаться, но вот лезть в код и фиксить его совершенно нет времени.

Кто пофиксит багу и запушит пулреквест, тот сделает кармически правильный поступок 😉

Если знаете как это можно пофиксить другими способами — всегда рад услышать альтернативное мнение.