Nginx diferentes dominios en la misma IP

127

Me gustaría alojar 2 dominios diferentes en el mismo servidor usando nginx. Redirigí ambos dominios a este host a través de @ property. Aunque configuro 2 bloques de servidor diferentes, cada vez que intento acceder al segundo dominio, redirige al primero.

Aquí está mi configuración.

server {
    listen      www.domain1.com:80;
    access_log  /var/log/nginx/host.domain1.access.log  main;
    root /var/www/domain1;
    server_name www.domain1.com;

    location ~ \.php$ {
        # Security: must set cgi.fixpathinfo to 0 in php.ini!
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME         $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        include /etc/nginx/fastcgi_params;
    }
}

server {
    listen       www.domain2.com:80;
    access_log  /var/log/nginx/host.domain2.access.log  main;
    root /var/www/domain2;
    server_name www.domain2.com;

    location ~ \.php$ {
        # Security: must set cgi.fixpathinfo to 0 in php.ini!
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME         $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        include /etc/nginx/fastcgi_params;
    }
}

¿Cómo puedo arreglar esto? Gracias.

berkayk
fuente

Respuestas:

163

Sus directivas de "escuchar" están equivocadas. Vea esta página: http://nginx.org/en/docs/http/server_names.html .

Ellos deberían ser

server {
    listen      80;
    server_name www.domain1.com;
    root /var/www/domain1;
}

server {
    listen       80;
    server_name www.domain2.com;
    root /var/www/domain2;
}

Tenga en cuenta que solo he incluido las líneas relevantes. Todo lo demás se veía bien, pero lo eliminé para mayor claridad. Para probarlo, puede intentar servir un archivo de texto de cada servidor primero antes de servir php. Es por eso que dejé la directiva 'raíz' allí.

aychedee
fuente
9
Esto me lo arregló. El problema parece haber sido que en mis dos server {}bloques, las directivas sever_name eran comodines: .domain1.comy .domain2.com. Cambiarlos a server_name www.domain1.com domain1.com;y server_name www.domain2.com domain2.com;ahora tiene la página correcta para cada sitio que se muestra cuando se usan esas direcciones.
Steve HHH
44
Sé que esto está desenterrando un comentario antiguo. Pero supongo que estos dos bloques de servidor podrían estar en archivos de configuración separados en sitios habilitados /?
labarna
3
Absolutamente, solo depende de cómo quieras estructurar tu configuración. Tiendo a tener un archivo por dominio real. Cada uno de los cuales puede contener múltiples bloques de servidor.
aychedee
55
REALMENTE no quieres hacer eso. Elija www.domain.com o domain.com y redirija uno al otro. Tener el mismo contenido en dos direcciones diferentes se considera spam y puede dañar gravemente su clasificación de búsqueda.
Aychedee 01 de
44
También puedes usarlo .domain.com. Es un comodín nginx especial que coincide domain.comy *.domain.com. Ver: nginx.org/en/docs/http/server_names.html
aychedee