【问题标题】:Nginx: Automatic sub-domain creation if a folder existsNginx:如果存在文件夹,则自动创建子域
【发布时间】:2014-10-19 01:39:43
【问题描述】:

我有这个文件夹:/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;
}

【问题讨论】:

  • 目录不存在时是否重定向?
  • 不,每当我输入随机或正确的文件夹名称时,我总是得到“找不到服务器”。
  • 当我尝试访问 asdf.ilundev.no 时出现 DNS 查找错误。也许这是一个 GitLab 问题?
  • 我在域指向的服务器上安装了 GitLab……但你是怎么发现的? :D 测试禁用 GitLab nginx 块...
  • 猜测您的 DNS 区域是罪魁祸首;需要使用适当的通配符进行设置,但我在该领域没有专业知识。

标签: nginx dns subdomain directory subdirectory


【解决方案1】:

我成功了! 先说第一件事。我的配置有错误。

线

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

错了,应该是

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

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


更新和优化配置:

只要您的域提供商的 DNS 使用“A”选项在您的域的子域中正确设置“*.dev” - 以及您的服务器的 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 代码。

【讨论】:

    【解决方案2】:
    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;
        }
    }
    

    【讨论】:

    • 注意到一个问题 - error_log 中不允许使用变量,因此分支不会被实际值替换 :)
    猜你喜欢
    • 1970-01-01
    • 2014-09-07
    • 2011-01-19
    • 2017-06-28
    • 2020-07-12
    • 2018-02-10
    • 2013-09-18
    • 2011-02-19
    相关资源
    最近更新 更多