Różne domeny Nginx na tym samym adresie IP

127

Chciałbym hostować 2 różne domeny na tym samym serwerze przy użyciu nginx. Przekierowałem obie domeny do tego hosta przez @ property. Chociaż konfiguruję 2 różne bloki serwerów, za każdym razem, gdy próbuję uzyskać dostęp do drugiej domeny, przekierowuje do pierwszej.

Oto moja konfiguracja.

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

Jak mogę to naprawić? Dzięki.

berkayk
źródło

Odpowiedzi:

163

Twoje dyrektywy „słuchania” są błędne. Zobacz tę stronę: http://nginx.org/en/docs/http/server_names.html .

Powinny być

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

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

Uwaga, zamieściłem tylko odpowiednie wiersze. Wszystko inne wyglądało dobrze, ale dla jasności usunąłem to. Aby to przetestować, możesz spróbować najpierw udostępnić plik tekstowy z każdego serwera, zanim faktycznie udostępnisz php. Dlatego zostawiłem tam dyrektywę „root”.

aychedee
źródło
9
To naprawiło to dla mnie. Wydaje się, że problem polegał na tym, że w obu moich server {}blokach dyrektywy sever_name były znakami wieloznacznymi: .domain1.comi .domain2.com. Zmieniając je na server_name www.domain1.com domain1.com;i server_name www.domain2.com domain2.com;teraz ma właściwą stronę dla każdej witryny wyświetlającą się, gdy te adresy są używane.
Steve HHH
4
Wiem, że to pogłębianie starożytnego komentarza. Ale zakładam, że te dwa bloki serwera mogą znajdować się w oddzielnych plikach konfiguracyjnych w witrynie /?
labarna
3
Oczywiście zależy to tylko od tego, jak chcesz zbudować konfigurację. Zwykle mam jeden plik na prawdziwą domenę. Każdy z nich może zawierać wiele bloków serwera.
aychedee
5
NAPRAWDĘ nie chcesz tego robić. Wybierz www.domain.com lub domain.com i przekieruj jedną do drugiej. Posiadanie tej samej treści pod dwoma różnymi adresami jest postrzegane jako spam i może poważnie obniżyć ranking wyszukiwania.
aychedee
4
Możesz też po prostu użyć .domain.com. Jest to specjalna karta wieloznaczna nginx, która pasuje do domain.comi *.domain.com. Zobacz: nginx.org/en/docs/http/server_names.html
aychedee