我有这个 nginx 配置来将 http 重定向到 https:
# http redirects to https
server {
listen 80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
...
}
它在 Firefox 上正常运行。如果我添加/etc/hosts
如下条目:
127.0.0.1 my-custom-domain.com
为了确保我拥有从未使用过的域名,如果我在 Firefox 中输入my-custom-domain.com
,我会得到以下信息:
按预期工作,它重定向到 https。
但如果我在 Chrome 上执行同样操作,则会得到以下结果:
https
仅当我明确输入时,Chrome 才会打开一个https://my-custom-domain.com
。不确定为什么它在 Chrome 上的行为有所不同。
看起来这个问题与 nginx docker 镜像有关。我无法使用本地安装的 nginx 重现此问题。虽然带有nginx:1.18.0
、标签nginx:1.23.0
的nginx 镜像nginx:1.23.0-alpine
都存在同样的问题。
PS 我读到有人说server_name
不能_
有具体的名字,但即使我输入sever_name my-custom-domain.com;
PSS 我正在使用1.23.0-alpine
nginx docker 镜像。
更新
做过curl -I my-custom-domain.com
在非 docker nginx 上,我得到:
HTTP/1.1 301 Moved Permanently
Server: nginx/1.18.0 (Ubuntu)
Date: Fri, 15 Jul 2022 12:17:50 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Location: https://my-custom-domain.com/
在docker nginx上我得到:
curl: (7) Failed to connect to my-custom-domain.com port 80: Connection refused
答案1
所以问题很简单。Nginx 工作正常,但我没有80
从 docker 公开端口,只有443
。
基本上已添加80:80
端口,现在 chrome 也将其重定向(在docker-compose.yml
):
ports:
- 443:443
- 80:80