Symfony 4 动态子域路由和 Nginx 配置

Symfony 4 Dynamic Subdomain Routing and Nginx Config

我想在我的 Symfony 4 应用程序中处理动态子域。

我正在寻找这样的配置:

我正在尝试此代码但无法正常工作。它始终与 HomeController 匹配。 StoreController 从不匹配。

当我尝试此配置时 "domain.com" 请求向我显示 "Welcome to nginx!" 页面。

class StoreController extends AbstractController
{
    /**
     * @Route("/", name="store_home", host="{store_name}.domain.test")
     */
    public function storeHomepage()
    {
        return $this->render('store/index.html.twig');
    }
}

class HomeController extends AbstractController
{
    /**
     * @Route("/", name="site_home")
     */
    public function homePage()
    {
        return $this->render('site/home/index.html.twig');
    }
}

这是我的 nginx 配置:

server {
    listen       80;
    server_name  *.domain.test;
    root       /site/root/public;

    location config bla bla bla;
}

I'm trying this code but is not working. Its always match with HomeController. StoreController never matching.

您正在使用注释路由,因此路由按字母顺序加载。

首先会尝试您的家庭控制器,它会匹配,因为您没有对其设置任何限制。

尝试明确设置主机。

class HomeController extends AbstractController
{
    /**
     * @Route("/", name="site_home", host="domain.test")
     */
    public function homePage()
    {
        return $this->render('site/home/index.html.twig');
    }
}

And when I try this configuration "domain.com" request show to me "Welcome to nginx!" page.

我不是真正的 nginx 专家,但我认为 server_name *.domain.test; 表示所有子域,但不包括主域。试试 server_name .domain.test;

在 NGINX 配置中,您可以指定多个 server_name,例如: server_name example.org www.example.org;

这应该适合你:

server {
    listen       80;
    server_name  *.domain.test domain.test;
    root       /site/root/public;

    location config bla bla bla;
}

http://nginx.org/en/docs/http/server_names.html