У меня есть nginx внутри контейнера докера, который я хочу заставить SSL на весь запрос. Поскольку мне нужно выставить порт веб-сервера в другом порту вне контейнера, я не использую стандартные порты при доступе к серверу.
Я сопоставил порт SSL 443 внутри своего контейнера с 8888 снаружи, поэтому, когда я пишу URL https://myserver:8888, HTTPS работает нормально.
Что происходит, когда я не использую префикс https? Порт 443 все еще прослушивает, но так как я не использую схему https, я получаю следующую ошибку:
400 Bad Request
The plain HTTP request was sent to HTTPS port
Если я перенаправлю запрос на порт 80 на 443, этого будет недостаточно, поскольку из-за того, что я получаю доступ через порт 8888, все запросы поступают через порт 443, но я не могу гарантировать, что используется схема HTTP.
Я имею в виду, что следующий блок не действует, потому что я не выставляю порт 80 снаружи, только 8888, который отображается непосредственно на 443
server {
server_name myserver;
listen 80;
return 301 https://$host:$server_port$request_uri;
}
Как я могу заставить его работать, даже если пользователь вводит http в URL?
Спасибо