需求
假设现在有:
- a.host.com
- b.host.com
- c.host.com
- d.host.com
这四个子域名,已经在相应的 nginx 配置文件中开启了 HTTPS 访问(监听 443 端口和配置 server_name),但是通过http://a.host.com
访问时,因为没有监听 80 端口,会出现服务器拒绝连接的问题,那么如何解决这个问题并开启自动重定向到 443 端口呢?
解决
上述问题的思路很简单:
- 监听 80 端口,不带 server_name 选项,所以所有 http 请求都会走都这个配置中
- 通过判断
$host
是否为我们上面写出的域名,如果是就使用return
重定向到对应域名 - 条件 2. 不成立,可以设置 404 或者跳转到自定义页面
server {
if ($host = a.host.com) {
return 301 https://$host$request_uri;
}
if ($host = b.host.com) {
return 301 https://$host$request_uri;
}
listen 80;
return 301 https://a.host.com;
}
当然你也可以在如 a.host.com
的配置文件中,配置如下选项
server {
listen 80;
server_name a.host.com;
return 301 https://a.host.com;
}