请教一个 nginx rewrite 问题,www->non-www 强制 https
- 0次
- 2021-05-25 14:37:39
- idczone
跳转需求是这样的
强制所有连接走 https
且带 www301 到不带 www
我的配置
server {
listen 80;
server_name abc.com www.abc.com;
return 301 https://abc.com$request_uri;
}
server {
listen 44抗投诉服务器3 ssl;
server_name abc.com;
ssl_certificate ***;
ssl_certificate_key ***;
*****
}
现在的状态是
http://www.abc.com
http://abc.com
跳转到 https://abc.com
可是 https://www.abc.com 不跳转
第一个 server 内加 listen 443 ssl;出错(ノ=Д=)ノ┻━┻
DNS 里把 www cname 到 abc.com
让我冷静一下(DNS 这事忘了,从昨天折腾到现在了→_→
现在的问题是如何用 nginx rewrite 实现,毕竟都折腾那么长时间了≥﹏≤
server {
listen 80;
listen 443 ssl;
server_name www.abc.com;
ssl_certificate ***;
ssl_certificate_key ***;
return 301 https://abc.com$request_uri;
}
server {
listen 80;
server_name abc.com
return 301 https://abc.com$request_uri;
}
这样试试呢
给你一个思路啊,在 nginx.conf 最底部加一个 listen 80 ,但是不加 server_name ,把这个层全部重定向 https://abc.com
然后不要把 www.abc.com 加入到其他配置的 server_name
还是不行→_→
你缺一个监听 443 www 的
https://www.*依旧不跳转 @_@
网页可能暂时无法连接,或者它已永久性地移动到了新网址。
看 log 呢?
```sh
if ($host != 'www.abc.com.cn' ) {
rewrite ^/(.*)$ https://www.abc.com.cn/$1 permanent;
}
```
说 CNAME 的你真的是认真的么?
独立做一个 www.abc.com 的跳转到 abc.com
server {
listen 80;
server_name abc.com www.abc.com;
return 301 https://abc.com$request_uri;
}
server {
listen 443 ssl;
server_name www.abc.com;
ssl_certificate ***;
ssl_certificate_key ***;
*****
return 301 xxxxxxxxxx;
}
server {
listen 443 ssl;
server_name abc.com;
ssl_certificate ***;
ssl_certificate_key ***;
*****
}
大概就是这个样子了...
if host name = www.xx 啊,等下贴配置
if ($host = www.prinzeugen.net) {
rewrite ^/(.*)$ $scheme://prinzeugen.net/$1 permanent;
}
放 443 server 块里
虽然我之前也是这样写的...
https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/#server-name-if
应该是显性 DNS 转发吧,相当于直接 301 转发。 cnname 是解析到 ip 上
在 www 的 server 块里加上完整的 ssl 配置成功了。。。
表示我是借助 if 实现的:人访问强制 301 到 https ,蜘蛛访问强制 302 到 http
try_files 在 core_module,if 在 rewrite_module 。并不是特别需要在意
https 301 先验证证书可信否 可信才会跳转 因此单独写一个 server
这两天刚好也在弄这个,但是在做 ssl 检测的时候不知道为什么会出很多问题,评分只有 C ,最后还是只做了 2 个 serve , 80 的 301 重定向,以及主 server 监听 443 ,回到 A+。
这不是最基本的 nginx 配置吗,上面你们在干嘛。。
@shyling
咱只配了 HSTS ,发起 HTTP 仍然正常返回内容,但是包含 HSTS 头。
识别出 HSTS 的浏览器 /蜘蛛,自己就转 HTTPS 了。
不支持的继续 HTTP 也正常
> 第一个 server 内加 listen 443 ssl;
如果这样,对于 SSL+abc.com ,它是要第一个 server 还是第二个 server 。。。
> 搞不懂为啥两个 443 server 块合在一起就会出错。。。
有个 301 呢。。怎么能合。。合起来 https://abc.com 不就无限 301 到自身了吗。。
1L 还来了一个 CNAME 也是醉。、。、
hsts 仅仅在 https 连接时有效。我的意思是收到 http 请求里的 hsts 头会被忽视
目前咱 http 和 https 都返回了 hsts 头,查了下的确是要在 https 里返回 ORZ 。。
nginx( https) -> pass -> nginx( http)