Hi,
I encountered a problem after upgrading Apache to 2.2.15.
The client will be stuck and load infinitely via the HTTP protocol, but it worked correctly in 2.0.55 before I upgraded.
I tried to sniffer the packet, and found
1. If the page size is larger, most of the page and http header will be received in the client but the last chunk won't be sent out from the Apache.
2. If the page size is small, the client only can see the http header.
It seems that some packets are queued in the Apache, ..?!
I describe the process as below,
1. Client send http request to the server,
http://myhost/web.cgi, the cgi is implemented in GNU CGI which has been dead since 2002.
2. web.cgi fetches the login.html file and sends back to the client.
3. The client gets stuck...
There are some things weird:
1. When I remove the directive "Listen 443" or "Keepalive On", then the HTTP can work correctly via "Listen 80" without stall.
2. If both the "Listen 443" and "Listen 80" are enabled, only the HTTPS can work. HTTP will have the problem I just mentioned.
Do you guys have any idea about my problem?
Why the behavior of dealing with output file is different between HTTP and HTTPS protocol?
My Apache configuration
ServerRoot "/usr/local/apache"
ServerName localhost
PidFile /var/run/httpd.pid
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 20
ServerLimit 20000
MaxClients 41
MaxRequestsPerChild 10000
</IfModule>
<IfModule perchild.c>
NumServers 5
StartThreads 5
MinSpareThreads 5
MaxSpareThreads 10
MaxThreadsPerChild 20
</IfModule>
Listen 80
User www
Group www
ServerAdmin
you@xxxxxxxxxxx
UseCanonicalName Off
DocumentRoot "/usr/local/apache/htdocs"
<Directory "/usr/local/apache/htdocs>"
Options FollowSymLinks ExecCGI
AllowOverride none
Order allow,deny
Allow from all
</Directory>
UserDir diabled
ErrorLog /var/log/error_log
LogLevel warn
<Directory "/usr/local/apache/cgi-bin>"
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
TypesConfig conf/mime.types
DefaultType text/plain
<IfModule mod_mime_magic.c>
MIMEMagicFile conf/magic
</IfModule>
DirectoryIndex web.cgi
AddHandler cgi-script .cgi
HostnameLookups Off
ServerTokens Full
ServerSignature On
ReadmeName README.html
HeaderName HEADER.html
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-caref
BrowserMatch "^WebDrive" redirect-carefully
BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully
BrowserMatch "^gnome-vfs" redirect-carefully
Listen 443
<IfDefine SSL>
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
SSLPassPhraseDialog builtin
SSLSessionCache dbm:/var/log/ssl_scache
SSLSessionCacheTimeout 300
SSLMutex file:/var/log/ssl_mutex
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
SSLCryptoDevice cryptodev
<VirtualHost _default_:443>
DocumentRoot "/usr/local/apache/htdocs"
ServerName
www.example.comServerAdmin
you@xxxxxxxxxxxErrorLog /var/log/error_log
TransferLog /var/log/access_log
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:-RC4:+AES:+DES:+3DES:+RSA:-RC2:-IDEA:+HIGH:+ME
SSLCertificateFile /etc/cert/default
SSLCertificateKeyFile /etc/cert/default.prv
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/usr/local/apache">
SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
</VirtualHost>
</IfDefine>
Thanks in advance.
Best regards
honercek