Nginx 将子域名直接指向主域名

Nginx 将子域名直接指向主域名

我在 www.example.com 上托管一个 wordpress 博客,并尝试在 hexo.example.com 上做一个 hexo 项目

我将 SSL 配置放在 /etc/nginx 文件夹中的 nginx.conf 上,因为证书是通配符,我不想在两个服务器块文件中写入两次。

我有一个用于 example.com 的服务器块

server {
    listen 80;
    server_name example.com;
    return 301 https://www.example.com$request_uri;
}

server {
    listen 443 ssl default_server;
    server_name www.example.com;

    root /var/www/html/example.com;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    index index.php index.html index.htm;

    location / {
      try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ {
      access_log off;
      expires max;
    }

     location ~ /\.ht {
       deny  all;
     }

     location ~ \.php$ {
       include snippets/fastcgi-php.conf;
       fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
    }

}

该服务器块将把 example.com 和 www.example.com 定向到https://www.example.com而且效果非常好。

对于其他服务器块 hexo.example.com

server {
    listen 80;
    server_name hexo.example.com;

    root /var/www/html/hexo.example.com;

    location / {
        try_files $uri $uri/ =404;
    }
}

hexo.example.com 将被定向到主域名 www.example.com。

有人能给我一些建议我该做什么吗?

谢谢。

答案1

最简单的方法就是写两次。

可以采用某种配置技巧来避免编写两次,但编写两次会复杂得多。如果这种技巧可以实现的话。

答案2

我将 SSL 配置放在 /etc/nginx 文件夹中的 nginx.conf 上,因为证书是通配符,我不想在两个服务器块文件中写入两次。

使用include指示。

  1. 为您的 ssl 配置创建一个配置文件。

    -- ssl.conf
    
    ssl_certificate /path/to/your/certificate.pem;
    ssl_certificate_key /path/to/your/certificate.key;
    ...snip...
    ssl_trusted_certificate /path/to/your/trust-chain.pem;
    
  2. 将配置文件包含在虚拟主机配置中。

    server {
        listen 80;
        server_name example.com;
    
        location / {
            access_log off;
            return 301 https://www.example.com$request_uri;
        }
    }
    
    server {
        listen 443 ssl;
        server_name www.example.com;
    
        ## put your SSL config file path you made earlier here
        include /path/to/ssl.conf;
    
        ... snip ...
    }
    
    server {
        listen 443 ssl;
        server_name hexo.example.com;
    
        ## again, put your SSL config file path here.
        include /path/to/ssl.conf;
    
        ... snip ...
    }
    

hexo.example.com 将被定向到主域名 www.example.com。

不会。如果你需要重定向,那么只需重定向即可,例如

server {
    listen 80;
    server_name hexo.example.com;

    location / {
        access_log off;
        return 301 https://www.example.com;
    }
}

相关内容