我正在尝试使用perl CGI获取nginx日志文件的实时尾部。 我已经允许提交文件是644。 我的perl cgi代码如下:
#!/usr/bin/perl
use CGI;
use File::Tail;
print "Content-type: text/html\n\n";
$| = 1; #set auto flush on
# param for specifying number of lines to tail.
#$n = CGI::param('n');
$n = '20';
$file_name = "/var/log/nginx/access.log";
#show 100 lines by default
$tail = $n?$n:100;
# specifying default as of now
$file_name = $file_name?$file_name:"$file_name";
# tail -n <tail_lines>. Start with tail_lines
$tail_lines=10;
$tail_file=File::Tail->new(name=>$file_name,
maxinterval=>2,
adjustafter=>1,
maxbuf=>16384,
tail=>$tail_lines);
while (defined($readline=$tail_file->read))
{
print $readline."</br>";
}
我已经允许如下
-rw-R - R--。 1 nginx nginx 32565 1月7日17:17 /var/log/nginx/access.log
我只用尾巴来解决这个问题..............
与nginx日志相关的权限
[Tue Jan 07 17:16:07 2014] [error] [client 127.0.0.1] Error opening /var/log/nginx/access.log: Permission denied at /var/www/cgi-bin/clarity.pl line 32, referer: http://host:8888/clarity.html
帮我解决这个问题......?
答案 0 :(得分:0)
您是否设置了一些内容,以便perl CGI脚本作为单独的用户运行?
通常,大多数现代nginx安装都具有作为不同用户执行的脚本。这样,如果有人攻击您的CGI脚本,它们就不会轻易影响实际的Web服务器进程。
您可以尝试类似
的内容print "real uid: $<, effective uid: $>\n";
在一个单独的CGI脚本中,用于测试脚本实际运行的用户。