Nginx โดเมนที่แตกต่างกันบน IP เดียวกัน


127

ฉันต้องการโฮสต์ 2 โดเมนที่แตกต่างกันในเซิร์ฟเวอร์เดียวกันโดยใช้ nginx ฉันเปลี่ยนเส้นทางโดเมนทั้งสองไปยังโฮสต์นี้ผ่านคุณสมบัติ @ แม้ว่าฉันจะกำหนดค่าเซิร์ฟเวอร์ 2 บล็อกที่แตกต่างกัน แต่เมื่อใดก็ตามที่ฉันพยายามเข้าถึงโดเมนที่สองมันจะเปลี่ยนเส้นทางไปยังโดเมนแรก

นี่คือ 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;
    }
}

ฉันจะแก้ไขปัญหานี้ได้อย่างไร? ขอบคุณ

คำตอบ:


164

คำสั่ง "ฟัง" ของคุณไม่ถูกต้อง ดูหน้านี้: http://nginx.org/en/docs/http/server_names.html

พวกเขาควรจะ

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

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

หมายเหตุฉันได้รวมเฉพาะบรรทัดที่เกี่ยวข้องเท่านั้น อย่างอื่นดูเรียบร้อย แต่ฉันเพิ่งลบออกเพื่อความชัดเจน ในการทดสอบคุณอาจต้องการลองให้บริการไฟล์ข้อความจากแต่ละเซิร์ฟเวอร์ก่อนที่จะให้บริการ php จริง นั่นเป็นเหตุผลที่ฉันทิ้งคำสั่ง 'root' ไว้ที่นั่น


9
สิ่งนี้แก้ไขให้ฉัน ปัญหาน่าจะได้รับว่าในทั้งสองของฉันserver {}บล็อกสั่ง sever_name เป็นสัญลักษณ์แทน: และ.domain1.com .domain2.comการเปลี่ยนเป็นserver_name www.domain1.com domain1.com;และserver_name www.domain2.com domain2.com;ตอนนี้มีหน้าที่ถูกต้องสำหรับแต่ละไซต์ที่แสดงเมื่อมีการใช้ที่อยู่เหล่านั้น
Steve HHH

4
ฉันรู้ว่านี่เป็นการขุดลอกความคิดเห็นโบราณ แต่ฉันคิดว่าบล็อกเซิร์ฟเวอร์ทั้งสองนี้อาจอยู่ในไฟล์กำหนดค่าแยกกันในไซต์ที่เปิดใช้งาน /?
labarna

3
แน่นอนมันขึ้นอยู่กับว่าคุณต้องการจัดโครงสร้างการกำหนดค่าของคุณอย่างไร ฉันมักจะมีหนึ่งไฟล์ต่อโดเมนจริง ซึ่งแต่ละบล็อกอาจมีเซิร์ฟเวอร์หลายบล็อก
aychedee

5
คุณไม่ต้องการทำเช่นนั้นจริงๆ เลือก www.domain.com หรือ domain.com แล้วเปลี่ยนเส้นทางไปยังโดเมนอื่น การมีเนื้อหาเดียวกันในที่อยู่สองแห่งจะถูกมองว่าเป็นสแปมและสามารถทำลายอันดับการค้นหาของคุณได้อย่างมาก
aychedee

4
คุณยังสามารถใช้.domain.comไฟล์. เป็นสัญลักษณ์แทน nginx พิเศษที่จับคู่domain.comและ*.domain.com. ดู: nginx.org/en/docs/http/server_names.html
aychedee
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.