rpm --nodeps -e GeoIP
А то некоторые yum под попытку удаления GeoIP пытаются еще и nginx похерить - "за компанию" (с)
rpm --nodeps -e GeoIP
2012/11/12 20:12:53 [alert] 5554#0: accept() failed (24: Too many open files) while accepting new connection on X.X.X.X:80
ulimit -n 65535
worker_rlimit_nofile 20480;
Connection reset by peer) while reading response header from upstreamПогуглив - нашел много танцев с конфигами nginx и бубнами, ни один из которых не помог, кроме одного... БЕЗУМНОГО совета, который как водится - сработал в моем случае ;-)
/sbin/service php-fpm restartУстановка Wordfence Security на Wordpress - прошла успешно ;-)
server_tokens off;
expose_php = Off
client_max_body_size 500m;
Решил перевыложить свою старую статью - она местами уже потеряла актуальность, да и RunCMS практически уже умерла, к сожалению - оставив после себя несколько веток-форков -на одной из которых и работает ScaleModels.ru, но люди спрашивают. Увы - некоторые вещи, приведенные тут уже устарели за несколько лет, некоторые - спорны, но пусть будет в этом блоге - до кучи. <?php var $file_cache = true; ?>
<?php $db->query($sql, false, false, ‘имя_файла’, время_кэширования) ?>
<?php var $compiling = true; ?>Данное «ядро» была введено мной в версии 1.6.1 - оно позволяет сэкономить примерно 6 SQL запросов на каждой странице, но несколько повысит нагрузку на PHP.
<?php
define('RC_TREE_CACHE', 1);
?>
это сильно поможет при работе с большими деревьями категорий - в таких модулях, как news, например





eaccelerator.enable="1" eaccelerator.optimizer="1" eaccelerator.check_mtime="0" eaccelerator.shm_only="1"
tmpfs /tmp tmpfs defaults 0 0 tmpfs /var/lib/php tmpfs size=200M,nr_inodes=1m,nosuid 0 0
Если вся солянка крутится на одной машине - то также используем коннект через сокеты (по умолчанию не используется - стоит ip адрес). В таком варианте работы memcache возможны проблемы с некоторыми средствами мониторинга memcache (которые работают также по IP).
Не забываем в PHP использовать сжатие при работе с MEMCACHE.
http {
...
limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
limit_zone three $binary_remote_addr 10m;
Включаем кэширование для неавторизованных гостей
http {
...
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=wholepage:50m inactive=15d max_size=5000m;
location ~ .*\.php$ {
limit_conn three 20;
include /etc/nginx/fastcgi.conf;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/var/run/php-fastcgi/php.socket;
#access_log /var/log/nginx/domain.access.log my_combined;
fastcgi_cache wholepage_guest;
fastcgi_cache_valid 301 302 304 10m;
fastcgi_cache_valid 200 360m;
fastcgi_cache_valid 404 5s;
fastcgi_cache_key "$request_method|$host|$request_uri";
fastcgi_pass_header "Set-Cookie";
fastcgi_ignore_headers "Cache-Control" "Expires";
fastcgi_cache_bypass $cookie_phpbb_session $arg_nocache $arg_PHPSESSID;
fastcgi_no_cache $cookie_phpbb_session $arg_nocache $arg_PHPSESSID;
}
Где phpbb_session - имя куки по которой идет авторизация
Все запросы с ?nocache=1 и PHPSESSID попадают на PHP-бэкенд сразу без кэша не забываем открыть скрипт, по которому идет авторизация (в том числе и всякие капчи - их можно переписать на ?nocache=1) - тут возможно прийдется немного поковыряться и в коде CMS тоже.
location /register.php {
limit_conn three 20;
include /etc/nginx/fastcgi.conf;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/var/run/php-fastcgi/php.socket;
}
location /mymodule {}
Если от регекспов никак не избавится - то лучше их обрамлять простым location (Причина - сложноуловимые перехлесты в логике парсинга URL - кто за кем будет следовать)
location /mymodule {
location ~ \/mymodule\/(.*)\.php$ {
чего-то
}
}
Отрубаем access лог для картинок
Разумеется - это только основные моменты оптимизации, на самом деле их гораздо больше. А какие трюки для уменьшения нагрузки на сервер знаете вы? Пишите в комментах.
server {
listen 80;
server_name host.ru;
index index.php;
root /var/www/vhosts/host.ru/httpdocs;
location ~ \.php$ {
limit_conn three 20;
include /etc/nginx/include.d/default_fastcgi_params.conf;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass php;
}
location ~ /\.ht {
deny all;
}
if (!-e $request_filename) {
rewrite ^(.+)$ /index.php last;
}
}
и общий для всех хостов на машине /etc/nginx/include.d/default_fastcgi_params.conf
fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200; fastcgi_connect_timeout 60; fastcgi_send_timeout 60; fastcgi_read_timeout 60;
add_header X-Content-Security-Policy "allow 'self'; img-src *; script-src *;"; add_header X-Frame-Options SAMEORIGIN; add_header X-XSS-Protection "1; mode=block";Разумеется, если у админа включен параноидальный режим, то img-src *; script-src *; можно править на список одобренных доменов