Nginx $ document_root $ fastcgi_script_name ve $ request_filename


16

Ayar dosyamda belirlediğimde hiçbir fark göremiyorum

 fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

Veya:

 fastcgi_param  SCRIPT_FILENAME    $request_filename;

Sırasıyla ne yapıyorlar? İkisinden biri diğerinden daha mı iyi?

Şimdiden teşekkürler.

Yanıtlar:


24

Belgelerin söyledikleri:

$ REQUEST_FILENAME

Bu değişken, direktif kökü veya takma ad ve URI isteğinden oluşturulan geçerli istek için dosya yoluna eşittir;

$ document_root

Bu değişken, geçerli istek için yönerge kökü değerine eşittir;

$ fastcgi_script_name

Bu değişken URI isteğine eşittir veya URI bir eğik çizgi ile sonlanırsa, URI isteği artı fastcgi_index tarafından verilen dizin dosyasının adıdır. Bu değişkeni, özellikle PHP'deki komut dosyasının adını belirlemek için kullanılan SCRIPT_FILENAME ve PATH_TRANSLATED yerine kullanmak mümkündür.

Burada yazıldığı gibi, fastcgi_index veya fastcgi_split_path_info kullanılırken en azından bir fark vardır . Belki daha fazlası var ... şu anda bildiğim bu.

Misal

İsteği alırsınız /info/ve aşağıdaki yapılandırmaya sahip olursunuz :

fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /home/www/scripts/php$fastcgi_script_name;

SCRIPT_FILENAMEeşittir /home/www/scripts/php/info/index.php, ama kullanmak $request_filenamesadece olurdu /home/www/scripts/php/info/.

Yapılandırması fastcgi_split_path_infoda önemlidir. Daha fazla yardım için buraya bakın: http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_split_path_info


Bu doğru gibi görünmüyor (en azından artık değil). Steely Wing'in cevabına bakınız.
Rimas Kudelis

@RimasKudelis Bunu bir süredir kullanmadım, ancak belgeler değişmedi, bu yüzden hala çalışmasını bekliyorum - belki de fastcgi_split_path_infoihtiyaçlarınız için bir tweak. Steely Wing'in cevabı, belgelere değil, tecrübeye dayanıyor gibi görünüyor.
SimonSimCity

evet ve yorumum da deneyime dayanıyor. fastcgi_split_path_infoTakma ad önekimi iki yakalamanın dışına koyarak hariç tutmaya çalıştım , ancak herhangi bir etkisi olmadı. Oysa takma ad olup olmadığına bakılmaksızın cazibe $request_filenamegibi SCRIPT_FILENAMEçalışır.
Rimas Kudelis

Aslında, NginX belgelerinin neden SCRIPT_FILENAMEilk ek olarak iki dizeyi birleştirmeyi önerdiğini bile anlayamıyorum $request_filename. Yukarıdaki örnek aslında yanlıştır, çünkü $request_filenameaslında bu dosya açıkça talep edilmese bile, sadece bir yolun aksine bir dosya adı içerir. En azından dünkü sonucum bu.
Rimas Kudelis

7

TLDR

Ben kullanımını tavsiye $request_filenameiçin SCRIPT_FILENAME.


rootDirektif kullanıyorsanız

$document_root$fastcgi_script_nameeşittir $request_filename.

aliasDirektif kullanıyorsanız

$document_root$fastcgi_script_nameyanlış yol döndürür, çünkü $fastcgi_script_nameURL'nin yolu, yolla ilgili değildir $document_root.

Misal

Konfigürasyonunuz varsa

location /api/ {
    index  index.php index.html index.htm;
    alias /app/www/;
    location ~* "\.php$" {
        try_files      $uri =404;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        # fastcgi_param  SCRIPT_FILENAME  $request_filename;
    }
}

İstek /api/testing.php:

  • $document_root$fastcgi_script_name == /app/www//api/testing.php
  • $request_filename == /app/www/testing.php

İstek /api/:

  • $document_root$fastcgi_script_name == /app/www//api/index.php
  • $request_filename == /app/www/index.php

Ve kullanırsanız $request_filename, indexyönerge kullanarak dizin ayarlamanız gerekir , fastcgi_indexçalışmaz.


2

Sanırım bu satırlar 'fastcgi_params' dosyasından alındı.

Temel olarak, söz konusu olduğunda herhangi bir hata almazsınız, SCRIPT_FILENAMEçünkü vhost dosyanızda kök yönergelerinizi tanımladığınızda zaten tanımlanmıştır. Bu yüzden açıkça kullanarak vhost dosyasında fastcgi_paramdeğerini kullanarak SCRIPT_FILENAMEkök yönergesi alınacaktır .. Ama BİR ÖNEMLİ NOKTASI BURADA. Nginx istekleri php sunucusuna göndermek için ihtiyaç duyduğu başka bir değişken daha vardır $fastcgi_script_nameve tekrarlayan URL'leri ve eğik çizgi ile biten uri'nin hatalarını önlemek için iyi tanımlamanız gerekir.

Sonuç :

Her şeyin süper güzel çalışması için herkes SCRIPT_FILENAME/ etc / nginx klasöründe bulunan 'fastcgi_params' dosyasında veya php konum bloğuna aşağıdaki satırı ekleyerek sitelerin kullanılabilir klasöründe bulunan sitenizin vhost'unda açıkça tanımlamalıdır :

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

veya yukarıda yazdığınız gibi 'fastcgi_params' dosyasına dahil edilmiştir, her iki şekilde de aynıdır. ngnix'i PHP-FPM'ye bağlamak için daha fazla bilgi için şu adrese gidin:

https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/

Umarım gelecekte herkese yardımcı olur çünkü bunu anlamak çok zamanımı aldı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.