如何通过 nginx 只允许 www 域名访问并禁止裸域名访问
在网站管理中,很多时候我们希望用户只能通过带有 www
的域名访问,而对于裸域名(即没有 www
前缀的域名)则禁止访问或进行重定向。这可以通过修改 nginx(或 tengine)的服务器配置来实现。本文将介绍如何配置 nginx,以实现用户只能通过 www
访问网站,而禁止或重定向裸域名。
步骤 1:配置 nginx 处理 www 域名
首先,我们在 nginx 中为 www
域名创建一个虚拟主机,确保所有通过 www.zhanmeng.net
的请求都指向网站的正确目录。具体配置如下:
server { listen 80; server_name www.test.net; root /var/www/test; index index.html index.php; location / { try_files $uri $uri/ =404; } }
这个配置告诉 nginx,所有 www.zhanmeng.net
的请求将指向网站根目录 /var/www/zhanmeng
,并尝试加载 index.html
或 index.php
文件。
步骤 2:禁止裸域名访问
为了禁止用户通过裸域名 zhanmeng.net
访问,我们可以创建一个独立的虚拟主机,并使用 nginx 的 return 444
指令。这会让 nginx 立即关闭连接,不返回任何内容,从而禁止访问。
server { listen 80; server_name test.net; return 444; }
这种方式非常直接,用户尝试访问 zhanmeng.net
时将看到连接被拒绝的提示。
步骤 3:重定向裸域名到 www 域名(可选)
如果你希望访问 zhanmeng.net
的用户自动重定向到 www.zhanmeng.net
,可以修改配置使用 301
重定向。这样,所有对裸域名的请求都会被引导到带 www
的域名。
server { listen 80; server_name test.net; return 301 http://www.test.net$request_uri; }
这种方式不仅可以保留用户请求的路径(例如 zhanmeng.net/about
会重定向到 www.zhanmeng.net/about
),还对 seo 更加友好。
步骤 4:重启 nginx 应用配置
完成配置后,记得重启 nginx 服务器,使更改生效:
sudo systemctl restart nginx
总结
通过修改 nginx 配置,我们可以轻松实现用户只能通过 www
域名访问,而直接访问裸域名时禁止访问或自动重定向到 www
。这不仅提升了网站的品牌统一性,还能改善用户体验和 seo 效果。