09 / 10 / 2012 buling

      本来今天打算写php的,早上来的时候被朋友问及标题问题,于是帮忙处理,死在server_name的指定上了,哎,自以为把server_name去掉就是默认,结果怎知死活不成功,server_name还是需要的,可以用 server_name _;来匹配那些没匹配成功的结果。这个问题解决后又发现静态文件访问都404,查看访问日志才发现open的目录路径不对,是因为我是在二级目录下做重写操作,如:http://www.mjix.com/blog/这样,所以里看nginx.conf的配置文件:
server {
listen 80;
server_name www.mjix.com; #一定要指定哦,跟url一样哦
index index.html index.htm index.php default.html default.htm default.php;
root /home/www/public_html/mjix;
#注意哪,这里不能是 ...mjix/blog这样会出现静态文件加载问题
include wordpress.conf; #加载wordpress重写规则
location ~ .*\.(php|php5)?$
{
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
access_log /home/www/logs/access_mjix_log.log;
}

      关于wordpress.conf的写法:
location /blog/ {
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite ^.+/?(/blog/wp-.*) $1 last;
rewrite ^.+/?(/blog/.*\.php)$ $1 last;
rewrite (.*) /blog/index.php;
}
}

      搞这个问题,让我想起了另外一个问题,我们网站是nginx处理静态文件,php是反向代理交由apache来处理的,为啥要这样呢,咨询了一下xing哥,回答如下:
nginx也不能直接跑php的,要通过fastcgi来跟后面的php的cgi服务通信。不同的是跟apache通信用http,跟php通信用fastcgi。以前咨询刚上的时候用了一段时间fastcgi的,后来发现fastcgi不能像apache一样自动调整进程数,log文件的rotate也没有apache的好用,还有一些小问题(可能是500wan的运行环境导致的),所以最后还是用了apache
apache去掉了那些多余的mod以后,当时测试跑起来也没比fastcgi慢多少

关于自动调节进程数姜维亲是这么回复的
原因是apache的处理机制是可以设置每个进程最多处理多少个请求,处理完后会自动退出,避免了程序员们写的垃圾代码把apache跑死