Mostra um 404 para subdomínios não encontrados em vez de mostrar o conteúdo do domínio raiz

1

Estou usando o nginx. O que estou tentando alcançar:

  • Um domínio raiz domain.com que obtém conteúdo de /var/www/domain.com
  • Um subdomínio sub.domain.com , que obtém o conteúdo de /var/www/sub.domain.com
  • Qualquer outro subdomínio *.domain.com (onde * ! = sub ) deve receber o conteúdo de /var/www/404

Se isso não estiver claro: é semelhante à configuração do StackEchange, em que o link fornece um erro 404.

Eu consegui o primeiro usando dois blocos de servidores com diferentes server_name s. No entanto, como posso configurar o nginx para vincular a /var/www/404 quando nenhum bloco de servidor correspondente ao subdomínio for encontrado?

Com uma configuração básica, todos os subdomínios que não são encontrados retornam o mesmo conteúdo que o domínio raiz.

Gostaria de tornar isso genérico, para que, se eu adicionar outro bloco de servidor para sub2.domain.com , não precise alterar o bloqueio para o 404.

O código que estou usando agora:

server {
    listen 80;
    server_name domain.com;
    root /var/www/domain.com;
    charset utf-8;

    location / {
        index index.php index.html;
        autoindex on;
    }

    location ~ \.php$ {
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_index   index.php;
        fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include         fastcgi_params;
    }
}

server {
    listen 80;
    server_name sub.domain.com;
    root /var/www/sub.domain.com;
    charset utf-8;

    location / {
        index index.php index.html;
        autoindex on;
    }

    location ~ \.php$ {
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_index   index.php;
        fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include         fastcgi_params;
    }
}
    
por Keelan 23.05.2013 / 10:59

1 resposta

5

O Nginx, como o Apache, sempre usará seu primeiro domínio na lista de configuração como padrão. No seu caso, isso significa que, para qualquer domínio que não tenha sua própria configuração, ele escolherá a configuração de domain.com, já que é a primeira.

Portanto, a solução é simplesmente configurar outro domínio que contenha apenas uma página 404 e que seja o primeiro domínio listado. Você pode adicionar quantos domínios específicos desejar; o primeiro só será usado quando não houver outro nome de domínio correspondente no arquivo de configuração.

    
por 23.05.2013 / 17:58