Nginx: เปลี่ยนที่อยู่ IP เป็นชื่อโดเมน


12

ด้วยการกำหนดค่า Nginx ต่อไปนี้:

server {
    listen 80;
    listen [::]:80 default_server ipv6only=on;

    server_name isitmaintained.com;

    ...
}

server {
    listen 178.62.136.230:80;
    server_name 178.62.136.230;

    add_header X-Frame-Options "SAMEORIGIN";

    return 301 $scheme://isitmaintained.com$request_uri;
}

ฉันกำลังพยายามเปลี่ยนเส้นทางhttp://178.62.136.230/ไปยังhttp://isitmaintained.com/แต่เมื่อฉันปรับใช้การกำหนดค่านี้ฉันจะจบลงด้วยการRedirect loopเชื่อมโยงเหล่านี้อย่างใดอย่างหนึ่งหรือทั้งสอง

ผมทำอะไรผิดหรือเปล่า?

คำตอบ:


30

ลองสิ่งนี้ในบล็อกที่สอง:

server {
    listen 80;
    server_name 178.62.136.230;

    return 301 $scheme://isitmaintained.com$request_uri;
}

ปัญหาคือว่าlistenคำสั่งบล็อกเซิร์ฟเวอร์ที่สองนั้นมีความเฉพาะเจาะจงมากกว่าบล็อกเซิร์ฟเวอร์แรกดังนั้นจึงถูกใช้เสมอ และเนื่องจากบล็อกที่สองเป็นโฮสต์เสมือนเฉพาะสำหรับlistenข้อมูลจำเพาะนั้นจึงถูกใช้เสมอ


นั่นทำให้รู้สึก แต่เมื่อฉันใช้สิ่งนี้ฉันได้รับข้อผิดพลาดต่อไปนี้nginx: [emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32:( และนั่นก็ไม่สมเหตุสมผลเพราะชื่อโดเมนของฉันไม่นานเลย
Matthieu Napoli

ด้วยเหตุผลบางอย่างการตั้งค่าของคุณต้องการพื้นที่เก็บข้อมูลเพิ่มเติมสำหรับชื่อโฮสต์เซิร์ฟเวอร์เสมือนใน nginx ดังนั้นคุณควรเพิ่มการตั้งค่า
Tero Kilkanen

ฉันขอโทษที่ไม่พยายามโดยตรงฉันมั่นใจว่ามีบางอย่างผิดปกติ แต่คุณพูดถูกการเปลี่ยนเส้นทางทำงานตอนนี้! ขอบคุณที่อบอุ่นมาก :)
Matthieu Napoli

คุณเป็น F ***** คนดีแก้ไขปัญหาของฉัน upvoted, ขอบคุณ
a_m_dev

3

คุณสนิท เขียนใหม่ที่คุณกำลังมองหา

server {
    listen 178.62.136.230:80;
    server_name 178.62.136.230 isitmaintained.com;

    rewrite  ^/(.*)$  http://www.isitmaintained.com/$1 permanent;
}
server {
    listen 80;
    server_name www.isitmaintained.com;
    # Serve Stuff Here.
}

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