Eu tenho a seguinte configuração:
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.