คุณควรใช้เกือบทุก$host
ครั้งเนื่องจากเป็นสิ่งเดียวที่รับประกันว่ามีเหตุผลที่เหมาะสมไม่ว่าตัวแทนผู้ใช้จะทำงานอย่างไรเว้นแต่ว่าคุณต้องการความหมายของตัวแปรอื่น ๆ
ความแตกต่างได้อธิบายไว้ในเอกสารประกอบของ nginx :
$host
มี "ในลำดับความสำคัญนี้: ชื่อโฮสต์จากบรรทัดคำขอหรือชื่อโฮสต์จากฟิลด์ส่วนหัวคำขอ 'โฮสต์' หรือชื่อเซิร์ฟเวอร์ที่ตรงกับคำขอ"
$http_host
มีเนื้อหาของฟิลด์ส่วนหัว HTTP "โฮสต์" หากมีอยู่ในคำขอ
$server_name
มีserver_name
โฮสต์เสมือนที่ประมวลผลคำขอตามที่กำหนดไว้ในการกำหนดค่า nginx หาก a server
มีหลายserver_name
s จะมีเพียงอันแรกเท่านั้นที่ปรากฏในตัวแปรนี้
เนื่องจากเป็นเรื่องที่ถูกกฎหมายสำหรับตัวแทนผู้ใช้ในการส่งชื่อโฮสต์ในบรรทัดคำขอแทนที่จะอยู่ในส่วนหัว Host: แม้ว่าจะไม่ค่อยทำยกเว้นเมื่อเชื่อมต่อกับพร็อกซี่คุณจะต้องพิจารณาเรื่องนี้
คุณต้องคำนึงถึงกรณีที่ตัวแทนผู้ใช้ไม่ได้ส่งชื่อโฮสต์เลยเช่นคำขอ HTTP / 1.0 โบราณและซอฟต์แวร์ที่เขียนไม่ดีทันสมัย คุณอาจทำเช่นนั้นโดยโอนไปยังโฮสต์เสมือน catch-all ซึ่งไม่ได้ให้บริการอะไรถ้าคุณให้บริการหลายเว็บไซต์หรือถ้าคุณมีเพียงเว็บไซต์เดียวบนเซิร์ฟเวอร์ของคุณคุณอาจประมวลผลทุกอย่างผ่านโฮสต์เสมือนเดียว . ในกรณีหลังนี้คุณต้องคำนึงถึงเรื่องนี้ด้วย
เฉพาะ$host
ตัวแปรบัญชีสำหรับสิ่งที่เป็นไปได้ทั้งหมดที่ตัวแทนผู้ใช้อาจทำเมื่อสร้างคำขอ HTTP
$scheme
และ$host
...return 301 /forum/index.php?posts/$arg_p/;
การทำงานที่ดี