Согласно статье в википедии о кодах состояния .Nginx имеет собственный код ошибки при отправке http-трафика на порт https (код ошибки 497)
. В соответствии с документами nginx на странице error_page вы можете определить URI, который будет отображаться дляконкретная ошибка.
Таким образом, мы можем создать URI, на который будут отправляться клиенты при возникновении кода ошибки 497.
nginx.conf
#lets assume your IP address is 89.89.89.89 and also
#that you want nginx to listen on port 7000 and your app is running on port 3000
server {
listen 7000 ssl;
ssl_certificate /path/to/ssl_certificate.cer;
ssl_certificate_key /path/to/ssl_certificate_key.key;
ssl_client_certificate /path/to/ssl_client_certificate.cer;
error_page 497 301 =307 https://89.89.89.89:7000$request_uri;
location / {
proxy_pass http://89.89.89.89:3000/;
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Protocol $scheme;
}
}
Однако, если клиент делает запросс помощью любого другого метода, кроме GET, этот запрос будет превращен в GET.Таким образом, чтобы сохранить метод запроса, через который пришел клиент;мы используем перенаправления обработки ошибок, как показано в документах nginx на error_page
И именно поэтому мы используем перенаправление 301 =307
.
Используя файл nginx.conf, показанный здесь,мы можем прослушивать http и https через один и тот же порт