将Apache VirtualHost转换为动态子域的nginx服务器块

时间:2015-06-08 08:30:58

标签: apache dynamic nginx vhosts

我在Apache上运行了一个Web应用程序,其中虚拟主机文件配置为将子域的请求路由到特定文件夹。这不是每次创建子域时都必须修改主机文件,而是允许我动态地将URL路由到相关文件夹(如果文件夹不存在,则可以使用该文件夹) -

<VirtualHost *:8080>
    ServerName localhost.com
    ServerAlias *.localhost.com
    VirtualDocumentRoot "/var/www/clients/%1"
    ErrorLog "logs\errors.log"
    <directory "/var/www/clients/%1">
        Options Indexes FollowSymLinks
        AllowOverride all
        Order Deny,Allow
        Deny from all
        Allow from all
    </directory>
</VirtualHost>

我正在尝试将上述内容转换为nginx,但无法找到从URL中提取子域的正确逻辑,然后在配置文件中设置root变量。

如果server {}路径不存在,任何人都可以帮我编写nginx的root块以及一个catch-all块吗?

1 个答案:

答案 0 :(得分:1)

在server_name中使用命名的regex捕获,稍后可以参考。

server {
    listen 8080;
    server_name ~^(?<subdir>.*)\.localhost\.com$ ;

    set $rootdir "/var/www/clients";
    if ( -d "/var/www/clients/${subdir}" ) { set $rootdir "/var/www/clients/${subdir}"; }
    root $rootdir;
}

您正在做的是将默认根目录设置为变量$rootdir,然后在$subdir设置的子目录存在时覆盖它。