Я пытаюсь принудительно перенаправить ssl, но в моем домене есть такой порт domain.com:8888
Следующее, похоже, не работает, теперь я даже не могу получить доступ к сайту, если добавлю rewrite
server {
listen 8888;
server_name sy-system.net;
rewrite ^ https://$server_name:8888$request_uri? permanent;
ssl on;
ssl_certificate /path/to/certs/domain.pem;
ssl_certificate_key /path/to/certs/domain.key;
}
Это можно сделать двумя способами: с помощью двойного блока HTTP HTTPS-сервера или с использованием двух серверных блоков (предпочтительно). При этом используется один серверный блок для прослушивания порта 8888 и стандартный порт SSL 443.
# Server accepts 8888 and SSL but redirects to HTTPS when no SSL protocol used
server {
listen 8888; # usually 80
listen 443 ssl;
server_name example.com; # replace example.com with your domain name
ssl on;
ssl_certificate /path/to/certs/domain.pem;
ssl_certificate_key /path/to/certs/domain.key;
if ($ssl_protocol = "") {
rewrite (.*) https://$server_name$1 permanent;
}
}
Есть еще один способ избежать операторов if, разделив сервер на два блока.
# SSL Site
server {
listen 443 ssl;
server_name example.com; # replace example.com with your domain name
ssl on;
ssl_certificate /path/to/certs/domain.pem;
ssl_certificate_key /path/to/certs/domain.key;
}
# Non-SSL Site
server {
listen 8888; # usually 80
server_name example.com; # replace example.com with your domain name
rewrite (.*) https://$server_name$1 permanent;
}
Обратите внимание, что они не тестировались, поскольку я использую стандартные порты (80 443), но это было сделано из документации. Вы также можете включить IP-адрес в оператор прослушивания, поскольку SSL в любом случае должен быть привязан к выделенному IP.
Источники:
Невозможно обрабатывать запросы SSL и не-SSL на одном порту. Вам нужно будет использовать второй порт для версии SSL, если вы хотите обслуживать оба порта в одном домене.
Это возможно.
Если вы используете порт в URI:
server {
listen 8888 ssl; # listen for ipv4; this line is default and implied
ssl on;
ssl_certificate /path/to/certs/domain.pem;
ssl_certificate_key /path/to/certs/domain.key;
error_page 497 https://$server_name:8888$request_uri;
}
Если в URI нет порта:
server {
listen 8888 ssl;
ssl on;
ssl_certificate /path/to/certs/domain.pem;
ssl_certificate_key /path/to/certs/domain.key;
error_page 497 https://$server_name$request_uri;
}