Nginx HTTP 未重定向到 HTTPS 400 错误请求 "The plain HTTP request was sent to HTTPS port"

Nginx HTTP not redirecting to HTTPS 400 Bad Request "The plain HTTP request was sent to HTTPS port"

我 运行 在 docker 中使用 nginx。 HTTPS 工作正常,但是当我明确发出 HTTP 请求时,出现以下错误

400 错误请求 纯 HTTP 请求已发送到 HTTPS 端口

nginx.conf如下

worker_processes auto ;          
events {}

http {

include /etc/nginx/mime.types;

access_log /var/log/nginx/main.access.log;                                           

server {    
listen 80;                                                                                                       
location / {
    return 301 https://localhost:3000$request_uri; 
}

}

server {   
listen 443 ssl;                                                      
server_name  localhost:3000;                  
 root    /var/www/html; 

ssl_certificate         /etc/nginx/ssl/cert.pem; 
ssl_certificate_key     /etc/nginx/ssl/key.pem;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;

location / {
try_files  $uri /index.html;        
}

}

}

我运行这个容器使用

docker run -p 3000:443 -it -d --name nginxtest nginx-test

并得到以下错误

docker文件如下

FROM nginx:latest
COPY ./build /var/www/html
COPY ./nginx.conf /etc/nginx/nginx.conf
COPY ./ssl /etc/nginx/ssl
EXPOSE 443
CMD [ "nginx","-g","daemon off;" ]

奇怪的是,有时它工作得很好,突然间它停止工作,如果我重新创建容器甚至不会工作。

甚至尝试执行以下操作。仍然没有运气

 server {    
    listen 80;                                                                                                       
     server_name localhost:3000
        return 301 https://localhost:3000$request_uri; 
    }

另一个奇怪的事情是当我运行下面的docker命令

docker run -p 3000:443 -p 3001:80 -it -d --name nginxtest nginx-test

并转到 localhost:3001 它会将我重定向到 https 就好了,但其他事情确实会中断。 抱歉问题太长了

将以下指令放入侦听端口 443 的服务器块。

error_page 497 https://$host:$server_port$request_uri;

该指令意味着当 "The plain HTTP request was sent to HTTPS port" 发生时,将其重定向到当前主机名、端口和 URI 的 https 版本。

有点笨拙,但有效。