nginx
Max Zhang Lv4

nginx 重定向将 http 重定向到 https

为什么

在部署好站点之后,一共是部署了 http 和 https 两个站点,也就是说,一共有四个链接可以访问我的站点主页,分别是:

这样的话,就会有四个链接可以访问我的站点,但是这样的话,就会有一些问题,比如说以域名做统计的话,就会统计出四个链接,但是实际上,这四个链接都是访问的同一个站点。之后就决定通过 nginx 重定向解决这个问题。

通过 nginx 做重定向

在 nginx 的配置文件中,找到站点的配置文件,然后在 server 配置块中添加如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 重定向 http 到 https
server {
listen 80;
listen [::]:80;
server_name hdbook.top www.hdbook.top;
rewrite ^(.*)$ https://hdbook.top$1 permanent;
}

# 重定向 www.hdbook.top 到非 hdbook.top
server {
listen 443 ssl;
server_name www.hdbook.top;

ssl_certificate "ssl_certificate_path";
ssl_certificate_key "certificate_key_path";

return 301 https://hdbook.top$request_uri;
}

rewrite 和 return 301 都可以实现重定向,但是有一些区别:

  • rewrite 指令会修改请求的 URL,并继续在 Nginx 配置中匹配其他指令。
  • return 301 指令会发送一个 301 永久重定向响应给客户端,并立即结束请求处理,不再继续匹配其他指令。

如果只是简单的重定向,使用 return 301 更加合适。但要想在重定向的过程做更复杂的操作,比如说用正则表达式来修改 URL,那么就需要使用 rewrite

重启 nginx

修改完配置文件之后,需要重启 nginx 使配置生效(nginx 是支持热启动,直接做 reload 就可以):

1
nginx -s reload

之后你不论访问哪个链接,都会被重定向到 https://hdbook.top

 评论
评论插件加载失败
正在加载评论插件