Score:0

เหตุใดไฟล์ nginx conf ของฉันจึงเปลี่ยนเส้นทางโดเมนย่อยไปยังโดเมนหลัก

ธง cn

ฉันได้ลบไฟล์ทั้งหมดออกจาก /etc/nginx/sites-enabled/ ไดเรกทอรี

ฉันได้ลบไฟล์ทั้งหมดออกจาก /etc/nginx/sites-available/ ไดเรกทอรี

ฉันมีเพียงไฟล์เดียวใน /etc/nginx/conf.d/ เรียกว่า my-domain-name.com.conf และประกอบด้วย:

เซิร์ฟเวอร์ {
    ฟัง 80;
    server_name my-domain-name.com www.my-domain-name.com;
    ส่งคืน 301 https://$server_name$request_uri;
}

เซิร์ฟเวอร์ {
    ฟัง 443 ssl;
    server_name my-domain-name.com www.my-domain-name.com;

    ssl_certificate /etc/letsencrypt/live/my-domain-name.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/my-domain-name.com/privkey.pem;

    รวม /etc/letsencrypt/options-ssl-nginx.conf;

    ที่ตั้ง / {
        proxy_pass http://localhost:4000;
    }
}

ฉันพร็อกซีรับส่งข้อมูลไปยังคอนเทนเนอร์นักเทียบท่าที่รับฟังพอร์ต 4000

มันใช้งานได้ดีสำหรับ my-domain-name.com และ www.my-domain-name.com.

อย่างไรก็ตาม มันยังเปลี่ยนเส้นทาง ทั้งหมด ของโดเมนย่อยของฉันที่กำหนดไว้ใน DNS

นี่ไม่ใช่พฤติกรรมที่ตั้งใจไว้ ฉันต้องการให้ไฟล์นี้ให้บริการสองโดเมนนี้เท่านั้น ไม่ใช่มากกว่านี้

เกิดอะไรขึ้นที่นี่?

อัปเดต:

ฉันเพิ่มไฟล์อื่นที่เรียกว่า sudomain.my-domain-name.com.conf และฉันได้เพิ่มการกำหนดค่านี้เข้าไปข้างใน:

เซิร์ฟเวอร์ {
    ฟัง 80;
    server_name subdomain.my-domain-name.com;
    ส่งคืน 301 https://$server_name$request_uri;
}

เซิร์ฟเวอร์ {
    ฟัง 443 ssl;
    server_name subdomain.my-domain-name.com;

    ssl_certificate /etc/letsencrypt/live/my-domain-name.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/my-domain-name.com/privkey.pem;

    รวม /etc/letsencrypt/options-ssl-nginx.conf;

    ที่ตั้ง / {
        proxy_pass http://localhost:3131;
    }
}

และ nginx -t แสดงความสำเร็จและ nginx -s โหลดซ้ำ ยังใช้ แต่อีกครั้งเมื่อฉันไปที่ subdomain.my-domain-name.comแทนที่จะรับนักเทียบท่าตัวที่สองที่ทำงานบนพอร์ต 3131 ฉันถูกเปลี่ยนเส้นทางอีกครั้ง my-domain-name.com หน้าหนังสือ.

Score:1
ธง pl

โปรดแสดงการกำหนดค่า nginx ของโดเมนย่อยของคุณ

แก้ไข 1:

ลองเพิ่มไฟล์ปรับแต่งนี้ (ตั้งชื่อตามที่คุณต้องการ):

เซิร์ฟเวอร์ {
    ฟัง 80;
    server_name my-subdomain-name.my-domain-name.com www.my-subdomain-name.my-domain-name.com;
    ส่งคืน 301 https://$server_name$request_uri;
}

เซิร์ฟเวอร์ {
    ฟัง 443 ssl;
    
    server_name my-subdomain-name.my-domain-name.com www.my-subdomain-name.my-domain-name.com;

    ssl_certificate /etc/letsencrypt/live/my-subdomain-name.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/my-subdomain-name.com/privkey.pem;

    รวม /etc/letsencrypt/options-ssl-nginx.conf;

    ที่ตั้ง / {
# คุณสามารถเปลี่ยนพอร์ต, url ได้หากต้องการ
        proxy_pass http://localhost:4000;
    }
}

แก้ไข 2:

ตัวอย่างเช่น คุณมีโดเมนย่อยนี้: test.my-domain.com จากนั้นคุณต้องตั้งค่าเซิร์ฟเวอร์ของคุณเพื่อให้บริการไฟล์จากโดเมนย่อยนั้น เพื่อสิ่งนั้น เราต้องสร้างไฟล์ปรับแต่ง nginx

Saeed Neamati avatar
cn flag
ไม่มีไฟล์กำหนดค่าสำหรับโดเมนย่อย พวกเขากำหนดไว้ใน DNS ของฉันเท่านั้น ซึ่งก็คือ CloudFlare
Saeed Neamati avatar
cn flag
ไฟล์ปรับแต่งนั้นเป็นไฟล์ปรับแต่งเดียวของฉันในไดเร็กทอรี `/etc/nginx/conf.d/`
pl flag
คุณต้องสร้างไฟล์ปรับแต่งสำหรับแต่ละโดเมนและโดเมนย่อย
Saeed Neamati avatar
cn flag
เรียน @ArRakin ขอบคุณที่ตอบแต่ฉันไม่เข้าใจว่าสิ่งนี้ช่วยฉันได้อย่างไร
Saeed Neamati avatar
cn flag
ด้วยความเคารพ ฉันคิดว่าคุณเข้าใจปัญหาของฉันผิด
pl flag
ตอนนี้ฉันกำลังแก้ไขโพสต์นี้
Saeed Neamati avatar
cn flag
สมมติว่าฉันมีเฉพาะโดเมนย่อยใน DNS และฉันไม่สนใจที่จะให้บริการอะไรจากพวกเขา เหตุใด Nginx จึงมีพฤติกรรมเช่นนี้กับไฟล์เดียว เหตุใดจึงเปลี่ยนเส้นทางการรับส่งข้อมูล **ทั้งหมด** ไปยังโดเมนหลักของฉัน ในขณะที่มีการบอกอย่างชัดเจนว่าให้บริการเฉพาะโดเมนหลักของฉัน
Michael Hampton avatar
cz flag
@SaeedNeamati คุณได้ส่งทราฟฟิกไปที่ nginx ดังนั้นมันต้องทำอะไรบางอย่างกับมัน ในกรณีที่คุณไม่ได้ระบุบล็อกเซิร์ฟเวอร์ที่จะใช้ ก็จะใช้ค่าเริ่มต้น
Saeed Neamati avatar
cn flag
ตรรกะนั้นไร้สาระ คุณช่วยแสดงให้ฉันเห็นว่า **default** อยู่ที่ไหน การกำหนดค่าของฉันชัดเจนและไม่มีค่าเริ่มต้น
Saeed Neamati avatar
cn flag
โปรดดูการปรับปรุง
djdomi avatar
za flag
แสดงผลลัพธ์ที่สมบูรณ์ของ `nginx -T`
Score:0

อย่างไรก็ตาม มันยังเปลี่ยนเส้นทางโดเมนย่อยทั้งหมดของฉันที่ได้กำหนดไว้อีกด้วย ใน DNS [...] นี่ไม่ใช่พฤติกรรมที่ตั้งใจไว้ ฉันต้องการไฟล์นี้เท่านั้น เพื่อให้บริการทั้งสองโดเมนไม่มาก

หากโดเมนย่อยแก้ไขเป็นที่อยู่ IP เดียวกันกับเซิร์ฟเวอร์ที่โฮสต์สองโดเมนที่คุณต้องการให้บริการจริง ๆ Nginx จะถูกบังคับให้จัดการกับคำขอที่เข้ามาเหล่านั้น

เหตุใดจึงเปลี่ยนเส้นทางการรับส่งข้อมูลทั้งหมดไปยังโดเมนหลักของฉัน ในขณะที่ระบุอย่างชัดเจน ถูกบอกให้ให้บริการเฉพาะโดเมนหลักของฉัน?

นี่คือลักษณะการทำงานเริ่มต้น Nginx พยายามกำหนดเส้นทางคำขอไปยังเซิร์ฟเวอร์ที่เหมาะสมโดยใช้ เจ้าภาพ ส่วนหัว HTTP แต่ถ้าไม่มีการจับคู่ ก็จะกำหนดเส้นทางการรับส่งข้อมูลไปยังเซิร์ฟเวอร์เริ่มต้น นี่น่าจะเป็นที่มาของความสับสน

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

เพื่อป้องกันไม่ให้เซิร์ฟเวอร์แสดงเนื้อหาของโดเมนของคุณ เว้นแต่จะมีการร้องขอเป็นพิเศษ คุณสามารถเพิ่มการบล็อกเซิร์ฟเวอร์เริ่มต้นจริงได้ คุณยังสามารถส่งคืน 204 No Content สำหรับทุกคำขอได้หากต้องการ แม้ว่าบางอย่างที่เหมาะสมกว่าเล็กน้อยก็น่าจะดีกว่าเสมอ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา