nginx - đọc tiêu đề tùy chỉnh từ máy chủ ngược dòng


81

Tôi đang sử dụng nginx làm proxy ngược và cố gắng đọc tiêu đề tùy chỉnh từ phản hồi của máy chủ ngược dòng (Apache) nhưng không thành công. Phản hồi Apache như sau:

HTTP/1.0 200 OK
Date: Fri, 14 Sep 2012 20:18:29 GMT 
Server: Apache/2.2.17 (Ubuntu)
X-Powered-By: PHP/5.3.5-1ubuntu7.10
Connection: close
Content-Type: application/json; charset=UTF-8
My-custom-header: 1

Tôi muốn đọc giá trị từ My-custom-header và sử dụng nó trong mệnh đề if:

location / {
    // ...
    // get My-custom-header value here
    // ...
}

Điều này có khả thi không? Cảm ơn trước.

Câu trả lời:


93

$ http _ name_of_the_header_key

tức là nếu bạn có origin = domain.comtrong tiêu đề, bạn có thể sử dụng $http_originđể lấy " domain.com "

Trong nginx không hỗ trợ trường tiêu đề yêu cầu tùy ý. Trong ví dụ trên, phần cuối cùng của tên biến là tên trường được chuyển đổi thành chữ thường với dấu gạch ngang được thay thế bằng dấu gạch dưới

Tài liệu tham khảo tại đây: http://nginx.org/vi/docs/http/ngx_http_core_module.html#var_http_

Đối với ví dụ của bạn, biến sẽ là $http_my_custom_header.


3
Thực ra, điều đó sai, và không nên được đánh dấu câu trả lời. Đối với bất kỳ ai gặp phải điều này trong tương lai, biến chính xác là $http_. Sử dụng OP làm ví dụ, $http_my_custom_header(đó là trường hợp nhạy cảm!)
jduncanator

Tôi đã sửa câu trả lời này để phù hợp với tài liệu;)
Paul Dixon

13
Hóa ra, điều này cũng không chính xác. OP yêu cầu đọc giá trị cho một tiêu đề phản hồi. Bạn nên sử dụng $sent_http_my_custom_header. nginx.org/en/docs/http/ngx_http_core_module.html#var_sent_http_
Nathan

kiểm tra @ câu trả lời dev-gosain dưới đây nếu bạn cần thượng nguồn đáp ứng tiêu đề
filimonov

14
câu trả lời là sai. Người yêu cầu đang cố gắng truy cập tiêu đề từ máy chủ ngược dòng . Câu trả lời đúng là stackoverflow.com/a/30879181/111995
geekQ

50

Tôi đã phải đối mặt với cùng một vấn đề. Tôi đã thử cả hai $http_my_custom_header$sent_http_my_custom_headernhưng nó không hiệu quả với tôi.

Mặc dù đã giải quyết vấn đề này bằng cách sử dụng $upstream_http_my_custom_header.


8

Sử dụng $ http_MY_CUSTOM_HEADER

Bạn có thể viết một số thứ như

set my_header $http_MY_CUSTOM_HEADER;
if($my_header != 'some-value') {
#do some thing;
}

6
người đàn ông nói - phần cuối cùng của tên biến là tên trường được chuyển đổi thành chữ thường với dấu gạch ngang được thay thế bằng dấu gạch dưới.
Arjun Sreedharan

Bạn đã cứu một ngày của tôi, Cảm ơn
mos
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.