How to: Nginx and Fcgi for wordpress
这两天终于决定把小站从Apache迁移到Nginx平台了,其中遇到了一些問題。
编译好nginx+fcgi+php并做了一些简单配置后,接着尝试访问脚本文件,一直返回: No input file specified。于是求教google大神,发现提到最多的就是PATHINFO这个参数,尝试了其中的一些方法,问题依然没有解决。但原因基本明了了,推测问题出在fastcgi没能正确获取到要执行的脚本文件上,通过日志查看$document_root参数的值发现居然是Nginx的默认值,但又确实自定义了root。经过一番测试才恍悟, 原来root指令放置的作用域不对。过去由于只是用Nginx来做代理,习惯性的把该指令放在某个局部的作用域,这里应该放置于server域中,到此基本能正常访问脚本了。接着要能正常的使用wordpress,还需要处理一下index和rewrite的问题。经过测试和精简后,下列是一段可供参考的基本配置:
server {
listen 80;
server_name example.com;
root /var/www/example.com;access_log logs/example_access.log main;
error_log logs/example_error.log;location / {
index index.php;
if (!-e $request_filename) {
rewrite /(.*)$ /index.php?p=$1 last;
}
}location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
还有一种方法就在 fastcgi_param SCRIPT_FILENAME 项直接指定绝对路径。如:
fastcgi_param SCRIPT_FILENAME /var/www/public$fastcgi_script_name;

