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

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

Ниже приведено содержимое моего файла конфигурации myexample.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/ Джесси

3 ответа

Решение

Для поддержки ввода " https://myexample.com/ " в вашем браузере и его обработки nginx прослушивание конфига на порт 9443, вам понадобится дополнительный nginx config, который все еще прослушивает порт 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, но не обязательно к порту.

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

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

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

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

Другие вопросы по тегам