所以在我的服务器上我有一个info.php文件,我可以正常运行,所有读数看起来都不错。我也可以运行其他几个文件,没有问题。 Buuuuut,index.php作为包含所有PHP原始代码的文件发送给我,这非常糟糕。除此之外,进入基页,根本不提供单个文件,特别是index.php。
这是我的nginx配置:
server {
server_name somedamnserver;
root /var/www;
index index.php index.html;
location / {
# This is cool because no php is touched for static content
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
#fastcgi_split_path_info ^(.+\.php)(/.+)$;
#NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fastcgi_intercept_errors on;
include fastcgi_params;
}
}
我的php.ini和fpm / pool.d / www.conf文件似乎设置正确,但我也可以在这里链接它们。
我在这里的智慧结束,我完全不明白为什么这个服务器的恶霸会对我这么做。 :(
答案 0 :(得分:1)
这是由两个问题引起的。
首先,当你执行try_files $uri $uri/ /index.php;
因为index.php是最后一个元素时,nginx会重新处理整个服务器块。
其次,因为第一个位置块是/
,它与/index.php
匹配,在第二个位置块重新处理为原始文件。
你几乎肯定不想像你那样写你的积木。您应该明确列出您的静态内容类型,它们将作为原始文件显示给服务器。其他所有内容都应该传递给PHP后端。 e.g。
location ~* ^[^\?\&]+\.(html|jpg|jpeg|json|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|svg|woff|ttf)$ {
try_files $uri /index.php?file=$1;
#access_log off;
expires 24h;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
location / {
#NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
set $originalURI $uri;
try_files $uri /index.php /50x_static.html;
fastcgi_param QUERY_STRING q=$originalURI&$query_string;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fastcgi_intercept_errors on;
include fastcgi_params;
}
请注意,在最后一个块中,有一个小的jiggery pokery来保存查询字符串,您可能需要也可能不需要。
btw启用rewrite_log on;
可以帮助您修复类似的问题。
答案 1 :(得分:0)
在研究了日志后,我发现了实际问题是什么,感谢Danack建议重写日志选项。 所以问题主要是PHP依赖,如php5-json和php5-mysql更精确(不知道其中任何一个被卸载)然后以mysql服务器设置问题结束,这显然意味着127.0。 0.1和localhost不是一回事。
显然页面空白或不存在的原因是因为他们500错误页面丢失或者我的安装中只是空白。
希望这对其他人有所帮助,我现在已经为这一周努力了。
<强>更新强> 再次向Danack致敬,他们基本上写了这个配置。这是我目前正在使用的工作配置,虽然不是很安全,但它可以工作。需要两种类型的文件类型解决方案,否则您将无法访问该静态内容。启用了自动gzipping,但建议对其添加限制,甚至概述它拉链的内容。
server {
server_name somedamnserver;
root /var/www;
rewrite_log on;
gzip_static on;
# This is file type association solution 1
# location ~ \.css {
# add_header Content-Type text/css;
# }
# location ~ \.js {
# add_header Content-Type application/x-javascript;
# }
# This is file type association solution 2
location ~* ^[^\?\&]+\.(html|jpg|jpeg|json|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|svg|woff|ttf)$ {
try_files $uri /index.php?file=$1;
#access_log off;
expires 24h;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
# This will make PHP files run as intended, I have uncommented a few options as I do not need them.
location / {
#set $originalURI $uri;
try_files $uri /index.php /50x_static.html;
#fastcgi_param QUERY_STRING q=$originalURI&$query_string;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
#fastcgi_intercept_errors on;
include fastcgi_params;
}
}