Nginx Domain Berbeda pada IP yang Sama

127

Saya ingin meng-host 2 domain berbeda di server yang sama menggunakan nginx. Saya mengalihkan kedua domain ke host ini melalui @ property. Meskipun saya mengonfigurasi 2 blok server yang berbeda, setiap kali saya mencoba mengakses domain kedua, domain tersebut dialihkan ke yang pertama.

Ini konfigurasi saya.

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

Bagaimana cara memperbaikinya? Terima kasih.

berkayk
sumber

Jawaban:

163

Arahan "dengarkan" Anda salah. Lihat halaman ini: http://nginx.org/en/docs/http/server_names.html .

Mereka seharusnya

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

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

Catatan, saya hanya menyertakan baris yang relevan. Segala sesuatu yang lain tampak baik-baik saja tetapi saya baru saja menghapusnya untuk kejelasan. Untuk mengujinya, Anda mungkin ingin mencoba menyajikan file teks dari setiap server terlebih dahulu sebelum benar-benar melayani php. Itu sebabnya saya meninggalkan arahan 'root' di sana.

aychedee
sumber
9
Ini memperbaikinya untuk saya. Masalahnya tampaknya di kedua server {}blok saya , direktif sever_name adalah wildcard: .domain1.comdan .domain2.com. Mengubahnya menjadi server_name www.domain1.com domain1.com;dan server_name www.domain2.com domain2.com;sekarang memiliki halaman yang benar untuk setiap situs yang ditampilkan saat alamat tersebut digunakan.
Steve HHH
4
Saya tahu ini mengeruk komentar kuno. Tetapi saya berasumsi bahwa dua blok server ini dapat berada dalam file konfigurasi terpisah di sites-enabled /?
labarna
3
Tentu saja, itu hanya tergantung pada bagaimana Anda ingin menyusun konfigurasi Anda. Saya cenderung memiliki satu file per domain nyata. Masing-masing mungkin berisi beberapa blok server.
aychedee
5
Anda BENAR-BENAR tidak ingin melakukan itu. Pilih www.domain.com atau domain.com dan alihkan satu ke yang lain. Memiliki konten yang sama di dua alamat yang berbeda dianggap sebagai spam dan dapat sangat merusak peringkat pencarian Anda.
aychedee
4
Anda juga bisa menggunakan .domain.com. Ini adalah karakter pengganti nginx khusus yang cocok dengan domain.comdan *.domain.com. Lihat: nginx.org/en/docs/http/server_names.html
aychedee