400 Bad Request: プレーン HTTP リクエストが HTTPS ポートに送信されました
1. 背景の紹介
Nginx
プロキシバックエンドサービスではNginx
HTTPSポートのみ監視しており、初めて開いたインターフェースから他のインターフェースに入るとプロトコルに変更されてHTTP
開けなくなります。HTTPS
に変更後はジャンプ後のインターフェースも可能になります開いた。通常の状況では、2 つのポートをリッスンすると、301 を使用してリダイレクトを実行できるため、この問題は解決されます。しかし、現在はHTTPS
契約書を開くだけです。
server {
listen 23182 ssl;
server_name test.example.com;
ssl_certificate /etc/nginx/ssl/example.com/example.crt;
ssl_certificate_key /etc/nginx/ssl/example.com/example.com.key;
access_log /var/log/nginx/example-test.access.log main;
error_log /var/log/nginx/example-test.err.log warn;
location / {
proxy_pass http://10.10.1.21:8080;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 5;
proxy_send_timeout 10;
proxy_read_timeout 10;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
2. 問題解決
proxy_redirect http:// https://
この構成により、リダイレクト後の問題を解決できhttps
ますhttp
。proxy_redirect
この関数は比較的強力で、その機能はクライアントに送信される URL を変更することです。
server {
listen 23182 ssl;
server_name test.example.com;
ssl_certificate /etc/nginx/ssl/example.com/example.crt;
ssl_certificate_key /etc/nginx/ssl/example.com/example.com.key;
access_log /var/log/nginx/example-test.access.log main;
error_log /var/log/nginx/example-test.err.log warn;
location / {
proxy_pass http://10.10.1.21:8080;
proxy_redirect http:// https://; # 这个配置
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; # 这个配置
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 5;
proxy_send_timeout 10;
proxy_read_timeout 10;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}