nginx fastcgi "Невідомий основний скрипт" під час налаштування userdir


10

Я ненавиджу налаштування nginx. Це так складно. Як змусити PHP працювати в користувальницьких режимах? Ось відповідна частина мого nginx.conf:

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

Це дає мені помилку: FastCGI sent in stderr: "Primary script unknown" while reading response header from upstreamу журналі помилок nginx.

Ось моє /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 неправильно вирішує ім'я сценарію. Я ненавиджу казати nginx, де шукати в моїй файловій системі, писати власні реггеси для того, що має бути вбудованим (або принаймні стандартизованим та документованим) функціоналом.


Де решта? тобто /etc/nginx/fastcgi.conf?
Майкл Хемптон

@MichaelHampton Я щойно додав цю інформацію
nnyby

Відповіді:


9

Проблема полягає в тому, що у своєму fastcgi.conf ви визначаєте SCRIPT_FILENAMEяк, $document_root$fastcgi_script_name;але потім використовуєте aliasdirecive для встановлення шляху.

Ви повинні оновити своє SCRIPT_FILENAMEвикористання$request_filename

Ви також можете повернутися до вкладеного місця, якщо хочете. Якщо після цього ви все-таки отримаєте цю помилку, я тут задокументував усі можливості: http://blog.martinfjordvald.com/2011/01/no-input-file-specified-with-php-and-nginx/

Переконайтеся, що може бути кілька інших причин.


4

Коли ви визначаєте переадресації, псевдоніми і ви використовуєте fastcgi в конфіденційності вашого сайту в nginx, ви можете спробувати це, щоб вони працювали:

Змінити:

розташування ~ \ .php $ {
...
fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name;
...
}


В:

розташування ~ \ .php $ {
...
fastcgi_param SCRIPT_FILENAME $ request_filename;
fastcgi_param REQUEST_URI $ uri? $ args;
...
}

Якщо це не працює, спробуйте використовувати, як було сказано вище, без REQUEST_URI, так це буде:

розташування ~ \ .php $ {
...
fastcgi_param SCRIPT_FILENAME $ request_filename;
...
}


Це працювало для мене в OSX Sierra
ajaybc

2

Спробуйте використовувати окремий locationблок для PHP-скриптів у userdirs. Це не потрібно вкладати.

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

Дякую за пропозицію! Зараз я трохи ближче, але все одно отримую ту саму помилку.
nnyby
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.