Назад | Перейти на главную страницу

Принудительное перенаправление SSL с помощью AWS, расшифровывающего SSL на ELB и маршрутизации на Nginx / Passenger

В настоящее время мы создаем новую среду и сталкиваемся с некоторыми особенностями 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 упоминают, что некоторые заголовки не передаются и что эта директива необходима.

Надеюсь это поможет!