FreeBSD环境下Nginx子域名301重定向的最佳实践咨询
FreeBSD环境下Nginx子域名301重定向的最佳实践咨询
嘿,我来帮你捋捋这两种重定向方案的区别,以及哪种更适合你的场景~
首先看你当前用的第一个方案:
- 这是精准匹配的思路,只对明确列出的
example.net、www.example.net、www.sub.example.net这三个域名做301重定向,优点是可控性极强,完全不会干扰服务器上可能存在的其他域名配置(如果之后你要新增站点的话),逻辑清晰,维护起来也不容易出错。 - 对应的配置代码:
server { listen 80; server_name example.net www.example.net www.sub.example.net; return 301 $scheme://sub.example.net/$request_uri; }
再说说你提到的通配符/默认server方案:
- 这个方案是把所有没匹配到其他
server块的请求都重定向到sub.example.net,好处是省事,不管之后新增多少相关子域名都不用改这个配置,但缺点也很明显:如果之后你想在同一台服务器上部署其他完全无关的域名服务,这个默认server会把那些请求也一并重定向,很容易踩坑;另外,针对服务器IP的恶意请求也会被重定向,虽然影响不大,但不够精准。 - 对应的配置代码:
server { listen 80 default_server; server_name _; return 301 $scheme://sub.example.net/$request_uri; }
我的建议
如果你的服务器只打算服务sub.example.net这一个站点,并且短期内不会新增其他域名,那默认server方案也能用,但我更推荐精准匹配的思路。要是你想兼顾精准性和扩展性,还可以用通配符域名来简化配置,比如:
server { listen 80; server_name example.net *.example.net; return 301 $scheme://sub.example.net/$request_uri; }
这样既覆盖了主域名example.net,也覆盖了所有以.example.net结尾的子域名(包括你提到的那几个,甚至未来可能新增的其他子域名),同时不会影响完全无关的域名配置,算是个折中的好方案。
备注:内容来源于stack exchange,提问作者MonocleRB
相关产品推荐
相关产品推荐

