2012-02-27 37 views
6

Tôi sử dụng nginx với một số phụ trợ fastcgi (php-cgi, mod-mono-fastcgi4). Bây giờ tôi cần gửi tiêu đề http bổ sung cho phần phụ trợ fastcgi, về cơ bản giống như proxy_set_header thực hiện khi sử dụng nginx làm proxy ngược. Nhưng với những phát hiện của tôi, không có thứ gì như fastcgi_set_header trong nginx.Gửi tiêu đề bổ sung cho phần phụ trợ FastCGI với nginx

Ai đó có ý tưởng làm thế nào để thực hiện việc này? Tôi không muốn sử dụng các mô-đun nginx bổ sung vì các giải pháp muste có thể dễ dàng triển khai trên một loạt các hệ thống khách hàng.

Trả lời

7

Tôi đã xem lướt qua hướng dẫn và tôi nghĩ gần nhất bạn sẽ tìm thấy được qua các thông số fastcgi:

Yêu cầu tiêu đề được chuyển đến FastCGI-server dưới dạng tham số. Trong các ứng dụng và các kịch bản chạy từ máy chủ FastCGI, các tham số này thường có thể truy cập dưới dạng các biến môi trường. Ví dụ: tiêu đề "Tác nhân người dùng" được chuyển dưới dạng tham số HTTP_USER_AGENT. Bên cạnh các tiêu đề của yêu cầu HTTP, có thể chuyển các tham số tùy ý với sự trợ giúp của fastcgi_param chỉ thị.

http://wiki.nginx.org/HttpFcgiModule#Parameters.2C_transferred_to_FastCGI-server.

fastcgi_param

cú pháp: fastcgi_param giá trị tham số

http://wiki.nginx.org/HttpFcgiModule#fastcgi_param

+0

Tôi cũng đã tìm thấy điều đó.Tuy nhiên, fastcgi_param được sử dụng để đặt biến được gửi tới máy chủ FastCGI - không phải là tiêu đề HTTP. Vấn đề là bạn không thể truy cập các biến fastcgi từ bên trong ứng dụng (đó là một tập lệnh php hoặc một ứng dụng web asp.net). – Dyna

+8

Tôi đã làm cho nó hoạt động ngay bây giờ bằng cách sử dụng 'fastcgi_param HTTP_X_MYVAR' myvalue "; '. Nếu tên biến bắt đầu bằng HTTP_ có vẻ như nó được sao chép sang các tiêu đề. Tuy nhiên, điều này là không có giấy tờ và thực hiện cụ thể và có thể thay đổi với bản phát hành trong tương lai – Dyna

+0

Tìm tốt, Dyna. Tôi sẽ lưu ý về điều đó. – Kamu

0

Bạn có thể làm điều này với các mô-đun của bên thứ ba ngx_headers_more. Sau khi xây dựng nginx với module này bao gồm, bạn có thể làm như sau trong cấu hình của bạn:

location/{ 
    more_set_input_headers 'Foo: bar baz'; 
    ... 
} 
4

Nginx hiện có:

fastcgi_pass_header 'Cache-Control: no-cache, must-revalidate'; 

Mà có thể được sử dụng trong các quy tắc vị trí của bạn nếu bạn đang thêm tiêu đề mà aren chưa được chỉ định trong yêu cầu của bạn. Theo mặc định, fastcgi sử dụng:

fastcgi_pass_request_headers on; 

Điều này sẽ chuyển tất cả các Tiêu đề đến từ yêu cầu tới fastcgi.

+2

@Dyna Không, không nên. @Derek Dowling: Giải pháp đầu tiên của bạn là sai, 'fastcgi_pass_header' làm ngược lại với những gì bạn giải thích: nó cho phép vượt qua tiêu đề (s) từ máy chủ fastcgi trả lời lại cho khách hàng, không phải từ yêu cầu ban đầu đến máy chủ fastcgi. Mục đích của chỉ thị này là giữ lại các tiêu đề trả lời đặc biệt có thể được diễn giải bởi các proxy ngược (như 'X-Accel-Buffering',' X-Accel-Limit-Rate'…) trong một số trường hợp cụ thể. –

+0

Nó không phải là corrent theo doc: Giấy phép đi qua các trường tiêu đề bị vô hiệu hóa từ một máy chủ FastCGI cho khách hàng. –

0

Các URL đến các bài viết wiki nginx ở trên bị hỏng.

nginx cho thấy giá trị tiêu đề yêu cầu thông qua các biến bắt đầu bằng $ http_, do đó, một tiêu đề theo yêu cầu của HTTP_USER_AGENT có sẵn qua $ HTTP_USER_AGENT.

Tương tự, tiêu đề yêu cầu có tên CHICKEN_SOUP sẽ có sẵn qua $ http_chicken_soup.

Ví dụ dưới đây cho biết cách vượt qua tiêu đề yêu cầu HTTP Cấp phép HTTP tới các tập lệnh PHP chạy dưới php-fpm (trình quản lý quy trình FastCGI PHP).

location ~ \.php$ { 
    fastcgi_pass unix:/path/to/socket; 
    fastcgi_index index.php; 
    fastcgi_param HTTP_AUTHORIZATION $http_authorization; 
    ... other settings 
} 
Các vấn đề liên quan