Nginx 反向代理配置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;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_25854057/article/details/126751250
今日推荐