Как запустить nginx SSL на нестандартном порту

15

Я понимаю, что это похоже на дубликат хотя бы нескольких других вопросов, но я прочитал их несколько раз и все еще делаю что-то не так.

Ниже приведено содержимое моего конфигурационного файла myginample.com nginx, расположенного в /etc/nginx/sites-available.

server {

  listen       443 ssl;
  listen       [::]:443 ssl;

  server_name myexample.com www.myexample.com;
  add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
  ssl_certificate /etc/letsencrypt/live/myexample.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/myexample.com/privkey.pem;

  #Configures the publicly served root directory
  #Configures the index file to be served
  root /var/www/myexample.com;
      index index.html index.htm;

}

Это работает, когда я захожу на https://myexample.com, контент обслуживается и соединение защищено. Так что этот конфиг кажется хорошим.

Теперь, если я изменяю порт ssl на 9443 и перезагружаю конфигурацию nginx, конфигурация перезагружается без ошибок, но посещение https://myexample.com показывает ошибку в браузере (Этот сайт недоступен / myexample.com отказался подключиться. ERR_CONNECTION_REFUSED)

Я пробовал предложения и документацию здесь , здесь и здесь (среди прочего), но всегда получаю ошибку ERR_CONNECTION_REFUSED.

Я должен отметить, что я могу использовать нестандартный порт и затем явно ввести этот порт в URL, например, https://myexample.com:9443 . Но я не хочу этого делать. Я хочу, чтобы пользователь мог набирать myexample.com в любом браузере и автоматически перенаправлять nginx на защищенное соединение.

Опять же, у меня нет никаких проблем, когда я использую стандартный порт 443 SSL.

Изменить: я использую nginx / 1.6.2 на Debian / Джесси

GojiraDeMonstah
источник
1
Вы упомянули, что «я должен отметить, что я могу использовать нестандартный порт и затем явно ввести этот порт в URL, например, myexample.com:9443 ». Не могли бы вы объяснить, как вы смогли это сделать, потому что я хочу получить доступ к своему веб-сайту, используя что-то вроде « myexample.com:9443 » с включенным SSL
Ghassan Zein

Ответы:

22

Для поддержки ввода « https://myexample.com » в вашем браузере и обработки его nginxконфигурацией, прослушивающей порт 9443, вам потребуется дополнительная nginxконфигурация, которая все еще прослушивает порт 443, поскольку это IP-порт для который подключает браузер .

Таким образом:

server {
  listen 443 ssl;
  listen [::]:443 ssl;

  server_name myexample.com www.myexample.com;
  ssl_certificate /etc/letsencrypt/live/myexample.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/myexample.com/privkey.pem;

  # Redirect the browser to our port 9443 config
  return 301 $scheme://myexample.com:9443$request_uri;
}

server {
  listen 9443 ssl;
  listen [::]:9443 ssl;

  server_name myexample.com www.myexample.com;
  ssl_certificate /etc/letsencrypt/live/myexample.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/myexample.com/privkey.pem;
  add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

  #Configures the publicly served root directory
  #Configures the index file to be served
  root /var/www/myexample.com;
  index index.html index.htm;
}

Обратите внимание, что один и тот же сертификат / ключ необходим для обоих разделов, поскольку сертификат обычно привязан к имени хоста DNS, но не обязательно к порту.

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

Castaglia
источник
Это наиболее полный ответ, но я думаю, что вы говорите мне, что для автоматического перенаправления на защищенное соединение nginx все равно должен быть привязан к порту 443. Это так? Вот в чем проблема :-( У меня есть другой процесс, связанный с этим портом.
GojiraDeMonstah
Nginx - обратный прокси. Вы можете прослушивать его на 443 и передавать запросы в соответствующее приложение.
Тим
Тим - ты прав. Я, вероятно, задал настоящий тупой вопрос, но я надеялся, что есть способ просто «волшебным образом» изменить порт SSL.
GojiraDeMonstah
@GojiraDeMonstah Если вы не хотите использовать порт 443, вы помещаете выбранный номер порта в URL. Это все.
Майкл Хэмптон
«ССЛ» был довольно важен. Раньше у меня был default_server, и я довольно долго боролся с ним.
swateek
0

Когда вы набираете https://example.com , стандартом для схемы https: // является подключение к порту 443. В вашем случае вы переместили свой сервер так, что теперь он прослушивает порт 9443. Вы получаете отказ в соединении сообщение из-за этого - по порту 443 ничего не слушается.

Вам нужно будет организовать прослушивание порта 443, который перенаправляет соединения на порт 9443, или использовать порт как часть URL-адреса.

user9517
источник
-1

если вы измените порт на нестандартный, такой как 9443, вам нужно добавить перенаправление с 443 на 9443. Установите nginx для обратного прокси на этот порт.

Kitsufan
источник