Chuyển tiếp tiêu đề tùy chỉnh từ Nginx Reverse Proxy


25

Tôi có một máy chủ web nginx hoạt động như một proxy ngược để chuyển tiếp các yêu cầu tới Apache để xử lý bổ sung (Tôi xin bạn đừng hỏi tại sao). Tôi có một yêu cầu mà tôi đang cố gắng đính kèm một tiêu đề tùy chỉnh và tôi muốn nginx chuyển tiếp tiêu đề tùy chỉnh đó tới Apache để tôi có thể làm gì đó với nó trong một ứng dụng.

Tôi đã chọc qua các HttpProxyModuletài liệu, nhưng chúng không được mô tả cho dù tôi đang ở đúng nơi (rất có thể là tôi không).

Làm cách nào tôi có thể nhận nginx để chuyển tiếp X-CUSTOM-REFERRERtiêu đề? Hơn nữa, nếu có thể, tôi muốn nó chuyển tiếp theo bất kỳ tiêu đề tùy chỉnh nào xuất hiện. Nếu cái sau quá nhiều để hỏi, cái trước sẽ đủ cho nhu cầu hiện tại của tôi.

Như bạn có thể thấy, tôi rất mới với nginx, vì vậy phiên bản khắc phục sẽ hữu ích.

Cảm ơn.

CẬP NHẬT

Đoạn mã có liên quan từ cấu hình hiện tại của tôi:

location / {
    proxy_pass                  http://preview;
    proxy_redirect              off;
    proxy_set_header            Host $host;
    proxy_set_header            X-Real-IP $remote_addr;
    proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;
    # proxy_set_header            X-Custom-Referrer $x_custom_referrer;
}

Câu trả lời:


20

Lệnh proxy_set_headertừ HttpProxyModule cho phép bạn làm điều này. Ví dụ:

proxy_pass http://apachehost;
proxy_set_header X-Custom-Referrer $proxy_add_<header_field_name_from_last_request>;

1
Cảm ơn, @mgorven. Giá trị đến là thay đổi, mặc dù. Tôi có thể đọc một giá trị từ X-Custom-Referrertiêu đề đến và chuyển nó cùng không? proxy_set_header X-Custom-Referrer $x_custom_referrerhoặc một thứ gì đó hiệu quả?
Rob Wilkerson

1
Có, bạn có thể sử dụng $http_x_custom_referrer. Tuy nhiên, tất cả các tiêu đề được gửi bởi khách hàng sẽ được tự động chuyển sang phần phụ trợ. Bạn đã đặt proxy_pass_request_headers offở đâu đó chưa?
mgorven

Không phải là tôi có thể nhìn thấy. Tôi đã cập nhật câu hỏi của mình với một đoạn trích từ tệp cấu hình của mình. Tuy nhiên, tiêu đề đó chắc chắn không xuất hiện trong ứng dụng. Điều đó nói rằng, tôi giả sử rằng các ứng dụng nguồn đang gửi nó, vì vậy tôi sẽ thực hiện sự chuyên cần của mình và chắc chắn liệu đó có phải là hành vi mặc định hay không.
Rob Wilkerson

@RobWilkerson trong đoạn trích của bạn có liên quan proxy_set_headerđược nhận xét; ngoài ra, bạn đang sử dụng $x_custom_referrerthay vì $http_x_custom_referrer...
severin 24/2/2015

Tôi nghĩ rằng câu trả lời của @ mgorven nên được cập nhật $http_<custom_header_field>thay vì$proxy_add_<custom_header_field>
Tri Nguyen

2

Mô-đun ngx_headftimemore cho phép bạn thay đổi và thêm các tiêu đề http.


Mô-đun này thêm các tiêu đề để đáp ứng. Đó không phải là những gì OP yêu cầu. Họ cần gửi một tiêu đề bổ sung cho thượng nguồn, trong một proxy_pass.
Victor Schröder

1

Bạn có thể sử dụng các tiêu đề ngược dòng (được đặt tên bắt đầu bằng $ http_) và các tiêu đề tùy chỉnh bổ sung. Ví dụ:

add_header X-Upstream-01 $http_x_upstream_01;
add_header X-Hdr-01  txt01;

tiếp theo, đi tới bàn điều khiển và thực hiện yêu cầu với tiêu đề của người dùng:

curl -H "X-Upstream-01: HEADER1" -I http://localhost:11443/

phản hồi chứa X-Hdr-01, được đặt bởi máy chủ và X-Upstream-01, được đặt bởi máy khách:

HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Mon, 30 Nov 2015 23:54:30 GMT
Content-Type: text/html;charset=UTF-8
Connection: keep-alive
X-Hdr-01: txt01
X-Upstream-01: HEADER1

1
Đây là thiết lập các tiêu đề trên các phản ứng. OP muốn đặt các tiêu đề được gửi đến thượng nguồn của một proxy_passchỉ thị.
Victor Schröder
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.