Nginx 与 Awstats (FastCGI for Perl)

配置好 Nginx 后,可能有的朋友还想用 Awstats 分析日志。如果另外再起一个 Apache ,觉得费二遍事。如果在 Nginx 上跑 Awstats ,还需要 FASTCGI 支持。配置的方法有些山寨。Nginx 尽管提供 Perl 模块支持,毕竟还是实验性质的。

对比了一些文章,决定还是用 nginx-fcgi 这个脚本。作者是 Daniel Dominik Rudnicki 。这个脚本要比顺子文中提到的要好一点。

该脚本中用到如下的 Perl 模块。所以使用前要确保相关 Perl 模块已经存在。要不,手工下载安装一下。

  • perl-FCGI
  • perl-Getopt
  • perl-IO
  • perl-Socket

使用命令示意:

/usr/local/nginx/nginx-fcgi -S /tmp/fastcgi.sock -l /var/log/nginx/nginx-fcgi.log
-pid /var/run/nginx-fcgi.pid

网上常见的那个脚本必须要显示的指定最为后台进程跑。不是很完善的方法。

注意事项:不能用 root 用户执行(会提示). 要用与 Nginx 相同身份的用户执行。否则可能会在 Nginx Log 中提示 Permision Denied 。

Nginx 中配置好 Log 格式:

log_format  main          '$remote_addr - [$time_local] "$request" ' 
'$status $body_bytes_sent "$http_referer"'
'"$http_user_agent" $http_x_forwarded_for';

相对应的 Awstats 中 Log 格式为:

LogFormat = "%host - %time1 %methodurl %code %bytesd %refererquot %uaquot" 

其他的配置参考一下Sunnyu 的 “为了Awstats给Nginx添加FastCGI方式的Perl支持” 应该就成了。

BTW: 应该说,Nginx 能够有效抵挡搜索引擎爬虫对网站的影响。对于 Apache 来说,这是个很大的进步。

EOF

更新:如果手工写脚本做 Nginx 日志 logrotate 的话,注意不要简单的用 mv 命令, cp 然后 echo ”> 的方式更好。

推荐: Sina 张宴的 Nginx 0.7.x + PHP 5.2.6(FastCGI)搭建胜过Apache十倍的Web服务器(第4版),这是目前关于 Nginx 最详细的实践文章。


  • http://www.gnuing.com 九门提督

    是不是拼错了题目的——Awststs

  • sagasw

    公司使用nginx?还是现在的主机用?

  • http://bbken.cn Ken

    他那个脚本明明是抄袭的一个老外的~

  • Fenng

    @九门提督
    的确错了,已经更正。
    @Ken
    顺子也说了那脚本不是原创的了

  • zhumao

    难道是东北师范大学毕业的冯?看照片有点像阿

  • Fenng

    @zhumao
    是滴。 你的软件小窝还在么?

  • http://coderchina.cn

    nginx的logformat
    第二行最后少一个空格。这样生成的日志和awstats的logformat就不一致了。没有玩过awstats的网友在使用perl生成数据时,不会生成新记录。注意更新一下。谢谢

  • ttplay

    只有两台服务器做负载均衡有意义吗?
    server1与server2都安装web.
    为了省下一台主机.在server1上安装nginx, 做反向代理, 轮循到server1, server2的web上实现负载均衡.
    请问这样做与单独使用一台server3做负载均衡器的区别是不是非常大?

  • Fenng

    @ttplay
    说到意义,有效消除一个单点,不是最大的意义么?

  • 阿九

    請問一下
    是否有試過這樣的環境下安裝 MovableType4 ?
    因為我一直沒辦法成功
    安裝MT4的過程中有問題
    不知道你有沒有試過??
    感謝

  • http://www.dbanotes.net/ Fenng

    @阿九
    我还没有安装过FastCGI 下的 MT