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