В настоящее время мы создаем новую среду и сталкиваемся с некоторыми особенностями SSL. Мы используем ELB, который принимает 80/443. Оба направляются к одному и тому же порту на Nginx-боксе (расшифровка ELB). В поле Nginx мы проверяем заголовок AWS, и если мы его не видим, мы перенаправляем обратно на https. Пока что перенаправление не работает.
Ниже представлена копия нашего конфигурационного файла nginx для сайта, который прослушивает порт 3000 (ELB 80-> 3000. ELB 443-> 3000).
server {
listen 80;
root /home/app/web-app/public;
passenger_enabled on;
passenger_user app;
# If this is a Ruby app, specify a Ruby version:
passenger_ruby /usr/bin/ruby2.2;
passenger_min_instances 2;
if ($http_x_forwarded_proto != "https") {
return 301 https://$host$request_uri;
}
}
Есть мысли о том, что я здесь делаю не так?
РЕДАКТИРОВАТЬ -
Мы используем образ докера для пассажиров, как показано здесь - https://github.com/phusion/passenger-docker
Passenger запускается и, кажется, принимает все запросы на порт 3000, несмотря на то, что конфигурация Nginx показывает прослушивание 80.
@TJSaunders направил меня на верный путь. Я управлял автономным пассажиром через пакет exec, который обходил Nginx. Как только я понял эту ошибку и переместил свой файл докера, чтобы вместо этого запустить Nginx, он начал попадать в файлы конфигурации.
Возможно, вам потребуется попросить пассажира передать эти заголовки, например:
passenger_pass_header X-Forwarded-For;
passenger_pass_header X-Forwarded-Proto;
В passenger_pass_header
docs упоминают, что некоторые заголовки не передаются и что эта директива необходима.
Надеюсь это поможет!