![使用 nginx 将主站点流量从非 www 路由到 www,同时保持子域名处于活动状态](https://linux22.com/image/741125/%E4%BD%BF%E7%94%A8%20nginx%20%E5%B0%86%E4%B8%BB%E7%AB%99%E7%82%B9%E6%B5%81%E9%87%8F%E4%BB%8E%E9%9D%9E%20www%20%E8%B7%AF%E7%94%B1%E5%88%B0%20www%EF%BC%8C%E5%90%8C%E6%97%B6%E4%BF%9D%E6%8C%81%E5%AD%90%E5%9F%9F%E5%90%8D%E5%A4%84%E4%BA%8E%E6%B4%BB%E5%8A%A8%E7%8A%B6%E6%80%81.png)
我的网站所需的 nginx 配置功能如下。
- 所有到主站点的流量
example.com
都应重定向至https://www.example.com
。所有non-www
到基础域的流量都应重写为www
。 - 所有现有的子域名都需要为我的企业客户保持活动状态并路由到 https(
nike.example.com
例如https://nike.example.com
)
在我当前的配置中,唯一不起作用的情况是当我https://example.com
在浏览器中输入时,浏览器会显示您的连接不是私人页面表示该网站不安全。我知道下面的配置不涵盖这种情况,但我不知道如何在不关闭所有子域的情况下解决问题。
我怎样才能修改此配置文件以涵盖上述所有情况?
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/website;
index index.html;
server_name www.example.com;
server_tokens off;
if ($http_x_forward_proto = 'http') {
return 301 https://$host$request_uri;
}
location / {
try_files $uri$args $uri$args/ /index.html =404;
}
}
答案1
您可以设置额外的虚拟主机,仅提供 example.com 服务,即:
server {
listen 80;
server_name example.com;
return 301 https://www.example.com$request_uri;
}
此外,如果您想使用 tls(https)进行重定向,那么您必须设置虚拟主机并拥有涵盖 example.com 和 www.example.com 域的证书。