Nginx différents domaines sur la même adresse IP

127

Je voudrais héberger 2 domaines différents sur le même serveur en utilisant nginx. J'ai redirigé les deux domaines vers cet hôte via @ property. Bien que je configure 2 blocs de serveurs différents, chaque fois que j'essaye d'accéder au deuxième domaine, il redirige vers le premier.

Voici ma config.

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

Comment puis-je réparer cela? Merci.

Berkayk
la source

Réponses:

163

Vos directives "écouter" sont fausses. Consultez cette page: http://nginx.org/en/docs/http/server_names.html .

Ils devraient être

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

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

Remarque, je n'ai inclus que les lignes pertinentes. Tout le reste avait l'air correct mais je l'ai simplement supprimé pour plus de clarté. Pour le tester, vous pouvez essayer de servir un fichier texte à partir de chaque serveur avant de servir réellement php. C'est pourquoi j'ai laissé la directive «racine» là-dedans.

aychédée
la source
9
Cela a résolu le problème pour moi. Le problème semble avoir été que dans mes deux server {}blocs, les directives sever_name étaient des caractères génériques: .domain1.comet .domain2.com. Les changer en server_name www.domain1.com domain1.com;et a server_name www.domain2.com domain2.com;maintenant la page correcte pour chaque site qui s'affiche lorsque ces adresses sont utilisées.
Steve HHH
4
Je sais que cela fait remonter un commentaire ancien. Mais je suppose que ces deux blocs de serveur pourraient être dans des fichiers de configuration séparés dans les sites activés /?
labarna
3
Absolument, cela dépend de la manière dont vous souhaitez structurer votre configuration. J'ai tendance à avoir un fichier par domaine réel. Chacun d'entre eux peut contenir plusieurs blocs de serveur.
aychedee
5
Vous ne voulez VRAIMENT pas faire ça. Choisissez www.domain.com ou domain.com et redirigez l'un vers l'autre. Avoir le même contenu à deux adresses différentes est considéré comme du spam et peut fortement nuire à votre classement dans les recherches.
aychedee
4
Vous pouvez également simplement utiliser .domain.com. C'est un joker nginx spécial qui correspond à domain.comet *.domain.com. Voir: nginx.org/en/docs/http/server_names.html
aychedee