Bagaimana cara mengirimkan parameter khusus ke PHP dari Nginx?


10

Saya menggunakan Nginx 1.2.4dalam kombinasi dengan PHP-FPM 5.4.8dengan fastcgilulus dan mencoba untuk melewati parameter kustom untuk PHP. Berikut adalah opsi yang saya temukan sejauh ini:

  • menggunakan envarahan untuk mengatur variabel lingkungan nginxdan mengambilnya dengan getenv()atau $_ENVdari PHP. Masalahnya adalah bahwa envhanya beroperasi dalam mainkonteks sedangkan saya perlu mengatur parameter dalam serverkonteks.

  • menggunakan fastcgi_paramarahan karena dirancang untuk itu.

Saya telah mencoba mengubah nilai beberapa parameter menggunakan fastcgi_paramtetapi tidak berhasil:

nginx:

fastcgi_param PATH_INFO "/var/tmp";

PHP:

Saya memeriksa semua array standar yang dapat saya temukan:

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>';

Satu-satunya yang ditampilkan PATH_INFOadalah $_SERVER:

var_dump($_SERVER); // ["PATH_INFO"]=> string(0) ""

Tetapi nilai yang saya tetapkan nginxtidak diperhitungkan.

T1: Apakah saya perlu mengonfigurasi apa pun di nginx/phplevel agar fastcgi_paramarahan mulai berlaku?

T2: Apakah fastcgi_paramarahan terbatas pada daftar parameter yang telah ditentukan (misalnya saya dapat mengatur PATH_INFOtetapi tidak variabel kustom saya sendiri seperti FOO)?

T3: Jika ya ke Q2: apakah ada cara untuk mengirimkan parameter khusus ke PHP dari Nginx?

Jawaban:


14

Anda dapat memberikan parameter tambahan melalui arahan fastcgi_param. Saya yakin karena saya menggunakan fungsi ini.

Konfigurasi nginx teladan saya

server {
    server_name localhost;
    include     conf/defaults.conf;
    root        /var/www;

    location    ~* "\.php$" {
        fastcgi_param CRS "crs";
        include conf/fastcgi-php.conf;
    }                                           
}

Dan bagian dari output phpinfo ():

...
_SERVER["USER"] fcgi
_SERVER["HOME"] /dev/null
_SERVER["FCGI_ROLE"]    RESPONDER
_SERVER["REMOTE_USER"]  no value
_SERVER["CRS"]  crs
_SERVER["QUERY_STRING"] no value

Saya pernah fastcgi.confdan fastcgi_paramstidak fastcgi-php.conf: dari mana Anda mendapatkannya? Apakah Anda keberatan membagikannya melalui pastebin?
Maks

Ini adalah konfigurasi khusus saya tetapi tidak ada keajaiban: fastcgi_pass 127.0.0.1:1028; fastcgi_index index.php; include conf/fastcgi.conf; dan conf / fastcgi.conf berisi params dan pengaturan yang diperlukan
fastcgi

Satu-satunya hal yang dapat saya pikirkan adalah bahwa saya lupa memasukkan sesuatu ke dalam conf ketika mengkompilasi nginx. Di sisi lain, saya lupa untuk memasukkan hal-hal ketika menyusun nginxdi masa lalu, tetapi nginxakan menolak untuk mulai mengatakan itu tidak tahu tentang beberapa arahan yang saya gunakan: di sini tidak ada, tidak ada keluhan, tetapi belum fastcgi_parambekerja: (Saya akan mencoba ubuntu nginxpaket aslinya dan melihat bagaimana kelanjutannya.
Max

Ya, ini berfungsi dengan ubuntu nginxpaket default ...
Max

@ user64204 ini jelas merupakan masalah dengan konfigurasi Anda, dan paket ubuntu hanya menimpa beberapa file konfigurasi Anda. Tetapi karena Anda tidak menunjukkan kepada kami konfigurasi lengkap Anda, tidak ada cara untuk menentukan apa masalahnya sebenarnya.
VBart

0

Anda dapat memodifikasi permintaan dengan mengirimkan variabel khusus Anda di header permintaan, contoh:

proxy_set_header Variable-name-here Value-here;

Dan kemudian Anda bisa membaca nilai-nilai itu dari header permintaan di skrip PHP Anda.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.