我想在我的nginx服务器(ubuntu 14.04)上托管几个域名,每个域名都有子域:

home/serve/
     domain1.com
        www
        subdomain1
        subdomain2
     domain2.com
        www
        subdomain1
        subdomain2

我希望www.domain1.com和domain1.com都根目录到/home/service/domain1/www,subdomain1.domain1.com都根目录到/home/service/domain1/subdomain1。
我有这个工作的领域都有和没有www(见下文),但我不知道如何扩展它,以启用子域生根以及。
server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    server_name   ~^(www\.)?(?<domain>.+)$;

    root       /home/serve/$domain/www/;

    location / {
        index index.html index.htm index.php;
    }

    location ~ [^/]\.php(/|$) {
      fastcgi_split_path_info ^(.+?\.php)(/.*)$;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_pass unix:/var/run/php5-fpm.sock;
      fastcgi_index index.php;
      include fastcgi_params;
    }
}

最佳答案

您可以将正则表达式扩展到包括任何子域,而不只是WWW。此外,如果请求的子域的文件夹不存在,设置默认文件夹将是一个好主意。
像这样的东西应该很管用:

server_name ~^(?<subdomain>\w*?)?\.?(?<domain>\w+\.\w+)$;

if ($subdomain = "") {
    set $subdomain "www";
}

if (!-d "/home/serve/$domain/$subdomain") {
    set $subdomain "www";
}

root "/home/serve/$domain/$subdomain";

注意,尽管使用“if”指令通常是不可取的,但在这种特殊情况下,它是完全安全和可接受的,因为这些指令是在服务器上下文中定义的。

关于linux - 如何在nginx配置中通过域和子域动态生根,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27487499/

10-11 06:37