nginx + php-fpm (chroot). Nenhum arquivo de entrada especificado

2

OS: Centos PHP: 5.5.6 Nginx: 1.4.4

Nginx conf

server {
listen 80;
server_name example.ltd;

root /srv/example.ltd/www;
index index.php;
access_log /srv/example.ltd/logs/nginx-main.log main;
error_log /srv/example.ltd/logs/nginx-error.log warn;

autoindex on;

location / {
    try_files $uri $uri/ /index.php;
}

location ~ \.php$ {

fastcgi_pass unix:/srv/example.ltd/tmp/example.ltd.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_NAME /www$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_param SERVER_NAME $host;
    fastcgi_param SCRIPT_FILENAME /www$fastcgi_script_name;
    include fastcgi_params;
}

}

configuração do pool do php-fpm

[example.ltd]
listen = /srv/example.ltd/tmp/example.ltd.sock
listen.allowed_clients = 127.0.0.1
listen.owner = example.ltd
listen.group = example.ltd
listen.mode = 0660
user = example.ltd
group = example.ltd
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 50
request_slowlog_timeout = 60
chroot = /srv/example.ltd
chdir = /www
catch_workers_output = yes
security.limit_extensions = .php .php3 .php4 .php5
env[HOSTNAME] = example.ltd
env[TMP] = /srv/example.ltd/tmp
env[TMPDIR] = /srv/example.ltd/tmp
env[TEMP] = /srv/example.ltd/tmp
php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i [email protected]
php_admin_value[error_log] = /srv/example.ltd/logs/php-fpm-error.log
slowlog = /srv/example.ltd/logs/php-fpm-slow.log
php_admin_flag[log_errors] = on
php_flag[display_errors] = on
php_value[session.save_handler] = files
php_value[session.save_path] = /srv/example.ltd/sessions
php_value[soap.wsdl_cache_dir] = /srv/example.ltd/wsdlcache
php_admin_value[disable_functions] = dl,exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec
php_admin_value[open_basedir] = /srv/example.ltd:/usr/share/nginx/html

ls -la de / srv

drwxrwx---  8 example.ltd example.ltd 4096 Dec  2 11:57 example.ltd

ps aux | grep example.ltd

500      23102  0.0  2.7 702936  7304 ?        S    13:38   0:00 php-fpm: pool example.ltd
500      23103  0.0  2.7 702936  7308 ?        S    13:38   0:00 php-fpm: pool example.ltd
500      23104  0.0  2.7 702936  7304 ?        S    13:38   0:00 php-fpm: pool example.ltd
500      23105  0.0  2.7 702936  7304 ?        S    13:38   0:00 php-fpm: pool example.ltd
500      23106  0.0  2.7 702936  7340 ?        S    13:38   0:00 php-fpm: pool example.ltd

id example.ltd

uid=500(example.ltd) gid=500(example.ltd) groups=500(example.ltd),499(nginx)

id nginx

uid=498(nginx) gid=499(nginx) groups=499(nginx),500(example.ltd)

Eu tenho erro:

Unable to open primary script: /www/index.php (No such file or directory)

Eu tento alterações no arquivo de configuração do nginx de

fastcgi_param SCRIPT_FILENAME /www$fastcgi_script_name;

para

fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;

tente também:

fastcgi_param SCRIPT_FILENAME www$fastcgi_script_name;

mas tem erro:

Unable to open primary script: /index.php (No such file or directory)

p.s. arquivos estáticos funcionam unde nginx, scripts php não funcionam

o que estou fazendo de errado?

    
por user201166 02.12.2013 / 11:01

2 respostas

1

No pool php-fpm

Você deveria ter

prefix = /srv/example.ltd

Em seguida, corrija alguns caminhos a serem relacionados ao chroot

chroot = $prefix
listen = tmp/example.ltd.sock
chdir = /
# yes, this is in /srv/example.ltd/tmp
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
php_admin_value[error_log] = /logs/php-fpm-error.log
php_value[session.save_path] = /srv/example.ltd/sessions
php_value[soap.wsdl_cache_dir] = /wsdlcache
# only paths INSIDE your chroot
php_admin_value[open_basedir] = /www:/lib
# same here, only INSIDE
php_value[include_path] =".:/www:/www/include:/lib"
# this one does not use the chroot
slowlog = /srv/example.ltd/logs/php-fpm-slow.log

Para o sendmail_path eu tenho certeza que isso não vai funcionar, você precisaria do utilitário e librairies e dispositivos usando o chroot no yout chroot, geralmente para php-fpm chrooted é melhor usar o SMTP no TCP / IP e não sendmail.

No lado nginx, parece OK, você poderia usar fastcgi_pass unix:$document_root/../tmp/example.ltd.sock; também funcionaria. Aqui está o que eu tenho do meu lado:

fastcgi_split_path_info ^(.+\.php)(/.+)$
fastcgi_param SCRIPT_FILENAME /www$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT /www;
fastcgi_param HOME /www;
fastcgi_param PATH_TRANSLATED /www$fastcgi_path_info;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param HOSTNAME $server_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;
fastcgi_param  REDIRECT_STATUS    200;
    
por 05.12.2013 / 12:35
0

@regilero: seu exemplo de como configurar o php-fpm não funciona, a mesma coisa, é procurar pelos scripts em:

root /srv/example.ltd/www;

não em

DOCUMENT_ROOT / www;

    
por 23.09.2014 / 12:46