当我尝试访问info.php
时,出现File not found.
错误。
我尝试了一些教程无济于事。
CONFIGS: 默认值:
server {
listen 80;
listen [::]:80 default ipv6only=on;
server_name localhost;
location / {
root /var/www;
index index.html index.htm index.php;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
fastcgi_pass 127.0.0.1:7777;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
fastcgi_buffers 256 128k;
#fastcgi_buffer_size 16k;
#fastcgi_busy_buffers_size 256k;
fastcgi_connect_timeout 300s;
fastcgi_send_timeout 300s;
fastcgi_read_timeout 300s;
include fastcgi_params;
}
}
问题是什么?
答案 0 :(得分:16)
如果那个info.php在/ var / www中,那么指示fast_cgi查找
是错误的/usr/share/nginx/html/info.php;
对html和php使用相同的根目录。此外,root
和index
参数应位于特定位置之外,但非常特殊的用途。
server {
listen 80;
listen [::]:80 default ipv6only=on;
server_name localhost;
root /var/www;
index index.html index.htm index.php;
#pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
fastcgi_pass 127.0.0.1:7777;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_buffers 256 128k;
fastcgi_connect_timeout 300s;
fastcgi_send_timeout 300s;
fastcgi_read_timeout 300s;
include fastcgi_params;
}
}
不用说,你仍然需要确保你的php-fpm服务正在端口7777上侦听。常见的情况是让它在9000端口监听。
答案 1 :(得分:10)
如果您检查了所有内容并且配置正确,那么我得到了最后一点:
/etc/php-fpm.d/www.conf
答案 2 :(得分:1)
server {
listen 80;
listen [::]:80 default ipv6only=on;
server_name localhost;
root /var/www;
location / {
index index.php;
}
location ~ \.php(?:$|/) {
fastcgi_pass 127.0.0.1:7777;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_buffers 256 128k;
fastcgi_connect_timeout 300s;
fastcgi_send_timeout 300s;
fastcgi_read_timeout 300s;
include fastcgi_params;
}
}
答案 3 :(得分:1)
注意,如果query
是符号链接,请将其更改为c.getString(0)
,否则nginx将不会超过符号链接,您将收到public String getLyrics(long id) {
String rv = "no lyrics found";
String whereclause = "id=?";
String[] whereargs = new String[]{String.valueOf(id)};
String[] columns = new String[]{"Lyrics"};
Cursor c = this.getWritableDatabase().query("Songs",columns,whereclause,weherargs,null,null,null);
if (c.moveToFirst()) {
rv = c.getString(c.getColumnIndex("Lyrics"));
}
c.close();
return rv;
}
错误
答案 4 :(得分:0)
我仔细看了一下,最后发现FPM没有运行:-s在我的情况下,一个简单的服务php7.2-fpm重启就行了!
答案 5 :(得分:0)
我遇到了这个问题,这里没有答案。对我来说,这个问题最终是由SELinux引起的。我disabled SELinux并解决了问题。
请注意,禁用SELinux确实会对安全性产生影响。几乎肯定有解决此问题的更好方法,但是禁用SELinux可以达到我的目的。
答案 6 :(得分:0)
我在尝试解决类似问题时遇到了这个问题。因此,我将添加当我找到它时发现的解决方案。这是在Arch上的,但是与systemd相关。
此解决方案适用于我的开发机器,出于充分的原因,您不应从/ home文件夹中运行公共站点。
我将php-fpm和nginx配置为以我的用户身份运行。编辑以下文件,然后删除ProtectHome = true行
sudo vi /etc/systemd/system/multi-user.target.wants/php-fpm.service
重新加载,然后重新启动所有内容;
systemctl daemon-reload
systemctl restart nginx.service
systemctl restart php-fpm.service
答案 7 :(得分:0)
在location
nginx部分中,如果使用root
,则$document_root$fastcgi_script_name
的值正确。但是,如果您使用alias
,则该值是错误的。使用alias
时,您需要使用$request_filename
而不是$document_root$fastcgi_script_name
。
location /myapp {
alias /home/site/www/myapp;
location ~* "\.php$" {
fastcgi_pass php_fpm_server:9000;
fastcgi_index index.php;
# Works in all cases.
fastcgi_param SCRIPT_FILENAME $request_filename;
## Not work for 'alias' directive, only for 'root' directive.
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
基于根或别名指令以及请求URI的当前请求的文件路径
当前请求的根或别名指令的值
请求URI,或者,如果URI以斜杠结尾,则请求URI,其索引文件名由fastcgi_index伪指令配置。此变量可用于设置SCRIPT_FILENAME和PATH_TRANSLATED参数,这些参数确定PHP中的脚本名称。例如,对于带有以下指令的“ / info /”请求