Nginx 反向代理配置HTTPS重定向后协议变成了HTTP
400 Bad Request: The plain HTTP request was sent to HTTPS port,反向代理后,协议由HTTPS转为HTTP问题
·
400 Bad Request: The plain HTTP request was sent to HTTPS port
一、背景介绍
通过 Nginx
代理后端服务,Nginx
只监听了 HTTPS 端口,通过首次打开的界面进入到其他界面时又变成了HTTP
协议的导致打不开,改成 HTTPS
后,跳转后的界面也可以打开。正常情况下,当我们监听两个端口的情况下,这个问题就解决了,因为可以用 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;
}
}
二、问题解决
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;
}
}
更多推荐
已为社区贡献5条内容
所有评论(0)