Nginx:如果存在文件夹,则自动创建子域

时间:2014-08-25 20:24:55

标签: nginx dns subdomain directory subdirectory

我有这个文件夹:/ home / sites / dev / 如果我访问“domain.com”

,Nginx会提供此文件夹的内容

但是,假设我在此文件夹中创建了一个文件夹,例如“wp-test”,如果我访问“wp-test.domain.com”,我希望nginx能够提供此文件夹

似乎“ianc”让它在他的blog post上工作,但我无法让它工作。

到目前为止,这是我的配置nginx:

server {
    listen  80;
    server_name www.ilundev.no;
    root /home/sites/dev;
}

server {
    listen  80;
    server_name   ~^(.*)\.ilundev\.no$;

    if (!-d /home/sites/dev/ilundev.no/public/$1) {
        rewrite . http://www.ilundev.no/ redirect;
    }

    root /home/sites/dev/$1;

}

server {
    listen 80;
    server_name ilundev.no;
    rewrite ^/(.*) http://www.ilundev.no/$1 permanent;
}

2 个答案:

答案 0 :(得分:2)

我做到了! 首先是第一件事。我的配置中出错了。

该行

if (!-d /home/sites/dev/ilundev.no/public/$1) {

错了,应该是

if (!-d /home/sites/dev/$1) {

而且,我必须在我的域名提供商处为我的域设置一个通配符条目。 条目看起来像" * .ilundev.no"我使用了" A"选项 - 它有效!


更新并优化了配置:

只要您的域名提供商的DNS正确设置" * .dev"在您的域的子域中,使用" A"选项 - 以及服务器的IP。

server {
    listen 80;
    server_name dev.ilun.no www.dev.ilun.no;
    root /home/sites/dev;
}

server {
    listen 80;
    server_name   ~^(.*)\.dev.ilun\.no$;
    if (!-d /home/sites/dev/$1) {
        rewrite . http://dev.ilun.no/ redirect;
    }
    root /home/sites/dev/$1;
}

然而,现在我一直试图让服务器在这样的子域中运行php代码。

答案 1 :(得分:0)

server {
    listen 80;
    server_name ~^(?<branch>.*)\.example\.com;
    root /var/www/$branch/public;   

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_log  /var/log/nginx/$branch.example.com.error.log error;

    sendfile off;

    client_max_body_size 100m;

    location ~ \.php$ {
       try_files $uri /index.php =404;
       fastcgi_pass php-fpm:9000;
       fastcgi_index index.php;
       fastcgi_buffers 16 16k;
       fastcgi_buffer_size 32k;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}