我使用PHP 5.3.9和nginx设置了一个新的服务器,所以我使用php-fpm SAPI选项编译了PHP。 本身在nginx中使用以下服务器条目效果很好:
server { listen 80; server_name domain.com www.domain.com; root /var/www/clients/domain.com/www/public; index index.php; log_format gzip '$remote_addr - $remote_user [$time_local] "$request" $status $bytes_sent "$http_referer" "$http_user_agent" "$gzip_ratio"'; access_log /var/www/clients/domain.com/logs/www-access.log; error_log /var/www/clients/domain.com/logs/www-error.log error; location ~\.php$ { fastcgi_pass 127.0.0.1:9001; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/clients/domain.com/www/public$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_script_name; include /etc/nginx/fastcgi_params; } }
它服务器我的PHP文件就好了。 为了增加安全性,我想chroot我的FPM实例,所以我在这个FPM实例的conf文件中添加了以下几行:
# FPM config chroot = /var/www/clients/domain.com
并更改了nginxconfiguration:
#nginx config for chroot location ~\.php$ { fastcgi_pass 127.0.0.1:9001; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME www/public$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_script_name; include /etc/nginx/fastcgi_params; }
有了这些改变,nginx给我一个任何PHP脚本的File not found消息。 查看错误日志,我可以看到它预先传递给传递给fastcgi的DOCUMENT_ROOTvariables的rootpath,所以我尝试在位置块中覆盖它,如下所示:
fastcgi_param DOCUMENT_ROOT /www/public/; fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
但是我仍然得到相同的错误,并且debugging日志显示发送到PHP-FPM的完整,未连接的path。
我错过了什么让这个工作?
看起来你忘了一个/ 。
fastcgi_param SCRIPT_FILENAME www/public$fastcgi_script_name;
应该读:
fastcgi_param SCRIPT_FILENAME /www/public$fastcgi_script_name;
我有同样的情况,这是我的愿望:
fpmconfiguration:
prefix = /var/www/example.com chroot = $prefix chdir = / listen = tmp/php5-fpm.sock slowlog = log/$pool.log.slow
nginxconfiguration:
location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/www/example.com/tmp/php5-fpm.sock; fastcgi_param SCRIPT_FILENAME /htdocs$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param DOCUMENT_ROOT /htdocs; }
/var/www/example.com的文件夹结构
drwxr-x--- 6 www-data www-data 4096 May 22 10:57 . drwxr-xr-x 10 root root 4096 May 22 08:52 .. drwxr-x--- 2 www-data www-data 4096 May 22 10:57 htdocs drwxr-x--- 2 www-data www-data 4096 May 22 10:34 log drwxr-x--- 2 www-data www-data 4096 May 22 10:56 tmp
Nginx不知道你是否已经在你的PHP-FPM上设置了chroot。 所以,你仍然需要提供fastcgi_param中的完整path。 基本上,你最初的configuration是你需要的。