Tôi đang sử dụng Nginx 1.2.4kết hợp với PHP-FPM 5.4.8với một fastcgiđường chuyền và cố gắng để vượt qua các thông số tùy chỉnh để PHP. Dưới đây là các tùy chọn tôi đã tìm thấy cho đến nay:
sử dụng
envchỉ thị để đặt biến môi trường trongnginxvà tìm nạp nó vớigetenv()hoặc$_ENVtừ đóPHP. Vấn đề làenvchỉ hoạt động trongmainngữ cảnh trong khi tôi cần đặt tham số trongserverngữ cảnh.sử dụng
fastcgi_paramchỉ thị như được thiết kế cho điều đó.
Tôi đã thử thay đổi giá trị của một số tham số bằng cách sử dụng fastcgi_paramnhưng không thành công:
nginx:
fastcgi_param PATH_INFO "/var/tmp";
PHP:
Tôi đã kiểm tra tất cả các mảng được xác định trước mà tôi có thể tìm thấy:
echo '<pre>';
echo "\n".'$GLOBALS'."\n"; var_dump($GLOBALS);
echo "\n".'$_SERVER'."\n"; var_dump($_SERVER);
echo "\n".'$_GET'."\n"; var_dump($_GET);
echo "\n".'$_POST'."\n"; var_dump($_POST);
echo "\n".'$_FILES'."\n"; var_dump($_FILES);
echo "\n".'$_REQUEST'."\n"; var_dump($_REQUEST);
echo "\n".'$_SESSION'."\n"; var_dump($_SESSION);
echo "\n".'$_ENV'."\n"; var_dump($_ENV);
echo "\n".'$_COOKIE'."\n"; var_dump($_COOKIE);
echo "\n".'$php_errormsg'."\n"; var_dump($php_errormsg);
echo "\n".'$HTTP_RAW_POST_DATA'."\n"; var_dump($HTTP_RAW_POST_DATA);
echo "\n".'$http_response_header'."\n"; var_dump($http_response_header);
echo "\n".'$argc'."\n"; var_dump($argc);
echo "\n".'$argv'."\n"; var_dump($argv);
echo '</pre>';
Người duy nhất thể hiện PATH_INFOlà $_SERVER:
var_dump($_SERVER); // ["PATH_INFO"]=> string(0) ""
Nhưng giá trị tôi đặt nginxkhông được tính đến.
Q1: Tôi có cần cấu hình bất cứ thứ gì ở nginx/phpcấp độ để lệnh fastcgi_paramcó hiệu lực không?
Câu 2: fastcgi_paramLệnh có giới hạn trong danh sách các tham số được xác định trước không (ví dụ: tôi có thể đặt PATH_INFOnhưng không phải là biến tùy chỉnh của riêng mình như FOO)?
Câu 3: Nếu có cho Q2: có cách nào để truyền tham số tùy chỉnh cho PHP từ Nginx không?
fastcgi.confvàfastcgi_paramskhôngfastcgi-php.conf: bạn lấy nó từ đâu? Bạn có nhớ chia sẻ nó qua pastebin?