Tôi đang sử dụng Nginx 1.2.4
kết hợp với PHP-FPM 5.4.8
vớ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
env
chỉ thị để đặt biến môi trường trongnginx
và tìm nạp nó vớigetenv()
hoặc$_ENV
từ đóPHP
. Vấn đề làenv
chỉ hoạt động trongmain
ngữ cảnh trong khi tôi cần đặt tham số trongserver
ngữ cảnh.sử dụng
fastcgi_param
chỉ 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_param
như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_INFO
là $_SERVER
:
var_dump($_SERVER); // ["PATH_INFO"]=> string(0) ""
Nhưng giá trị tôi đặt nginx
không được tính đến.
Q1: Tôi có cần cấu hình bất cứ thứ gì ở nginx/php
cấp độ để lệnh fastcgi_param
có hiệu lực không?
Câu 2: fastcgi_param
Lệ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_INFO
như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.conf
vàfastcgi_params
khôngfastcgi-php.conf
: bạn lấy nó từ đâu? Bạn có nhớ chia sẻ nó qua pastebin?