2013-03-14 19 views
90

Trong Nginx, sự khác nhau giữa các biến số $host$http_host là gì.

Trả lời

144

$host là biến của mô-đun Core.

$ host

Biến này là tương đương với dòng máy chủ trong tiêu đề của yêu cầu hoặc tên của máy chủ xử lý yêu cầu nếu tiêu đề chủ không phải là sẵn.

Biến này có thể có giá trị khác với $ http_host trong trường hợp như sau: 1) khi tiêu đề đầu vào Máy chủ không có hoặc có giá trị trống, $ host bằng giá trị của chỉ thị server_name; 2) khi giá trị của Máy chủ chứa số cổng, $ host không bao gồm số cổng đó. Giá trị của máy chủ lưu trữ $ luôn là chữ thường từ 0.8.17.

$http_host cũng là một biến của các module tương tự, nhưng bạn sẽ không tìm thấy nó với cái tên đó vì nó được định nghĩa tổng quát như $http_HEADER (ref).

$ http_HEADER

Giá trị của yêu cầu HTTP tiêu đề HEADER khi chuyển đổi sang chữ thường và với 'dấu gạch ngang' chuyển đổi sang 'dấu gạch', ví dụ $ http_user_agent, $ http_referer ...;


Tóm tắt:

  • $http_host luôn tương đương với tiêu đề HTTP_HOST yêu cầu.
  • $host bằng $http_host, chữ thường và không có số cổng (nếu có), trừ khi HTTP_HOST vắng mặt hoặc là một giá trị rỗng. Trong trường hợp đó, $host bằng giá trị của server_name chỉ thị của máy chủ đã xử lý yêu cầu.
+29

$ host là đặc biệt ** 'server_name' đầu tiên được xác định trong khối máy chủ hiện tại. nếu bạn có nhiều 'server_name', chỉ cái đầu tiên sẽ xuất hiện. –

+2

Đúng. Trong thực tế, nó là khá điển hình để xác định: server_name example.com www.example.com; – glarrain

+0

bạn cũng có thể có nhiều chỉ thị 'server_name'. nếu bạn tình cờ có một regex trong cái đầu tiên, nó sẽ trở thành '$ host', và tất cả những thứ xấu xí có thể xảy ra trong quá trình viết lại quy tắc. –

Các vấn đề liên quan