Nginx dois hosts virtuais com subdomínios sempre direcionam para default_server

1

Eu tenho a seguinte configuração:

  • Nginx com dois hosts virtuais
  • dois subdomínios: sub1.domain.com e sub2.domain.com

sub1.domain.com está funcionando bem. Se eu inserir sub2.domain.com , o navegador retornará um 403. Eu configurei os diretórios configurados para os dois domínios para serem de propriedade de www-data ( chown -R www-data:www-data /var/www/ ).

Uma olhada nos registros de erros revela que /var/log/nginx/sub2.domain.com/error.log está vazio, enquanto /var/log/nginx/sub1.domain.com/error.log contém

2018/03/09 11:29:00 [error] 19024#0: *13009 directory index of "/var/www/sub1.domain.com" is forbidden, client: ip, server: sub1.domain.com, request: "GET / HTTP/1.1", host: "my-host"

Alguém sabe por que o servidor inclui sub1.domain.com , mesmo se eu inseri sub2.domain.com no navegador?!

Acho que o problema pode ser que sub2.domain.com sempre parece executar a configuração de sub1.domain.com (que é o default_server ). De acordo com os documentos do nginx:

If its value does not match any server name, or the request does not contain this header field at all, then nginx will route the request to the default server for this port.

Configuração de Nginx para sub1.domain.com

server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        root /var/www/sub1.domain.com;
        index index.php index.html index.htm;

        server_name sub1.domain.com;

        access_log      /var/log/nginx/sub1.domain.com/access.log;
        error_log       /var/log/nginx/sub1.domain.com/error.log;

        location / {
                try_files $uri $uri/ =404;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        location ~ /\.ht {
                deny all;
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ \.php$ {
                try_files $uri =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;
                fastcgi_param AUTH_SECRET "my-secret";
                include fastcgi_params;
        }

}

Configuração de Nginx para sub2.domain.com

upstream backend{
        server 127.0.0.1:3000;
}

server {
        listen 80;
        listen [::]:80;

        access_log      /var/log/nginx/sub2.domain.com/access.log;
        error_log       /var/log/nginx/sub2.domain.com/error.log;

        root    /var/www/sub2.domain.com;

        server_name sub2.domain.com;

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        location ~ /\.ht {
                deny all;
        }

        # route /api requests to backend
        location /api/v1 {
                proxy_pass              http://backend;
                proxy_http_version      1.1;
                proxy_redirect          off;
                proxy_set_header Upgrade        $http_upgrade;
                proxy_set_header Connection     "upgrade";
                proxy_set_header Host           $http_host;
                proxy_set_header X-Scheme       $scheme;
                proxy_set_header X-Real-IP      $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-NginX-Proxy  true;
        }

        location / {
                try_files $uri $uri/ /index.html =404;
        }
}

Eu segui o tutorial aqui link e configure os links sym. Então /etc/nginx/sites-available contém a configuração e /etc/nginx/sites-enabled contém os links sym nessas configurações.

Observe também que sub1.domain.com serve um backend php, enquanto sub2.domain.com deve servir algum conteúdo estático (aplicativo de página única) e direcionar as solicitações de API para um backend do Node.js.

Editar:

nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Meu arquivo nginx.conf contém include /etc/nginx/sites-enabled/*; . Então as configurações, que eu postei acima, devem ser incluídas. Pelo menos nginx -t gera um erro se uma das configurações tiver um erro.

Editar 2: tl; dr (resumo dos comentários): o DNS foi mal configurado. A configuração do registro A correto para ambos os subdomínios resolveu o problema. A configuração do nginx está funcionando como esperado.

    
por Philipp 09.03.2018 / 11:49

0 respostas