Nginx verschiedene Domänen auf derselben IP

127

Ich möchte mit nginx 2 verschiedene Domains auf demselben Server hosten. Ich habe beide Domains über @ property auf diesen Host umgeleitet. Obwohl ich zwei verschiedene Serverblöcke konfiguriere, wird bei jedem Versuch, auf die zweite Domäne zuzugreifen, auf die erste umgeleitet.

Hier ist meine Konfiguration.

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

Wie kann ich das beheben? Vielen Dank.

berkayk
quelle

Antworten:

163

Ihre "Listen" -Anweisungen sind falsch. Siehe diese Seite: http://nginx.org/en/docs/http/server_names.html .

Sie sollten sein

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

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

Beachten Sie, dass ich nur die relevanten Zeilen eingefügt habe. Alles andere sah in Ordnung aus, aber ich habe es aus Gründen der Klarheit nur gelöscht. Um es zu testen, sollten Sie versuchen, zuerst eine Textdatei von jedem Server bereitzustellen, bevor Sie PHP tatsächlich bereitstellen. Deshalb habe ich dort die 'root'-Direktive belassen.

Aychedee
quelle
9
Das hat es für mich behoben. Das Problem scheint gewesen zu sein, dass in beiden meiner server {}Blöcke die Direktiven Sever_Name Platzhalter waren: .domain1.comund .domain2.com. Ändern sie server_name www.domain1.com domain1.com;und server_name www.domain2.com domain2.com;hat jetzt die richtige Seite für jede Website angezeigt wird, wenn diese Adressen verwendet werden.
Steve HHH
4
Ich weiß, dass dies einen alten Kommentar ausgräbt. Ich gehe jedoch davon aus, dass sich diese beiden Serverblöcke in separaten Konfigurationsdateien in sites-enabled /? Befinden könnten.
Labarna
3
Es kommt nur darauf an, wie Sie Ihre Konfiguration strukturieren möchten. Ich neige dazu, eine Datei pro realer Domain zu haben. Jeder von ihnen kann mehrere Serverblöcke enthalten.
Aychedee
5
Das willst du WIRKLICH nicht. Wählen Sie entweder www.domain.com oder domain.com und leiten Sie eine zur anderen um. Der gleiche Inhalt an zwei verschiedenen Adressen wird als Spam angesehen und kann Ihr Suchranking stark beschädigen.
Aychedee
4
Sie können auch einfach verwenden .domain.com. Es ist ein spezieller Nginx-Platzhalter, der mit domain.comund übereinstimmt *.domain.com. Siehe: nginx.org/en/docs/http/server_names.html
Aychedee