如果正常的,80 端口 HTTP 跳轉 HTTPS,那么直接在 server listen 80 下寫 return 301 https://$host$request_uri;
就行
但是,現在的情況是,80/443 都有服務了,然后在 8088 端口上開了一個需要客戶端證書認證的 TLS 雙向認證服務,通過 https://www.jonnyan404.top:8088 可以成功訪問,瀏覽器會提示選擇客戶端證書,這都沒問題。
但是在首次訪問的時候,如果沒有顯式指定 https 協議,將會自動默認使用 http 協議來訪問 8443 端口,導致 nginx 報錯:400 Bad Request: The plain HTTP request was sent to HTTPS port。
正確配置如下:
497狀態碼是專門為解決非標准ssl端口跳轉問題.
server {
listen 8443 ssl http2;
server_name xxxxx.com;
error_page 497 301 =307 https://$host:$server_port$request_uri;
ssl_verify_client on;
............