userdir yapılandırılırken nginx fastcgi “Birincil komut dosyası bilinmiyor”


10

Nginx'i yapılandırmaktan nefret ediyorum. Çok karmaşık. PHP'nin kullanıcı dizinlerimde çalışmasını nasıl sağlayabilirim? İşte benim nginx.conf ilgili kısmı:

    location ~ ^/~(.+?)(/.*)?$ {
        autoindex on;
        autoindex_exact_size off;
        alias /home/$1/public_html$2;

        location ~ \.php {
            include /etc/nginx/fastcgi.conf;
            fastcgi_intercept_errors on;
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index index.php;
        }
    }

Bu bana hata veriyor: FastCGI sent in stderr: "Primary script unknown" while reading response header from upstreamnginx hata günlüğünde.

İşte benim /etc/nginx/fastcgi.conf:

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

Nginx komut dosyasının adını doğru bir şekilde çözmediğini varsayıyorum. Nginx'e dosya sistemime nereden bakacağımı söylemekten nefret ediyorum, yerleşik (veya en azından standartlaştırılmış ve belgelenmiş) işlevsellik için özel regexes yazıyorum.


Geri kalanı nerede? yani /etc/nginx/fastcgi.conf?
Michael Hampton

@MichaelHampton Bu bilgiyi ekledim
nnyby

Yanıtlar:


9

Sorun şu ki, fastcgi.conf dosyasında SCRIPT_FILENAMEolarak tanımlayabilirsiniz , $document_root$fastcgi_script_name;ancak aliasyolu ayarlamak için direcive öğesini kullanırsınız.

SCRIPT_FILENAMEKullanımınız için güncellemelisiniz$request_filename

İsterseniz, yuvalanmış konuma da geri dönebilirsiniz. Daha sonra hala bu hatayı alıyorsanız, tüm olasılıkları burada belgeledim: http://blog.martinfjordvald.com/2011/01/no-input-file-specified-with-php-and-nginx/

Lütfen başka nedenler olabileceğinden emin olun.


4

Yönlendirmeler, takma adlar tanımladığınızda ve sitenizin nginx içindeki confcgi dosyasında fastcgi kullandığınızda, çalışmasına izin vermek için bunu deneyebilirsiniz:

Değişiklik:

konum ~ \ .php $ {
...
fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name;
...
}


İçine:

konum ~ \ .php $ {
...
fastcgi_param SCRIPT_FILENAME $ istek_dosyaadı ;
fastcgi_param REQUEST_URI $ uri? $ argümanlar;
...
}

Bu işe yaramazsa, REQUEST_URI olmadan yukarıda belirtildiği gibi kullanmayı deneyin, bu yüzden:

konum ~ \ .php $ {
...
fastcgi_param SCRIPT_FILENAME $ istek_dosyaadı ;
...
}


Bu benim için OSX Sierra'da çalıştı
ajaybc

2

Kullanıcı locationdizinlerindeki PHP komut dosyaları için ayrı bir blok kullanmayı deneyin . Bunun yuvalanması gerekmez.

location ~ ^/~([^/]+)/(.+\.php)$ {
    alias /home/$1/public_html/$2;
    include /etc/nginx/fastcgi.conf;
    fastcgi_intercept_errors on;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
}

Önerin için teşekkürler! Şimdi biraz daha yakınım ama yine de aynı hatayı alıyorum.
nnyby
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.