Как запустить 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 для обратного прокси на этот порт.