【发布时间】:2019-08-16 15:25:45
【问题描述】:
我在 docker 容器中有一个 nginx,我想对所有请求强制使用 SSL。因为我需要在容器外部的不同端口中公开网络服务器端口,所以在访问服务器时我没有使用标准端口。
我将容器内的 SSL 端口 443 映射到外部的 8888,所以当我编写 URL https://myserver:8888 时,HTTPS 工作正常。
当我不使用 https 前缀时会发生什么?端口 443 仍在侦听,但由于我没有使用 https 架构,我收到以下错误:
400 Bad Request
The plain HTTP request was sent to HTTPS port
如果我将请求重定向到端口 80 到 443 是不够的,因为我通过端口 8888 访问所有请求都是通过端口 443 传入的,但我不能保证使用的架构是 HTTP。
我的意思是,下面的块没有效果,因为我没有将端口 80 暴露在外面,只有 8888 直接映射到 443
server {
server_name myserver;
listen 80;
return 301 https://$host:$server_port$request_uri;
}
即使用户将 http 放在 URL 上,我如何才能强制它工作?
谢谢
【问题讨论】: