脚本头过早结束: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的主要内容,如果未能解决你的问题,请参考以下文章

500 服务器错误:脚本头过早结束:

Django,apache,mod_wsgi - 错误:脚本头过早结束

Python CGI 脚本错误:头文件前的脚本输出结束

.less 批处理中的编译 for-loop 过早地结束批处理脚本

mod_fcgid:在45秒内读取数据超时和脚本标题的过早结束:index.php

在 REBOL2 中输出到标准错误?