nginx chuyển lại tiêu đề tùy chỉnh


13

Tôi có ví dụ sau

           location / {
                    proxy_read_timeout 2000;
                    proxy_next_upstream error;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header Host $http_host;
                    proxy_pass_header X_CUSTOM_HEADER;
                    proxy_redirect off;
                    proxy_max_temp_file_size 0;
                    proxy_pass https://prod;
                    break;
            }

Bây giờ khi tôi sử dụng dòng curl sau

curl --head -H "X_CUSTOM_HEADER: foo" http://domain.com/api/test

Bây giờ nó không hoạt động .. apache / php trên phụ trợ không thấy tiêu đề. Nếu tôi bỏ qua nginx nó hoạt động

curl --head -H "X_CUSTOM_HEADER: foo" http://web1.domain.com/api/test

Câu trả lời:



2

Bạn nên sử dụng proxy_set_headercho tất cả các tiêu đề bạn muốn chuyển tiếp đến các máy chủ phụ trợ. Vì vậy, thay vì proxy_pass_header ...dòng:

proxy_set_header X_CUSTOM_HEADER $http_x_custom_header;

Tôi đã thử điều đó và nó không đặt tiêu đề chính xác, Nếu tôi thay thế $ http_x_custom_header bằng "foo" thì nó hoạt động
— Mike

Tôi không chắc tại sao nó không hoạt động cho @Mike nhưng nó đã làm việc cho tôi. Tôi đang sử dụng X-Forwarded-Proto với $ http_x_forwarded_proto.
— Tyler Collier

2

Ở trên cũng không có tác dụng với tôi nên tôi đã sử dụng proxy_pass_header. Xem Wiki của Nginx về proxy_pass_header tại đây .

Nếu tiêu đề tùy chỉnh của bạn được device_idthêm proxy_pass_header device_id;vào khối Proxy của bạn.

Nếu bạn đang sử dụng các tiêu đề tùy chỉnh có dấu gạch dưới (như tôi), hãy chắc chắn rằng bạn có underscores_in_headers ontrong Nginx Config của mình.


Cảm ơn rất nhiều ! Tôi đang nhổ tóc ra .... Bài đăng của bạn làm tôi nhẹ nhõm ....
— Fahad Ahammed

1

Theo mặc định, nginx chuyển tiếp tất cả ( proxy_pass_Vquest_headers trên; ) tiêu đề đến máy chủ phụ trợ. Nhưng nếu tiêu đề yêu cầu của bạn (có thể là tiêu đề tùy chỉnh) bao gồm dấu gạch dưới (_) trong tên tiêu đề thì nginx sẽ chặn các tiêu đề đó.

Ex: authenticate_type, cdn_enable.

Để cho phép Nginx vượt qua tất cả hoặc tiêu đề được yêu cầu tùy chỉnh cho bật phụ trợ, bật tùy chọn gạch dưới.

underscores_in_headers on;
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 cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.