脚本头过早结束:CGI、Nagios、LDAP
Posted
技术标签:
【中文标题】脚本头过早结束:CGI、Nagios、LDAP【英文标题】:Premature End of Script Headers: CGI, Nagios, LDAP 【发布时间】:2021-12-03 01:19:43 【问题描述】:我为 LDAPS 身份验证设置了 Nagvis 和 Nagios。 我在 Nagvis 中有一个监控点(链接),它将我带到 Nagios Core 中的服务信息。 当我单击 Nagvis 中的链接以访问 Nagios 时,我收到以下错误: /var/log/httpd24/error_log:
[cgi:error] [pid 25523] [client 155.157.39.194:23160] Premature end of script headers: status.cgi, referer: https://[EM Server FQDN]/nagios/cgi-bin/status.cgi?host=all
当我进入下一页时,我遇到了一个内部服务器错误页面,它只是告诉我查阅错误日志。点击浏览器上的 F5 或后退导航按钮可解决此问题。 当我将 LDAPS 身份验证替换为基本身份验证时,不会出现任何问题。
我的 CGI 文件具有适当的权限。 在 LDAP 身份验证过程中一定有什么东西丢失了?
感谢任何帮助! 附上我的nagios.conf...
ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"
<Directory "/usr/local/nagios/sbin">
SSLRequireSSL
Options ExecCGI
AllowOverride AuthConfig
Order deny,allow
Deny from all
# Limit HTTP methods
<LimitExcept GET POST OPTIONS>
Require all denied
</LimitExcept>
Allow from <IP subnet of allowed hosts>
Session on
SessionCookieName httpd_nagsess path=/
SessionMaxAge 1800
SessionCryptoPassphrase <obscured>
ErrorDocument 401 /auth/login.html
AuthFormProvider ldap
AuthType form
AuthLDAPGroupAttributeIsDN on
AuthName "Nagios Login via Active Directory (LDAPS)"
AuthLDAPURL "ldaps://<domain controller #1 FQDN>:3269 <domain controller #2 FQDN>:3269/DC=<obscured>,DC=<obscured>,DC=<obscured>,DC=<obscured>,DC=<obscured>?sAMAccountName?sub?(objectClass=*)" NONE
AuthLDAPBindDN "CN=AD-Binder,OU=Service Accounts,OU=Users and Groups,OU=<obscured>,DC=<obscured>,DC=<obscured>,DC=<obscured>,DC=<obscured>,DC=<obscured>"
AuthLDAPBindPassword <obscured>
require ldap-group CN=em_admin,OU=Groups,OU=Users and Groups,OU=<obscured>,DC=<obscured>,DC=<obscured>,DC=<obscured>,DC=<obscured>,DC=<obscured>
</Directory>
【问题讨论】:
【参考方案1】:问题出在我的登录表单上。根据关于“Inline Login with Body Preservation”(https://httpd.apache.org/docs/2.4/mod/mod_auth_form.html)的 apache 文档,我的表单中需要以下三行:
<input type="hidden" name="httpd_method" value="POST" />
<input type="hidden" name="httpd_mimetype" value="application/x-www-form-urlencoded" />
<input type="hidden" name="httpd_body" value="<?php echo $_SERVER['REDIRECT_QUERY_STRING'];?>" />
提供给 httpd_body 的 PHP 内容是我实际保留原始请求所需的内容。我发现有一些提到内联表单登录不能开箱即用,但没有可靠的解决方案。我的解决方案对我有用。 注意 login.html 必须变成 login.php。 请参阅下面的登录表单:
最后这里是我的 nagios.conf(我不包括相同的 nagios/share 目录):
仅供参考,在 login.php 的登录表单部分之外执行此操作,以确定此信息的保存位置:
<?php
$info = phpinfo();
echo "<html><h2>$info</h2>";
?>
【讨论】:
以上是关于脚本头过早结束:CGI、Nagios、LDAP的主要内容,如果未能解决你的问题,请参考以下文章
Django,apache,mod_wsgi - 错误:脚本头过早结束
.less 批处理中的编译 for-loop 过早地结束批处理脚本