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


16

Я усвідомлюю, що це виглядає як дублікат хоча б кількох інших питань, але я читав їх кожен кілька разів і все ще роблю щось не так.

Далі наведено вміст мого конфігураційного файлу 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 / jessie


1
Ви згадали, що "Я повинен зазначити, що я можу використовувати нестандартний порт, а потім явно ввести цей порт у URL-адресу, наприклад, myexample.com:9443 ." Поясніть, будь ласка, як вам вдалося це зробити, тому що я хочу отримати доступ до свого веб-сайту за допомогою smth типу " myexample.com:9443 " із включеним SSL
Ghassan Zein

Відповіді:


23

Щоб підтримати введення " 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, але не обов'язково до порту.

Сподіваюся, це допомагає!


Це найповніша відповідь, але те, що я думаю, що ти мені кажеш, це те, що для автоматичного перенаправлення на захищене з'єднання, nginx все ж повинен бути прив’язаний до порту 443. Це так? У цьому проблема: - (У мене інший процес пов'язаний з цим портом.
GojiraDeMonstah

Nginx - зворотний проксі. Ви можете слухати його на 443 та передавати запити до відповідної програми.
Тім

Тім - ти прав. Напевно, я задав справжнє німе запитання, але я сподівався, що є спосіб просто "магічно" змінити порт SSL.
GojiraDeMonstah

@GojiraDeMonstah Якщо ви не хочете використовувати порт 443, введіть обраний номер порту в URL. Це все.
Майкл Хемптон

"Ssl" був досить важливим. Я раніше мав default_server і боровся з ним досить десь.
swateek

0

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

Вам потрібно домовитись прослуховувати порт 443, який перенаправляє з'єднання до порту 9443 або використовує порт як частину URL-адреси.


-1

якщо ви змінили порт на нестандартний, як-от 9443, вам потрібно додати перенаправлення з 443 на 9443. Встановіть nginx для зворотного проксі-сервера до цього порту.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.