最近调试apache CGI的时候遇到好多次Premature end of script headers的问题,这里记录下来以供以后的自己参考
1、CGI权限不够
apache服务器不是以你的用户身份运行的,就是说,在服务器启动后,拥有的是一个非特权用户的权限-通常是nobody
或者www
,但有的时候CGI文件的执行需要足够的用户权限。通常,给予nobody
足够的权限以执行文件的方法是,对文件赋予everyone execute权限,命令:
chmod a+x first.pl
另外,如果需要对其他文件进行读取或写入,也必须对这些文件赋予正确的权限。
2、CGI本身的代码bug导致cgi异常退出
CGI的代码bug,譬如core dump或者so找不到等原因
如果是coredump可以通过命令如下几个命令来定位:
a、coredump时是否会产生core文件
ulimit -c
如果是0则代表则不会生成,需要设置一下值
b、查看core文件相关配置信息
sysctl -a | grep core
打印输出
kernel.core_pattern = /data/corefile/core-%e-%p-%t
kernel.core_pipe_limit = 0
kernel.core_uses_pid = 1
net.core.bpf_jit_enable = 0
net.core.dev_weight = 64
net.core.message_burst = 10
net.core.message_cost = 5
net.core.netdev_budget = 300
net.core.netdev_max_backlog = 1000
net.core.netdev_pagefrag_enabled = 1
net.core.netdev_tstamp_prequeue = 1
net.core.optmem_max = 20480
net.core.rmem_default = 229376
net.core.rmem_max = 229376
net.core.rps_sock_flow_entries = 0
net.core.somaxconn = 128
net.core.warnings = 1
net.core.wmem_default = 229376
net.core.wmem_max = 229376
net.core.xfrm_acq_expires = 30
net.core.xfrm_aevent_etime = 10
net.core.xfrm_aevent_rseqth = 2
net.core.xfrm_larval_drop = 1
c、查看生成的core文件格式
cat /proc/sys/kernel/core_pattern