标签归档:Nginx

Nginx配置相关的一些问题

1.  no input file specified

这个问题其实就是Nginx传给PHP-cgi的文件名,cgi找不到。这个问题一般是由以下原因导致的:

  1. 文件真的不存在……
  2. 文件和目录的权限问题,如果nginx和php-cgi运行的用户对要获取的文件没有读取权限,就会出这个错。
  3. php.ini中的cgi.fix_pathinfo选项,如果你是用SCRIPT_FILENAME获取php文件路径的话,请将此项设为1
  4. 如果在nginx中SCRIPT_FILENAME是用$document_root$fastcgi_script_name;这种方式定义的话,需要保证$document_root在此句之前已被定义。
  5. 还有一种情况比较特殊,就是有些nginx版本的配置文件,会在fastcgi_params文件中重复定义SCRIPT_FILENAME为其它的值,把fastcgi_params中的注释掉就好了。

2. 使用$request_filename判断文件是否存在的时候,$request_filename无法正确定位文件位置

这是因为$request_filename是与server的root有关的,所以需要在server段中定义root来指出此网站所在的物理路径。

WordPress 在 Nginx 中的 Rewrite 规则

查看wordpress设置的时候看到wordpress支持/year/month/article_title这种形式的链接,早就厌烦了URL后带一堆&xxx=nnn的形式,于是决定改成这种“漂亮地址”。
当然,这种链接需要作URL重写,我的Web Server用的Nginx,于是打开Nginx的设置文件nginx.conf,找到此blog的location,加上了

if (-f $request_filename) {
    break;
}
rewrite ^(.*)$ /index.php?$1 last;

修改Wordpress为固定链接形式后重启Nginx,再打开Blog里的文章,变成“漂亮地址”了。
但是用了没多久,就发现了问题:我在登录后并没有转到wordpress的后台,而是提示说文章不存在。仔细一看URL地址,是/wp-admin/,这是wordpress的管理目录,省略了缺省的index.php,因为我用的”-f”(文件是否存在),于是if判断返回的是false,转到了下边的rewrite,把wp-admin当文章处理了。
于是再次修改Rewrite判断为”-e”(文件或目录是否存在)。

if (-e $request_filename) {
    break;
}
rewrite ^(.*)$ /index.php?$1 last;

重启Nginx,再登录后台就没问题了。