Nginx ชื่อเซิร์ฟเวอร์ที่ขัดแย้งกันสำหรับโดเมนย่อย


15

ขณะนี้ฉันมี vhost ที่ทำงานบน Nginx สำหรับ foo.domain.com และทุกอย่างใช้งานได้ดี

ฉันสร้างไฟล์ใหม่สำหรับโดเมนย่อยใหม่ฉันต้องการเพิ่มชื่อ bar.domain.com ฉันใช้การตั้งค่าเดียวกันสำหรับทั้งคู่

เมื่อฉันรีสตาร์ท Nginx ฉันจะได้รับ

Restarting nginx: nginx: [warn] conflicting server name "" on 0.0.0.0:443, ignored nginx.

เมื่อฉันไปที่ bar.domain.com ฉันเห็นสิ่งที่ฉันควรจะเห็น แต่เมื่อฉันไปที่ foo.domain.com ฉันเห็นหน้าเว็บที่ bar.domain.com เชื่อมโยงไปถึง

ฟู

upstream php-handler {
    server unix:/var/run/php5-fpm.sock;
}

server {
        listen 80;
        server_name foo.domain.com;
        return 301 https://$server_name$request_uri;
}

server {
        listen 443;

        ssl on;
        ssl_certificate      [path_foo]/cacert.pem;
        ssl_certificate_key  [path_foo]/privkey.pem;

        root [path]/foo;

        ...
}

บาร์

server {
        listen 80;
        server_name bar.domain.com;
        return 301 https://$server_name$request_uri;
}

server {
        listen 443;

        ssl on;
        ssl_certificate      [path_bar]/cacert.pem;
        ssl_certificate_key  [path_bar]/privkey.pem;

        root [path]/bar;
}

ฉันจะไปไหนผิด


คุณต้องระบุserver_nameในการกำหนดค่าSSL (443) เช่นกัน
zakjan

หลังจากนั้นlisten 443ในแต่ละเซิร์ฟเวอร์เพิ่มserver_name [foo/bar].domain.com?
RockJake28

คำตอบ:


10

ดูเหมือนว่าฉันที่บล็อก https ของคุณต้องระบุชื่อเซิร์ฟเวอร์ด้วยเช่นกัน

server {
    listen 443;
    server_name bar.domain.com;
    ssl on;
    ssl_certificate      [path_bar]/cacert.pem;
    ssl_certificate_key  [path_bar]/privkey.pem;

    root [path]/bar;
}

3

คุณอาจมีไฟล์เพิ่มเติม/etc/nginx/sites-available/<site-name>ที่เชื่อมโยง/etc/nginx/sites-enabled/<site-name>อยู่

การตั้งค่าในไฟล์เหล่านั้นอาจขัดแย้งกับ/etc/nginx/sites-available/defaultไฟล์


3

ฉันมีปัญหาที่คล้ายกันเมื่อฉันมีชื่อเซิร์ฟเวอร์ซ้ำกันโดยบังเอิญ:

server_name myserver.example.com myserver.example.com;

แก้ไขโดยเปลี่ยนเป็น:

server_name myserver.example.com;

ในกรณีของฉันฉันมีสองตั้งใจ vhosts แยกต่างหากด้วยเหมือนกันserver_name; ฉันมีการกำหนดค่ามาหลายปีและไม่เคยกังวลมากเกี่ยวกับข้อความแสดงข้อผิดพลาด ปรากฎว่าฉันเริ่มทำ vhost อย่างผิด ๆ ซึ่งควรจะเป็นเทมเพลต😮
Gwyneth Llewelyn

2

ตรวจสอบแต่ละไฟล์/etc/nginx/conf.dเพื่อหาข้อมูลซ้ำกัน

ในกรณีของฉันnginx -tผ่านการทดสอบ - ฉันได้รับข้อความแสดงข้อผิดพลาดเมื่อพยายามเริ่ม nginx

/etc/nginx/sites-enabledไฟล์ของฉันฟรีจากโดเมน (ชื่อเซิร์ฟเวอร์) ซ้ำซ้อนและมีการอ้างอิงเพียง1 รายการถึงserver_default(และไม่มีการlocalhostซ้ำซ้อน)

แต่มีไฟล์ 2 ไฟล์conf.dที่ทั้งสองอ้างถึงโดเมนเฉพาะ (เช่น 2 ไฟล์มีบรรทัดดังนี้: servername mydomain.comโดยที่หนึ่งในชื่อโดเมนถูกระบุไว้ใน 2 ไฟล์)

โซลูชันของฉัน: ดังนั้นตรวจสอบให้แน่ใจว่าไฟล์ทั้งหมดconf.dอ้างอิงค่าservername(ชื่อโดเมน) ใด ๆเพียงครั้งเดียวอย่างมากที่สุด


( น่าเสียดายหลังจากแก้ไขปัญหาข้างต้นตอนนี้ฉันได้รับ:
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) ข้อความแสดงข้อผิดพลาดเมื่อฉันพยายามรีสตาร์ท nginx)

ปรับปรุง : FYI อีกครั้ง ... Address already in useข้อผิดพลาดดังกล่าวข้างต้น:
สิ่งที่ผมต้องทำคือsudo fuser -k 80/tcpแล้วservice nginx restartทำงานเช่นเสน่ห์!
ฉันพบคำตอบได้ที่นี่: https://easyengine.io/tutorials/nginx/troubleshooting/emerg-bind-failed-98-address-already-in-use/

update2 :
มีคนแนะนำว่ากระบวนการอื่นกำลังใช้พอร์ต 80 (ซึ่งเป็นสาเหตุที่การฆ่ามันทำงานได้และยังทำให้รู้สึกว่า b / c nginx ไม่ได้ทำงานในเวลานั้น)
https://community.letsencrypt.org/t/nginx-emerg-bind-to-80-failed-98-address-already-in-use/52914/4

พวกเขายังชี้ให้เห็นด้วยว่าการเห็นกระบวนการก่อนที่จะฆ่ามันอาจจะให้ข้อมูลเชิงลึกเกี่ยวกับสิ่งที่ทำให้เกิดปัญหา
ดังนั้นจึงน่าจะดีกว่าที่จะใช้อย่างใดอย่างหนึ่ง: sudo fuser -k 80/tcp(ไม่มีตัวเลือก -k) ตามด้วย a grepสำหรับหมายเลขกระบวนการเหล่านั้น
systemctl list-unit-filesผลลัพธ์อาจให้ข้อมูลเชิงลึกเกี่ยวกับกระบวนการที่ขัดแย้งกัน

หรือ:
fuser -kivn tcp 80, ที่ไหน:
-vพิมพ์ชื่อกระบวนการนอกเหนือจาก id กระบวนการ
-iทำให้พร้อมท์ก่อนที่จะฆ่า
https://community.letsencrypt.org/t/nginx-emerg-bind-to-80-failed-98-address-already- ในการใช้งาน / 52914/5


0

ในกรณีของฉันฉันไม่พบสิ่งที่ซ้ำกัน อย่างไรก็ตามฉันมี default.conf ที่ฉันแสดงความคิดเห็นการตั้งค่าทั้งหมดยกเว้นการเปิดเซิร์ฟเวอร์บล็อกและวงเล็บปิด ... และสิ่งนี้ทำให้เกิดข้อผิดพลาดที่ขัดแย้งกัน

โดยทั่วไปมันเป็นสิ่งที่ไม่ถูกต้องสำหรับบล็อกเซิร์ฟเวอร์โดยไม่มีคำสั่ง server_name ที่ทำให้เกิดปัญหาไม่ใช่รายการที่ซ้ำกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.