我在 NGINX 上重定向到 HTTPS 时遇到了一个奇怪的问题
- 当用户
http
第一次访问时,会报告 ERR_FAIL_CONNECTION。 - 当用户访问时
https
,它就起作用了。 - 然后用户关闭浏览器,再次启动浏览器,并转到
http
,重定向正在运行!!
这是我的 nginx 80 端口配置
server{
listen 80 default_server;
listen [::]:80 default_sever;
server_name mydomain;
location /{
return 301 https://$host$request_uri;
}
}
我已检查服务器是否正在监听端口 80 和 443,并且防火墙处于非活动状态。并且 curl 适用于 http 和 https。
nmap 结果还显示端口 80 和 443 已打开:
PORT STATE SERVICE
80/tcp open http
443/tcp open https
这是我的 http 的 curl 信息:
* Connected to mydomain (my.IP.num.ber) port 80 (#0)
> GET / HTTP/1.1
> Host: mydomain
> User-Agent: curl/7.47.0
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Server: nginx/1.10.3 (Ubuntu)
< Date: Thu, 05 Apr 2018 07:39:46 GMT
< Content-Type: text/html
< Content-Length: 194
< Connection: keep-alive
< Location: https://mydomain/
<
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.10.3 (Ubuntu)</center>
</body>
</html>
* Connection #0 to host mydomain left intact
因此,只有当用户“第一次”通过 http 访问网站时,重定向才有效。有什么办法可以解决这个问题吗?
答案1
这可能是浏览器的问题,第二次尝试时它成功了。当我将 http 重定向到 https 时,我总是尽量简洁
server{
server_name mydomain;
return 301 https://$host$request_uri;
}