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