У нас есть WebService, работающий на wildfly 9. Веб-сервис доступен только через ssl (https) и требует клиентских сертификатов.
Если мы изменим конфигурацию wildfly, которую wildfly будет напрямую общаться с клиентом (это означает: wildfly будет обрабатывать https-соединения, а также проверять сертификаты клиентов), в нашем тестовом примере один клиент может выполнять от 12 до 15 запросов в секунду (включая. получение ответов сервера).
Но если мы поставим перед wildfly прокси-сервер apache httpd (V2.2 на CentOS6) (который затем будет обрабатывать данные https SSL и проверять сертификаты клиента), тогда клиент сможет (в том же тестовом примере) только от 2 до 5 запросов в секунду.
Конфигурация прокси httpd:
Listen 58443
NameVirtualHost *:58443
<VirtualHost *:58443>
# server SSL settings
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder On
SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AES:RSA+3DES:!ADH:!AECDH:!MD5:!DSS
# Server Certificate:
SSLCertificateFile /etc/letsencrypt/live/mydomain.de/cert.pem
# Server Private Key:
SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.de/privkey.pem
# Server Certificate Chain:
SSLCertificateChainFile /etc/letsencrypt/live/mydomain.de/chain.pem
Header always set Strict-Transport-Security "max-age=315360000"
# Client certifacte authentication
# Certificate Authority (CA):
SSLCACertificateFile /etc/pki/webapp/cacert.pem
SSLVerifyClient require
SSLVerifyDepth 2
# proxy stuff
<Proxy *>
AddDefaultCharset Off
Order Allow,Deny
Allow from all
</Proxy>
# proxy to wildfly instance
ProxyPass /myappSrv http://localhost:58080/myappSrv min=3 smax=5 ttl=600 iobuffersize=163840
# ProxyPass /myappSrv http://localhost:58080/myappSrv disablereuse=on
# ProxyPassReverse /myappSrv http://localhost:58080/myappSrv
</VirtualHost>
Мы уже поигрались с несколькими значениями конфигурации httpd:
HostnameLookups
установлен на off
MinSpareServers
, MaxSpareServers
, ThreadsPerChild
, ...)AllowOverride
установлен на none
Все, что мы сделали, особых улучшений не принесло. Но я не могу поверить, что производительность настолько плоха, когда мы используем прокси httpd. Также не уверен, что это за бутылочка: прокси httpd? Или проверка сертификата клиента httpd?
У меня были точно такие же проблемы, как описано выше, с Apache HTTPD 2.4, работающим на CentOS 7. Мой браузер потратил около 1 секунды на ожидание страницы индекса. После перехода на nginx время загрузки упало ниже 100 мс, и приложение внезапно показалось потрясающе быстрым.
В любом случае, если вам по-прежнему нужно использовать Apache HTTPD по какой-либо причине, можно использовать nginx в качестве обратного прокси для него. Есть много гидов.