Archive

Archive for December, 2008

find

December 9th, 2008

Вывести все лог-файлы время последнего доступа к которым больше 25 дней:

find /var/log/ -name "*.log" -atime +25d -print

удалить

find /var/log/ -name "*.log" -atime +25d -delete

найти файлы с определенным содержимым

find /home/domains/ -name "*" -exec grep -H "3C696672616D65207" {} \; | awk -F":" '{print $1}'

Найти и заменить во всех файлах определенного типа один текст на другой:
FreeBSD

#!/bin/sh
for i in `find /usr/home/admin -name "*.html" -exec grep -H "first text" {} \; | awk -F":" '{print $1}' | xargs`; do sed -i '' 's/first text/second text/g' $i; done

Linux

#!/bin/sh
for i in `find /usr/home/admin -name "*.html" -exec grep -H "first text" {} \; | awk -F":" '{print $1}' | xargs`; do sed -i  's/first text/second text/g' $i; done

Найти и заменить определенный файл на другой во всех подпапках:

find /folder-where-search -name "oldfile.name" -exec cp /newfile.name {} \;

Обнулить определенные файлы:

#!/bin/sh
for FILE in `find /home/LOGS/ERRORS -name "*apache" -print 2> /dev/null`
do
    echo 1 > $FILE
done

Найти все измененные за день PHP файлы и отправить уведомление:

find /usr/local/www/ -name "*.php" -mtime -1 -print |grep -v cache |mail -s "Modified PHP Files" mail@domain.com >/dev/null 2>&1

Найти и удалить все файлы с размером 0:

find /some/path/ -size 0 -delete

FreeBSD

nginx, ограничение скорости по урлу

December 9th, 2008
if ( $query_string !~* 'premium=true' ) {
       set $limit_rate  120k;
   }

nginx

tcpdump с полной записью трафика

December 9th, 2008
tcpdump -i bge0 -p -A -s 0 dst port 110 and src host 1.2.3.4

FreeBSD

установка и запуск mysql, оптимизиция производительности

December 9th, 2008
cd /usr/ports/databases/mysql50-server && make install

базы будем держать в /home/mysql

echo "mysql_enable="YES"" >> /etc/rc.conf
echo "mysql_dbdir="/home/mysql/"" >> /etc/rc.conf

копируем my.cnf

mkdir /home/mysql
mkdir /home/mysql/tmp
chown -R mysql /home/mysql/
chmod -R 755 /home/mysql/

Конфига мускула зависят от размера базы, размера оперативы, характера нагрузки и тд.
Но для сервака порядка Xeon 5150 / 2GB и средней нагрузки можно для начала так:

[mysqld]
bind-address = 127.0.0.1

datadir=/home/mysql/myisam
port        = 3306
socket      = /tmp/mysql.sock
skip-locking

key_buffer = 128M
max_allowed_packet = 8M
table_cache = 1024
sort_buffer_size = 32M
read_buffer_size = 32M
read_rnd_buffer_size = 16M
myisam_sort_buffer_size = 64M
thread_cache_size = 30
query_cache_size = 128M
join_buffer_size = 8M
max_connections = 100
max_connect_errors=10000
thread_concurrency = 4 #Try number of CPU's*2 for thread_concurrency
net_buffer_length = 32K
expire_logs_days = 10
log_warnings = 1
wait_timeout = 100
interactive_timeout = 100
concurrent_insert = 2
tmp_table_size = 32M
max_heap_table_size = 32M
myisam-recover=backup,force

tmpdir  = /home/mysql/tmp/

Для выявление тормозных запросов можно использовать slow log, mytop.
Посмотреть эффективность кэширование:

mysqladmin extended-status | egrep Qcache

Qcache_free_blocks показывает сколько свободных блоков есть в кеше;
Qcache_total_blocks – количество занятых блоков;
Qcache_free_memory говорит о том, сколько свободной памяти осталось в кеше;
Qcache_hits – количество запросов, результаты которых были взяты из кеша;
Qcache_inserts – количество запросов, которые были добавлены в кеш;
Qcache_lowmem_prunes – количество запросов, которые были удалены из кеша из-за нехватки памяти;
Qcache_not_cached – количество запросов, которые не были записаны в кеш из-за использования функций работы со временем и т.п.;
Qcache_queries_in_cache – количество запросов, которые находятся в кеше.

После начала эксплуатации еще хорошо посмотреть что о настройках скажет mysqltuner

Оптимизация таблиц:

mysqlcheck --repair --analyze --optimize --all-databases --auto-repair

Важный момент (FreeBSD):
Необходимо следить, чтобы размер процесса mysqld не превысил максимального размера памяти доступного для одного процесса. Если используется FreeBSD c архитектурой i386, то по умолчанию этот размер равен 512MB. Если произойдет превышение, то в логе мускуля будут такие сообщения: “/usr/local/libexec/mysqld: Out of memory (Needed 2375270 bytes)”. Чтобы увеличить это значение необходимо сделать kern.maxdsiz=1073741824 в /boot/loader.conf
Посчитать объем памяти, который займет mysqld можно по этой формуле: key_buffer_size + (read_buffer_size + sort_buffer_size)*max_connections

mysql ,

как бить разделы

December 9th, 2008

/ – 1Г
swap – 2*размер оперативы
/tmp – 2Г
/usr/ – 10-20Г
/usr/home – остальное
/var – 5-10Г

На /tmp в fstab рекомендуется поставить параметр noexec

FreeBSD ,

антихотлинк

December 9th, 2008

Апач:

.htaccess или Directory
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER}  !^http://.*mydomain.com/.*$ [NC]
RewriteCond %{HTTP_REFERER}  !^http://.*google.*$ [NC]
RewriteRule .*[Jj][Pp][Gg]$|.*[Gg][Ii][Ff]$ http://google.com [R,L]

nginx:

location ~* ^.+\.(jpg|jpeg|gif|mpg)$ {
    valid_referers none blocked server_names ~\.google\. images.yandex.ru ~\.mydomain.com ~\.mydomain2.com;
    if ($invalid_referer) {
    return 404;
    }
}

Проверить, если в конфиге nginx сделано так:

server_name ~^(.*)$;

то пункт “server_names” надо убрать из valid_referers
Естественно если уже сделана прямая отдача статики, то надо конструкцию valid_referes … писать внутри того Location

Если надо заблокировать трафик с определенных рефереров, то в nginx делаем так:

valid_referers baddomain1.com baddomain2.com www.baddomain1.com www.baddomain2.com;
if ($invalid_referer != 1) {
return 404;
}

FreeBSD , ,

nginx распределение коннекций по воркерам

December 9th, 2008
fstat | grep 'nginx.*tcp' | awk '{print $3}' | sort | uniq -c

если вдруг сильно не равномерно распределяется то можно попробовать

events {
   accept_mutex  off;
}

nginx

nginx Тюнинг под отдачу мувиков с сата винтов

December 9th, 2008

варианты:
1. патч на бсд, sendfile on, переформатить разделы под размер блока в 64К http://www.lexa.ru/nginx-ru/msg19477.html
2. sendfile off, output_buffers 1 1m; http://www.lexa.ru/nginx-ru/msg20623.html

nginx

GeoIP Apache

December 9th, 2008
cd /usr/ports/www/mod_geoip2 && make install

раскомментить

LoadModule geoip_module       libexec/apache2/mod_geoip.so

добавить:

GeoIPEnable On
GeoIPDBFile /usr/local/share/GeoIP/GeoIP.dat

Apache ,

тест скорости download

December 9th, 2008

Гигабайтный файл в Голландии на Лизвебе
http://85.17.128.2/1000mb.bin

FreeBSD

настройка bind

December 9th, 2008
echo "named_enable="YES"" >> /etc/rc.conf

прописать зону (взять образцовую)

/etc/rc.d/named forcestart

Образцовая зона:

$TTL 3600
domain.com.    IN    SOA    ns1.domain.com.    root.domain.com.    (
20010610    ; Serial
10800        ; Refresh
3600        ; Retry
604800        ; Expire
86400    )    ; Minimum TTL

@       IN      NS      ns1.domain.com.
@       IN      NS      ns2.domain.com.
ns1     IN      A       1.2.3.1
ns2     IN      A       1.2.3.1
@       IN      A       1.2.3.1
*       IN      A       1.2.3.1
@       IN      MX 10 mail.domain.com.

Можно использовать такой скрипт для добавления доменов (create_dns.sh):

#!/bin/sh

# first param - domain, Second - IP

# Domains base
BASE="/etc/namedb"

sed -e "s/domain.com/$1/g" "$BASE/master/sample" > "$BASE/master/$1.db.tmp"
sed -e "s/1.2.3.1/$2/g" "$BASE/master/$1.db.tmp" > "$BASE/master/$1.db"
echo "zone \"$1\" { type master; file \"$BASE/master/$1.db\"; };" >> $BASE/named.conf
rm "$BASE/master/$1.db.tmp"

service named reload
# /etc/rc.d/named forcerestart

Для массового добавления доменов:

#!/bin/sh

# Domains base
BASE="/etc/namedb"
IP="3.3.3.3"

cat /home/adwedes/dnslist| while read domain; do

    sed -e "s/domain.com/$domain/g" "$BASE/master/sample" > "$BASE/master/$domain.db.tmp"
    sed -e "s/1.2.3.1/$IP/g" "$BASE/master/$domain.db.tmp" > "$BASE/master/$domain.db"
    echo "zone \"$domain\" { type master; file \"$BASE/master/$domain.db\"; };" >> $BASE/named.conf
    rm "$BASE/master/$domain.db.tmp"

done

/etc/rc.d/named forcerestart

dns, FreeBSD , ,

mysql лог медленных запросов

December 9th, 2008
long_query_time=2
log-slow-queries=/var/log/slowquery.log
# log_queries_not_using_indexes = 1
touch /var/log/slowquery.log
chmod 777 /var/log/slowquery.log

mysql ,

make.conf

December 9th, 2008
WITHOUT_X11=yes
WITHOUT_IPV6=yes

FreeBSD ,

часовой пояс

December 8th, 2008

tzsetup, первый вопрос – NO
ребут
ntpdate pool.ntp.org

или

ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime

FreeBSD ,

синхронизация времени

December 8th, 2008

в crontab

12      0       *       *       *       root    /usr/sbin/ntpdate pool.ntp.org > /dev/null

FreeBSD ,

установка gmirror

December 8th, 2008

обновление freebsd

December 8th, 2008

Обновление системы. сделать (обновление в рамках текущего релиза, работает только с RELEASE)

freebsd-update fetch
freebsd-update install

Обновление портов, первоначально

portsnap fetch
portsnap extract
portsnap update

в крон:

/usr/sbin/portsnap cron > /dev/null
/usr/sbin/portsnap update > /dev/null

FreeBSD ,

включение ipfw

December 8th, 2008
firewall_enable="YES"
firewall_script="/usr/local/etc/ipfw.rules"

создать файл с правилами, проверить что в них нам будет доступ по ssh. Например такой:

#!/bin/sh

ipfw -q -f flush
cmd="ipfw -q add "
sshport="222"

# remote control
$cmd 150 allow tcp from 1.2.3.1 to me dst-port $sshport

# services
$cmd 1000 allow icmp from any to any
$cmd 1020 allow tcp from any to me dst-port 21,25,80
$cmd 1021 allow udp from any 53 to me
$cmd 1022 allow udp from any to me 53
$cmd 1023 allow udp from any to me 161

# general
$cmd 1035 allow ip from any to any via lo0
$cmd 1040 allow ip from me to any
$cmd 1050 allow ip from any to any established

# all traffic for some hosts
$cmd 1070 allow ip from 1.2.3.1 to me
/etc/rc.d/ipfw forcestart &

система сама подгрузит модуль ядра. Необходимо отметить, что в данном случае последним будет добавлено правило запрещающее весь трафик, поэтому нужно убедиться, что мы не отключим доступ для нас самих.

Перед включением рекомендуется поставить задачу в кронтаб, на всякий случай, чтобы сработала через пару минут:

25 22 * * * root ipfw -q add 10 allow all from any to any

FreeBSD ,

loader.conf

December 8th, 2008

в loader.conf если система i386

kern.maxdsiz=1073741824
kern.dfldsiz=1073741824
kern.maxssiz=1073741824

# если активно используется sendfile в nginx то стандартного количества буферов может не хватать. см netstat -m

kern.ipc.nsfbufs=30240

### только если планируется десятки тысяч соединений. для i386 надо в ядро options KVA_PAGES=512
### vm.kmem_size=1073741824
при любой системе (надо ли? вроде как повышает вероятность ддоса)

accf_data_load="YES"
accf_http_load="YES"

FreeBSD , , ,

тестостерон женщины .
RSS-подписка