перенаправить 81 на 443 в nginx

Я пытаюсь, чтобы весь трафик обслуживался как https. Однако сервер находится за AWS ELB. Итак, я настроил прослушиватель на ELB для направления 80 -> 81 и 443 -> 80, т.е. весь http-трафик идет на порт 81 на сервере rails. И весь трафик https идет на порт 80 (ssl завершается на ELB). Я пытаюсь заставить nginx перенаправить весь трафик порта 81 на https. Кажется достаточно простым.

Итак, у меня есть серверный блок с именем redirect_to_ssl в каталоге sites_available, он выглядит так:

server {
      listen         81;
      server_name    redirect_to_ssl;
      return         301 https://$hostname$request_uri;
}

Я добавил символическую ссылку на этот файл в сайты с поддержкой

И я перезалил конфиг для nginx

Но когда я пытаюсь свернуть localhost:81, я получаю отказ в соединении. И когда я пытаюсь просмотреть сайт из-за пределов ELB, он ничего не делает.

Любые идеи? Есть ли другой способ сделать то, что я пытаюсь сделать с AWS ELB?


person Bernard    schedule 23.11.2014    source источник


Ответы (1)


Директива server_name не является меткой, это имя виртуального сервера, т.е. ее значение должно совпадать с заголовком HTTP Host входящих запросов для доступа к серверному блоку. Таким образом, он, скорее всего, никогда не будет соответствовать какому-либо фактическому заголовку хоста Host, используемому с вашей настройкой, и никогда не будет достигнут.

Прочтите документацию.

Использование $hostname также странно, если вы используете балансировщик нагрузки...

person Xavier Lucas    schedule 23.11.2014
comment
Спасибо за ответ. Я попробовал это без server_name для начала. Это никогда не работало. Итак, я посмотрел на текущий веб-сайт, и имя_сервера для него — это просто имя папки приложения ruby. Не имеет отношения к домену, на котором он обслуживается? - person Bernard; 24.11.2014
comment
Странно то, что я получаю сообщение об отказе в соединении, когда я нахожусь на сервере, выполняя завиток на 127.0.0.1:81. - person Bernard; 24.11.2014
comment
@Bernard Имя папки? Ваша установка полностью сломана, получите базовые знания о nginx, тогда у вас будет более четкое представление. Если у вас есть отказ в подключении, значит, nginx не прослушивает этот порт, потому что либо он не запущен, либо конфигурация неверна, либо брандмауэр отправляет сбросы TCP для этого порта. - person Xavier Lucas; 24.11.2014
comment
Например, приложение ruby ​​​​называется my_app. И он развернут в папке с именем my_app в другом месте. В папке, доступной для сайтов, есть файл блока сервера с именем my_app. И в этом файле блока сервера server_name — это my_app. Не знаете, как еще это объяснить? Я не устанавливал это — это конфигурация по умолчанию для Opsworks. А у меня сетап не совсем сломался :) Работает отлично. Единственное, что не работает, — это перенаправление на порт 81. С тех пор я узнал, что это произошло из-за того, что группа безопасности AWS для этого сервера не разрешает порт 81. Спасибо за помощь. - person Bernard; 25.11.2014