1. Отключаем загрузку неиспользуемых модулей apache, можно отталкиваться от такого списка и по мере необходимости включать дополнительные:
LoadModule authn_file_module
LoadModule authz_host_module
LoadModule authz_user_module
LoadModule auth_basic_module
LoadModule auth_digest_module
LoadModule include_module
LoadModule filter_module
LoadModule log_config_module
LoadModule mime_module
LoadModule status_module
LoadModule info_module
LoadModule vhost_alias_module
LoadModule dir_module
LoadModule alias_module
LoadModule rewrite_module
LoadModule rpaf_module
LoadModule cgi_module
LoadModule geoip_module
LoadModule php5_module
LoadModule authz_groupfile_module
Еще нужен вывод команд:
2.Для nginx добавляем:
worker_priority -5;
reset_timedout_connection on;
postpone_output 1460;
keepalive_timeout 20;
client_header_timeout 30;
client_body_timeout 60;
send_timeout 30;
worker_rlimit_nofile рассчитываем как worker_processes*worker_connections
worker_connections в конфиге, ИМХО завышен сильно.
Все proxy_..._timeout я б уменьшил с 300 до 90 где-то, если отдельные директории требуют действительно такой долго обработки можно переопределять эти значения у нужного location.
Не помешало бы ограничение на количество подключений с одного IP и количество запросов в единицу времени, смотреть в строну limit_zone, limit_req_zone, limit_conn, limit_req
Проксировать такое:
Код:
Location ~ /favicon.ico {
proxy_pass http://127.0.0.1:8888;
}
на бекэнд - моветон, статика должна отдаваться nginx'ом. В location'ах такого плана "~" не нужна тут не проверок на содержимое части в запроси, тут просто location для полного запроса.
Код:
if ($request_method = OPTIONS ) {
proxy_pass http://127.0.0.1:8888;
}
if ($request_method = PROPFIND ) {
proxy_pass http://127.0.0.1:8888;
}
if ($request_method = PROPPATCH ) {
proxy_pass http://127.0.0.1:8888;
}
if ($request_method = MKCOL ) {
proxy_pass http://127.0.0.1:8888;
}
if ($request_method = COPY ) {
proxy_pass http://127.0.0.1:8888;
}
if ($request_method = MOVE ) {
proxy_pass http://127.0.0.1:8888;
}
if ($request_method = LOCK ) {
proxy_pass http://127.0.0.1:8888;
}
if ($request_method = UNLOCK ) {
proxy_pass http://127.0.0.1:8888;
}
if ($request_method = PUT ) {
proxy_pass http://127.0.0.1:8888;
}
Зачем куча отдельных if'ов?
Код:
if ($request_method ~ ^(OPTIONS|PROPFIND|и т.п.)$ ) {
proxy_pass http://127.0.0.1:8888;
}
Опять же насколько реально нужны все эти методы?
Мб хватит такого:
Код:
if ($request_method !~ ^(GET|HEAD|PUT)$ ) {
return 444;
}
proxy_pass http://127.0.0.1:8888;
Если юзаем проверки вида:
f (-d $request_filename)
Не помешают такие опции:
open_file_cache max=5000 inactive=300s;
open_file_cache_valid 360s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
Вообще по всем best practice использование большого количества if для nginx'а очень плохая практика он и работать может начать не так, как от него ожидают прописывая линейные каскады if'ов, и производительность из-за кучи ненужных проверок падает. Нужно стараться описать все свои проверки через соответствующие location.