Я использую Nginx для подключения моего веб-сервера PHP к моему серверу MySQL (через потоковый модуль), поэтому Nginx работает на веб-сервере и на сервере MySQL, и оба подключены через TCP по SSL.
Я заметил, что первоначальное подключение моего приложения к серверу MySQL занимает 4-6 мс на каждый запрос, и мне интересно, могу ли я сделать что-то еще, чтобы повторно использовать соединения или ускорить процесс в целом - оба сервера находятся в одной сетилокально.
Это конфигурация на моем веб-сервере:
stream {
upstream mysql {
server 192.168.10.5:3999;
}
server {
listen 127.0.0.1:998 so_keepalive=30s:10s:6;
proxy_pass mysql;
proxy_connect_timeout 1s;
proxy_ssl on;
proxy_ssl_certificate mysql.client.crt;
proxy_ssl_certificate_key mysql.client.key;
proxy_ssl_protocols TLSv1.2;
proxy_ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
proxy_ssl_trusted_certificate root.crt;
proxy_ssl_verify on;
proxy_ssl_verify_depth 2;
proxy_ssl_session_reuse on;
}
}
Это конфигурация на моем сервере MySQL:
stream {
upstream mysql_local {
server 127.0.0.1:3306;
}
server {
listen 3999 ssl so_keepalive=60s:30s:20;
proxy_pass mysql_local;
proxy_connect_timeout 1s;
# SSL configuration - use server certificate & key
ssl_certificate mysql.server.crt;
ssl_certificate_key mysql.server.key;
ssl_protocols TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
ssl_prefer_server_ciphers on;
ssl_client_certificate root.crt;
ssl_verify_client on;
ssl_session_cache shared:MYSQL:100m;
ssl_session_tickets off;
ssl_session_timeout 600m;
ssl_handshake_timeout 5s;
}
}
Я попытался настроить TCP keepaliveс обеих сторон, но не уверен, что нужно что-то еще или как проверить, используются ли соединения еще раз.Существует очень мало онлайн-документации по этому виду настройки, особенно по оптимизации.
Я подозреваю, что я могу сделать еще кое-что, потому что в приложении я также подключаюсь к Elasticsearch (также работающему на сервере MySQL) через HTTP+ SSL, использующий Nginx в качестве HTTP-прокси, и там время подключения намного меньше, хотя это HTTP, он также использует те же сертификаты и также проходит через Nginx в качестве промежуточного звена, но для этого требуется только макс.1 мс для подключения.Я использую HTTP keepalive соединения там.