У меня довольно простая установка nginx/1.4.7 (из Debian/unstable), и я пытаюсь заставить PHP-скрипты работать внутри UserDir.
server { listen 8083; server_name sid0.local; index index.php index.html; root /data/www/sid0.local; location / { try_files $uri $uri/ =404; } # PHP-FPM location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; } # UserDir location ~ ^/~(.+?)(/.*)?$ { alias /home/$1/www$2; autoindex on; } }
Доступ к http://sid0.local/~dummy
работает, он перечисляет содержимое /home/dummy/www/
и я могу получить доступ к файлам там. Ниже ~dummy/bar
находится файл с именем index.php
но доступ к http://sid0.local/~dummy/bar/
приводит к ужасному «Файл не найден». ошибка (не 404). error.log
имеет:
2014/04/30 23:07:44 [error] 4237#0: *9 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 192.168.0.103, server: sid0.local, request: "GET /~dummy/bar/ HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "sid0.local:8083"
Теперь, похоже, у многих людей есть эта проблема, и некоторые из них даже публикуют решения, например, удостоверившись, что для SCRIPT_FILENAME
установлено значение request_filename
- но это уже имеет место (это установлено в fastcgi_params).
Однако, выполнение strace(1)
для процесса nginx дает (отредактировано для удобства чтения):
4045 connect(16, {sa_family=AF_FILE, path="/var/run/php5-fpm.sock"}, 110) = 0 4045 writev(16, [{"\1\1\0\1\0\10\0\0\0\1\0\0\0\0\0\0\1\4\0\1\3T\4\0\f\0 QUERY_STRING\16\3 REQUEST_METHODGET\f\0 CONTENT_TYPE\16\0 CONTENT_LENGTH\0170 SCRIPT_FILENAME/data/www/sid0.local/~dummy/bar/index.php\v\25 SCRIPT_NAME/~dummy/bar/index.php\v\f REQUEST_URI/~dummy/bar/\f\25 DOCUMENT_URI/~dummy/bar/index.php\r\33 DOCUMENT_ROOT/data/www/sid0.local
Как вы можете видеть, SCRIPT_FILENAME
НЕ request_filename
, но вместо этого document_root+fastcgi_script_name
- следовательно, 404, конечно.
Итак, я предполагаю, что мой вопрос: почему мой SCRIPT_FILENAME
(я даже установил его на fastcgi_script_name
, не повезло) и как я могу запустить PHP-скрипты внутри UserDir
?