我尝试使用 php-fpm 和 mysql 配置 chroot。我设法解决了这个问题,但是当我尝试访问 index.php 以外的文件(如 css、png 等)时,它一直给出 404。
然而,当我禁用 chroot 时,它 100% 正常工作。
我的目录结构是这样的;
/var/www #my chroot directory
/var/www/tmp #related pid and sock files
/var/www/log #related log directory
/var/www/public_html #wordpress directory
我的 nginx 配置如下;
server {
listen 80; ## listen for ipv4; this line is default and implied
root /public_html;
index index.php;
server_name _;
location / {
index index.php;
}
if (!-e $request_filename) {
rewrite ^.*$ /index.php last;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /public_html;
}
location ~ \.php$ {
fastcgi_pass unix:/var/www/tmp/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param APPLICATION_ENV production;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
您认为我做错了什么?
谢谢
答案1
我假设您正在使用 PHP-FPM 的 chroot 指令来应用 chroot 环境。也就是说,nginx 不在 chroot 中运行。
如果是这种情况,问题就在于 nginx 配置中的根配置变量。
你应该使用:
root /var/www/public_html;
然后,在 FastCGI 配置部分,您应该在后面添加以下几行include fastcgi_params
:
fastcgi_param SCRIPT_FILENAME /public_html$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT /public_html;
这样,nginx使用的是真正的非chroot的目录结构,而PHP-FPM使用的是chroot环境,并从根据chroot进行调整的nginx中获取其环境信息。