Задать вопрос
@Wolfengo
Я ещё зелёный, сильно не душите

Как сделать так, чтобы nginx не слушал http, а только https?

server {
    listen 12345;
    server_name 1.1.1.1;

    return 301 https://$host:12345$request_uri;
}

server {
    listen 12345ssl;
    server_name 1.1.1.1;

    ssl_certificate     /etc/nginx/mtls/server.crt;
    ssl_certificate_key /etc/nginx/mtls/server.key;

    ssl_client_certificate /etc/nginx/mtls/ca.crt;
    ssl_verify_client optional;

    if ($ssl_client_verify != SUCCESS) {
        return 444;
    }

    location / {
        proxy_pass http://127.0.0.1:1010;

        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-SSL-Client-DN $ssl_client_s_dn;
    }
}


Я уже перепробовал всё, но даже не могу понять как сделать хотя бы редирект на https. Он мне в http выдаёт заглушку nginx, но я хочу делать либо редирект, либо не отдавать вообще ничего 444, а в идеале, вообще таймаут соединения:
400 Bad Request
The plain HTTP request was sent to HTTPS port
nginx
  • Вопрос задан
  • 1174 просмотра
Подписаться 1 Простой 11 комментариев
Помогут разобраться в теме Все курсы
  • Академия Eduson
    DevOps-инженер
    7 месяцев
    Далее
  • Skillbox
    Профессия Python-разработчик + ИИ
    10 месяцев
    Далее
  • Бруноям
    Системный администратор
    4 месяца
    Далее
Пригласить эксперта
Ответы на вопрос 3
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Если не получается заставить nginx перестать принимать запросы на 80й порт, то закрой входящие соединения на 80й порт через файрвол ;-)

p.s. а так на вскидку
  • надо после правки конфига не забыть сделать reload/restart
  • может быть где-то валяется default конфиг с указанным listen 80 либо там может быть listen ip.ip.ip.ip без порта, то тоже по дефолту будет означать "слушай 80й порт"


поискать конфиги со строчкой listen
find /etc/nginx -type f -exec grep listen {} +
Ответ написан
svisch
@svisch
у вас два сервера слушают один и тот же порт - 12345
должно быть типа 80 - http и 443 - https
и соответственно в дерриктиве перенаправления return 301 https://$host:12345$request_uri; указать 443
Я бы начал с этого.
Ответ написан
@Hardoman
DevOps
Твои хотелки конфликтуют между собой.
Если ты не хочешь ответа по http (таймаут), то убери целиком блок с
listen 12345;

Второе - нельзя, чтобы два блока server слушали один порт, будет выполняться только первый.

Третье. Если ты хочешь редирект на ssl, то порты для ssl и не-ssl должны быть разные.

400-е ошибки вообще-то шлёт клиента
400 Bad Request
The plain HTTP request was sent to HTTPS port
Означает, что на ssl порт пошли по протоколу http, поэтому неверный запрос. К конфиге nginx отношения не имеет
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы