web-dev-qa-db-ja.com

Nginx vhostを使用したserver_nameの正規表現

Nginxでやろうとしていることがあります。数人のユーザーとサブドメインがあり、各ユーザーが/home/dev/sites/USER_IDにディレクトリを持っているとします。 USER_ID.dev.example.comがそのディレクトリを指すようにしたいと思います。

次のようにvhostファイルを作成してみました。

server {
    listen   80;
    server_name ~^(?<site_id>)$.dev.example.com;
    root   /home/dev/sites/$site_id;
    index  index.php;

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

    location ~ \.php$ {
        try_files $uri =404;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_index   index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

ただし、発生しているのは、私が持っているPhpMyAdminインストールが表示されていることだけです(明らかに、別の仮想ホストがそこにポイントしています)。誰かが私が間違っていることを教えてもらえますか?それはただの正規表現だと感じていますが、よくわかりません。

5
SharkofMirkwood

$が文字列の途中にあるため、その式は一致しません。試してください:

server_name ~^(?<site_id>.+)\.dev\.example\.com$;
11
Shane Madden