Sự khác biệt của $ host và $ http_host trong Nginx


Câu trả lời:


217

$hostlà một biến của mô-đun Core .

$ máy chủ

Biến này bằng với Máy chủ dòng trong tiêu đề yêu cầu hoặc tên của máy chủ xử lý yêu cầu nếu tiêu đề Máy chủ không khả dụng.

Biến này có thể có giá trị khác với $ http_host trong các trường hợp như vậy: 1) khi tiêu đề đầu vào Máy chủ vắng mặt hoặc có giá trị trống, $ host bằng với giá trị của lệnh 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 $ host luôn là chữ thường kể từ 0.8.17.

$http_hostcũng là một biến của cùng một mô-đun nhưng bạn sẽ không tìm thấy nó với tên đó bởi vì nó được định nghĩa chung là $http_HEADER( ref ).

$ http_HEADER

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


Tóm tắt:

  • $http_hostbằng luôn luôn HTTP_HOSTtiêu đề yêu cầu.
  • $hostbằng $http_host, chữ thường và không có số cổng (nếu có), trừ khi HTTP_HOSTvắng mặt hoặc là một giá trị trống . Trong trường hợp đó, $hostbằng giá trị của lệnh server_namecủa máy chủ đã xử lý yêu cầu.

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

4
Thật. Trong thực tế, nó khá điển hình để định nghĩa: server_name example.com www.example.com;
glarrain

bạn có thể có nhiều server_namechỉ thị quá. nếu bạn có regex trong lần đầu tiên, điều đó sẽ trở thành $hostvà tất cả các loại công cụ xấu xí có thể xảy ra trong các quy tắc viết lại.
Jonathan Vanasco

5
Liệu $server_namebiến bằng với server_namegiá trị của chỉ thị hoặc tên máy chủ thực tế mà đã được lựa chọn nếu có nhiều server_namechỉ thị?
CMCDragonkai

1
@CMCDragonkai $server_nameluôn bằng giá trị đầu tiên được chỉ định với lệnh server_name. Ví dụ: với server_name example.com one.example.com two.example.com;, $server_namesẽ luôn là "example.com", bất kể người dùng đã chỉ định máy chủ nào . Trên thực tế, nếu bạn không có default_server, máy chủ có thể là một thứ hoàn toàn khác (như example.org).
ATLief
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.