2013-03-13 4 views
3

У меня возникли проблемы с попыткой выполнить скрипт CGI через apache. Этот скрипт идентичен OpenLayers proxy.cgi, который позволяет делать запросы AJAX за пределами своего домена. Этот скрипт работает плавно и без ошибок, используя обычную конфигурацию apache (без SSL), но! когда я включаю SSL, он начинает вести себя беспорядочно.Выполнение CGI-скриптов с помощью Apache + SSL

Позволь мне показать вам, первый мою конфигурацию Apache для SSL:

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, проблема это приложение, которое использует прокси-сервер .cgi

Странно, что при запуске apache вначале он будет работать без проблем, но через какое-то время (я не уверен, зависит ли оно от времени или количества запросов, хотя после тестирования I 'd say it the the first), когда код javascript вызывает этот скрипт proxy.cgi, запрос будет просто висеть там и, в конце концов, будет прерван из-за " Тайм-аут».

Нужно ли мне включить любую другую функцию для выполнения скриптов cgi через https? есть что-то, что мне не хватает? Я могу поместить код proxy.cgi, но я не думаю, что он имеет что-то делать, поскольку он доказал свою работоспособность, проблема в том, что с включенным SSL он не будет выполнен.

Спасибо за чтение!

+0

У вас есть адрес, где это происходит для общественности? если это так, мне было бы полезно посмотреть, чтобы я мог видеть запросы и ответы, генерируемые системой. –

+0

Я боюсь, что нет :(Он запущен на моей локальной машине и, из-за прокси, я не могу дать вам доступ к нему –

ответ

3

Прежде всего, благодаря Джозефу Майерсу за его предложения, даже если они не предоставили решение, они помогли мне в этом. То, что он сказал о процессах зомби, имело смысл, и после более глубокого взгляда я понял, что вместо загрузки mod_cgid при запуске apache вместо этого он загружает mod_cgi. Разница весьма заметна, зная (после того, как посмотреть на HTTPd документации), что mod_cgid

создает внешний демон, который отвечает за разветвление дочерних процессов для запуска CGI скриптов

, и это также кажется, что это значение по умолчанию, а не cgi. Я не могу вспомнить, как это меняю, но, черт возьми, кто знает, теперь это работает!

tl; dr, не использовать mod_cgi! используйте mod_cgid вместо этого!

+2

Спасибо за добрые слова! –

2

У меня были проблемы, подобные этому временами, и почти все они были решены путем принудительного «соединения: закрыть» в каждом ответе HTTPS. Он должен быть напечатан в заголовке HTTP. Кроме того, убедитесь, что скрипт proxy.cgi закрывается/существует после каждого запуска, чтобы убедиться, что процесс Apache SSL не заполняется процессами зомби, которые никогда не закрываются.

+0

Спасибо за ответ! Я пробовал обе вещи, о которых вы упомянули, и кажется, что это не так :(Также кажется, что, хотя эта проблема возникла, когда я настроил SSL на моем сервере Apache, он все еще присутствует, даже если я восстановил предыдущую конфигурацию. –