ใน Nginx ความแตกต่างระหว่างตัวแปร$host
และ$http_host
คืออะไร
ใน Nginx ความแตกต่างระหว่างตัวแปร$host
และ$http_host
คืออะไร
คำตอบ:
$host
เป็นตัวแปรของโมดูลคอร์
$ โฮสต์
ตัวแปรนี้เท่ากับบรรทัดโฮสต์ในส่วนหัวของคำขอหรือชื่อของเซิร์ฟเวอร์ที่ประมวลผลคำขอหากส่วนหัวโฮสต์ไม่พร้อมใช้งาน
ตัวแปรนี้อาจมีค่าที่แตกต่างจาก $ http_host ในกรณีเช่นนี้: 1) เมื่อส่วนหัวอินพุตโฮสต์ขาดหายไปหรือมีค่าว่างเปล่า $ host เท่ากับค่าของคำสั่ง server_name; 2) เมื่อค่าของ Host มีหมายเลขพอร์ต $ host จะไม่รวมหมายเลขพอร์ตนั้น ค่า $ host เป็นตัวพิมพ์เล็กเสมอตั้งแต่ 0.8.17
$http_host
ก็เป็นตัวแปรของโมดูลเดียวกัน แต่คุณจะไม่พบมันด้วยชื่อนั้นเพราะมันถูกนิยามโดยทั่วไปว่า$http_HEADER
( อ้างอิง )
$ http_HEADER
ค่าของส่วนหัวคำขอ HTTP HEADER เมื่อแปลงเป็นตัวพิมพ์เล็กและด้วย 'ขีดกลาง' ถูกแปลงเป็น 'ขีดล่าง' เช่น $ http_user_agent, $ http_referer ... ;
สรุป:
$http_host
เท่ากับHTTP_HOST
ส่วนหัวคำขอเสมอ$host
เท่ากับ$http_host
, ตัวพิมพ์เล็กและไม่มีหมายเลขพอร์ต (ถ้ามี) ยกเว้นเมื่อHTTP_HOST
ไม่อยู่หรือเป็นค่าว่าง ในกรณีนั้น$host
เท่ากับมูลค่าของserver_name
คำสั่งของเซิร์ฟเวอร์ที่ประมวลผลการร้องขอserver_name
คำสั่งได้เช่นกัน ถ้าคุณมี regex ในอันแรกมันจะกลายเป็น$host
และสิ่งต่าง ๆ ที่น่าเกลียดเกิดขึ้นได้ระหว่างการเขียนกฎใหม่
$server_name
ตัวแปรเท่ากับserver_name
ค่าสั่งหรือชื่อเซิร์ฟเวอร์จริงที่ได้รับการคัดเลือกว่ามีหลายserver_name
คำสั่ง?
$server_name
จะเท่ากับค่าแรกที่ระบุด้วยคำสั่ง server_name เสมอ ตัวอย่างเช่นserver_name example.com one.example.com two.example.com;
, $server_name
จะเป็น "example.com" โดยไม่คำนึงถึงโฮสต์ที่ผู้ใช้ระบุ ในความเป็นจริงหากคุณไม่มีdefault_server
โฮสต์อาจเป็นสิ่งที่แตกต่างอย่างสิ้นเชิง (เช่น example.org)
server_name
ที่ถูกกำหนดในบล็อกเซิร์ฟเวอร์ปัจจุบันโดยเฉพาะ หากคุณมีหลายรายการจะมีserver_name
เพียงรายการแรกเท่านั้น