3

我在尝试通过 apache 执行 CGI 脚本时遇到了一些问题。此脚本与 OpenLayers proxy.cgi 相同,它允许在自己的域之外发出 AJAX 请求。该脚本使用正常的 apache 配置(没有 SSL)运行顺利且没有任何错误,但是!当我启用 SSL 时,它开始表现不稳定。

让我首先向您展示我的 SSL 的 apache 配置:

NameVirtualHost *:443
<VirtualHost *:443>
    ServerName 172.22.1.37
    SSLEngine on
    SSLProtocol all -SSLv2
    SSLCertificateFile /etc/apache2/ca/apache-server.crt
    SSLCertificateKeyFile /etc/apache2/ca/apache-server.key
    SSLCertificateChainFile /etc/apache2/ca/proba.crt
    SSLCACertificateFile /etc/apache2/ca/proba.crt
    AddType application/x-x509-ca-cert .crt
    AddType application/x-pkcs7-crl    .crl
    Alias /mapviewer "/var/www/mapviewer/"
    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    AddHandler cgi-script .cgi
    DocumentRoot /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride All 
        Options +ExecCGI -Multiviews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

因此,SSL 正确加载,因为我尝试过其他 webapps 并且它们在 https 中运行顺利,问题是这个使用 proxy.cgi 的应用程序

奇怪的是,当我启动 apache 时,一开始它会正常工作,没有任何问题,但过了一段时间(我不确定它是否取决于时间或请求数量,尽管经过测试我会说它是前者) 当 javascript 代码调用这个 proxy.cgi 脚本时,请求将挂在那里,最后,由于“超时”而中止。

我是否需要启用任何其他选项才能通过 https 执行 cgi 脚本?有什么我想念的吗?我可以放置 proxy.cgi 代码,但我认为它没有任何关系,因为它已被证明可以正常工作,这里的问题是启用 SSL 后,它不会被执行。

谢谢阅读!

4

2 回答 2

3

首先,感谢 Joseph Myers 的建议,即使他们没有提供解决方案,他们也帮助了我。他所说的僵尸进程是有道理的,在深入了解之后,我意识到不是在 apache 启动时加载 mod_cgid,而是加载了 mod_cgi。差异非常明显,知道(在查看 httpd 文档之后) mod_cgid

创建一个外部守护进程,负责派生子进程以运行 CGI 脚本

而且它似乎也是默认的,而不是cgi。我不记得自己改变了它,但是地狱,谁知道呢,它现在起作用了!

tl;博士,不要使用 mod_cgi!改用 mod_cgid !

于 2013-03-25T09:10:35.380 回答
2

我有时会遇到这样的问题,几乎所有问题都通过在每个 HTTPS 响应中强制“连接:关闭”来解决。它应该打印在 HTTP 标头中。此外,请确保 proxy.cgi 脚本在每次运行后关闭/存在,以确保 Apache SSL 进程不会被永远不会自行关闭的僵尸进程填满。

于 2013-03-23T00:15:59.227 回答