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

Как запустить 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 на безопасное соединение.

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

Редактировать: Я использую nginx / 1.6.2 на debian / jessie

Для поддержки набора текста "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 на обратный прокси для этого порта.