
Tengo la siguiente configuración:
- Nginx con dos hosts virtuales
- dos subdominios: sub1.dominio.com y sub2.dominio.com
sub1.domain.com
está funcionando bien. Si entro, sub2.domain.com
el navegador devuelve un 403. He configurado los directorios configurados para ambos dominios para que sean propiedad de www-data
( chown -R www-data:www-data /var/www/
).
Una mirada a los registros de errores revela que /var/log/nginx/sub2.domain.com/error.log
está vacío mientras que /var/log/nginx/sub1.domain.com/error.log
contiene
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"
¿Alguien sabe por qué el servidor incluye sub1.domain.com
incluso si he ingresado sub2.domain.com
en el navegador?
Creo que el problema podría ser que sub2.domain.com
siempre parece ejecutar la configuración de sub1.domain.com
(que es default_server
). Según los documentos de nginx:
Si su valor no coincide con ningún nombre de servidor, o la solicitud no contiene este campo de encabezado, nginx enrutará la solicitud al servidor predeterminado para este puerto.
Configuración 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;
}
}
Configuración 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;
}
}
He seguido el tutorial aquí.https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-server-blocks-virtual-hosts-on-ubuntu-14-04-ltsy configurar los enlaces simbólicos. Entonces /etc/nginx/sites-available
contiene la configuración y /etc/nginx/sites-enabled
contiene los enlaces simbólicos en esas configuraciones.
También tenga en cuenta que eso sub1.domain.com
sirve un backend php, mientras que sub2.domain.com
debería servir algo de contenido estático (aplicación de una sola página) y dirigir las solicitudes de API a un backend de 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
Mi nginx.conf
archivo contiene include /etc/nginx/sites-enabled/*;
. Entonces, se deben incluir las configuraciones que publiqué anteriormente. Al menos nginx -t
arroja un error si una de las configuraciones tiene un error.
Edición 2: tl;dr (resumen de comentarios): el DNS estaba mal configurado. Establecer el registro correcto A
para ambos subdominios resolvió el problema. La configuración de nginx funciona como se esperaba.