Domínios diferentes do Nginx no mesmo IP

127

Eu gostaria de hospedar 2 domínios diferentes no mesmo servidor usando o nginx. Redirecionei os dois domínios para esse host via @ property. Embora eu configure 2 blocos de servidor diferentes, sempre que tento acessar o segundo domínio, ele é redirecionado para o primeiro.

Aqui está a minha configuração.

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;
    }
}

Como posso consertar isso? Obrigado.

berkayk
fonte

Respostas:

163

Suas diretivas de "escuta" estão erradas. Veja esta página: http://nginx.org/en/docs/http/server_names.html .

Eles deveriam 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;
}

Observe que incluí apenas as linhas relevantes. Todo o resto parecia bom, mas eu apenas o excluí para maior clareza. Para testá-lo, tente servir um arquivo de texto de cada servidor antes de realmente servir o php. Foi por isso que deixei a diretiva 'root' lá.

aychedee
fonte
9
Isso consertou para mim. O problema parece ter sido que, em ambos os meus server {}blocos, as diretivas sever_name eram curingas: .domain1.come .domain2.com. Alterá-los para server_name www.domain1.com domain1.com;e server_name www.domain2.com domain2.com;agora tem a página correta para cada site, exibida quando esses endereços são usados.
Steve HHH
4
Eu sei que isso está cavando um comentário antigo. Mas suponho que esses dois blocos de servidor possam estar em arquivos de configuração separados em / enabled para sites.
Labarna
3
Absolutamente, depende apenas de como você deseja estruturar sua configuração. Costumo ter um arquivo por domínio real. Cada um dos quais pode conter vários blocos de servidor.
aychedee
5
Você REALMENTE não quer fazer isso. Escolha www.domain.com ou domain.com e redirecione um para o outro. Ter o mesmo conteúdo em dois endereços diferentes é considerado spam e pode prejudicar bastante sua classificação de pesquisa.
aychedee
4
Você também pode apenas usar .domain.com. É um curinga nginx especial que corresponde a domain.come *.domain.com. Veja: nginx.org/en/docs/http/server_names.html
aychedee