Estou tentando configurar o Nginx como um servidor de teste para alguns projetos diferentes usando o Laravel / PHP. A idéia é que, sob /var/www
, terei um número variável de subdiretórios, cada um acessado no formato subdomain.example.com
.
Considere esta configuração muito simples do Nginx:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
index index.html index.htm;
server_name ~^(.*)\.example\.com$;
root /var/www/$1;
}
Eu tenho minha estrutura de diretórios configurada como:
/var/www
/subdomain1
/subdomain2
/subdomain3
Se eu acessar subdomain1.example.com
, subdomain2.example.com
ou subdomain3.example.com
, o arquivo index.html
no subdiretório relevante será exibido. Tudo perfeito até agora.
O problema surge quando tento fazer isso funcionar com arquivos PHP. Para começar, altero a diretiva de índice para index index.php
e, depois, adiciono o seguinte na diretiva server
:
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
O Nginx aceita esta configuração sem problemas. No entanto, se eu tentar acessar subdomain1.example.com
, recebo um erro 404 do Nginx, mas não há nada no registro de erros.
Se eu alterar a diretiva try_files para try_files $uri /subdomain1/index.php =404;
, ela executará o arquivo index.php
no diretório subdomain1
corretamente, mas isso obviamente anula o propósito porque quero que ele funcione como um curinga. O problema é que não tenho acesso à variável $ 1 da diretiva pai na diretiva location.
Eu sinto que devo estar perdendo algo bastante óbvio aqui. Alguém?