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

принудительно ssl nginx с портом

Я пытаюсь принудительно перенаправить 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;
    }