В предыдущей статье я затрагивал тему nginx.
А значит нужно его установить.
nginx [engine x] — это HTTP-сервер и почтовый прокси-сервер. Я начал разрабатывать nginx весной 2002 года, а осенью 2004 года вышел первый публично доступный релиз. В декабре 2009 года nginx использовался на 4% самых посещаемых сайтов в мире.
Я буду рассматривать установку в привычной и используемой мной системе Ubuntu Server 10.04 LTS, хотя думаю установка будет мало чем отличаться в любых Ubuntu-подобных системах, и возможно на Debian и его клонах.
Итак поехали.
Установка сводится к банальному
sudo aptitude install nginx
Готово. Теперь нужно немного подкорректировать конфиги , как самого nginx так и apache.
Начнем с apache :
Открываем /etc/apache2/ports.conf
NameVirtualHost *:80
Listen 80
меняем на :
NameVirtualHost *:88
Listen 88
Так как на 80 порту у нас теперь будет nginx.
Если у Вас уже было куча Виртуалхостов смените у них порты с 80 на 88 (хотя и это только для примера, — использовать можете любой).
И теперь коснемся самого nginx.
Редактировать мы будем секцию
http {
upstream backend
{
server 127.0.0.1:88;
}
server {
listen 80;
location ~/\.ht {
deny all;
}
location / {
proxy_pass http://backend/;
proxy_set_header Range "";
proxy_set_header Request-Range "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Перезапускаем сервисы :
/etc/init.d/apache2 restart
/etc/init.d/nginx restart
Давно хотел написать статью по ipset, но все как то руки не доходили.
А тема то для меня довольно интересная.
Да и намучался одно время я достаточно с этим.
Итак — для чего оно вообще нужно ? И кому ?
Для этого рассмотрим немного теории.
Используется в основном это дело на маршрутизаторах с установленной ОС Linux.
Для того, чтоб выпустить клиента в сеть достаточно добавить в фаерволе всего несколько простых правил.
Например :
/sbin/iptables -t NAT -I POSTROUTING -s $IP_Client -o eth1 -j MASQUERADE /sbin/iptables -I FORWARD -s $IP_Client -j ACCEPT /sbin/iptables -I FORWARD -d $IP_Client -j ACCEPT
Правила пишу по памяти, но я думаю суть ясна : первым мы разрешаем маскарадинг клиента наружу, вторым и третьим разрешаем проходить пакеты в интернет и обратно.
Вроде бы ничего сложного, но если мы вспомним, то пакет не выйдет в инет пока не пройдет ВСЕ правила фаервола. А под всеми я понимаю весь набор правил маршрутизатора.
Для 1 или 100 клиентов это конечно не много и современные машины вполне спокойно справляются с такой нагрузкой.
Но представьте, что если клиентов 1000 или больше ?
Прежде чем выпустить хоть 1 пакет он должен пробежаться по ВСЕМ 3000 правилам. Почему 3000 — потому что для каждого клиента мы написали по 3 правила.
И чем больше клиентов, тем соответственно пакет не попадет в инет пока не пробежит по всем правилам.
А теперь представьте, что хотя бы половина клиентов использует программы p2p, где создается более 200-300 соединений для 1 клиента.
Вот тут я и понял что основной задачей стоит уменьшение правил фаервола.
Но как их уменьшить-то ?
Вот тут нам на помощь и приходит ipset.
Ipset представляет собой программу для работы с наборами адресов IP (IP set) в ядре Linux. Программа позволяет создавать, изменять и проверять наборы адресов IP, с которыми работает ядро Linux (включая netfilter/iptables). IP set может включать в себя адреса IP, номера портов TCP и UDP, а также дополнительную информацию.
От теории к практике.
Не знаю как на других дистрибутивах, но на Linux Ubuntu Server все ставится достаточно просто :
sudo apt-get install module-assistant sudo apt-get install ipset-source /sbin/m-a a-i ipset
вот и все что требуется — модули будут загружены и скомпилированы автоматически.
Что же делать дальше ?
А вот что :
Смотрим наши правила и заменяем их списками :
/sbin/ipset -N FFIN ipmap --network 192.168.0.0/16 /sbin/ipset -N FSNAT ipmap --network 192.168.0.0/16
Создаем 2 цепочки для форварда и для НАТа.
/sbin/iptables -t mangle -I FORWARD -m set --set FFIN src,dst -j ACCEPT /sbin/iptables -t mangle -I FORWARD -m set --set FFIN dst,src -j ACCEPT /sbin/iptables -t nat -A POSTROUTING -m set --set FSNAT src -o $eWAN -j MASQUERADE
И ВСЕ.
Теперь только заполняем списки
/sbin/ipset -A FSNAT $IP_Client /sbin/ipset -A FFIN $IP_Client
Теперь в фаерволе вместо 3000 правил реально будет только 3. ТРИ. Всего то 3 правила-списка.
Это колоссально снизит нагрузку на процессор.
Более детально про ipset можно почитать тут или
man ipsetДанная заметка скорее напоминание себе, а может и еще кому пригодится.
Предистория :
Установлена свежая версия Ubuntu 10.04 (хотя данный баг был и на предыдущих версиях).
Не работает корректно индикатор батареи. Т.е. он работает, но показывает всегда 100% зарядку батареи даже при половинном заряде от сети.
От батареи более менее работает.
Решение :
идем в /boot/grub/grub.conf
Ищем что-то типа :
menuentry 'Ubuntu, с Linux 2.6.32-27-generic mod' --class ubuntu --class gnu-linux --class gnu --class os { recordfail insmod ext2 set root='(hd0,1)' search --no-floppy --fs-uuid --set a8f444e7-1f6c-4812-9cf8-f01546c2f4f1 linux /boot/vmlinuz-2.6.32-27-generic root=UUID=a8f444e7-1f6c-4812-9cf8-f01546c2f4f1 ro quiet splash initrd /boot/initrd.img-2.6.32-27-generic }
И меняем на
menuentry 'Ubuntu, с Linux 2.6.32-27-generic mod' --class ubuntu --class gnu-linux --class gnu --class os { recordfail insmod ext2 set root='(hd0,1)' search --no-floppy --fs-uuid --set a8f444e7-1f6c-4812-9cf8-f01546c2f4f1 linux /boot/vmlinuz-2.6.32-27-generic root=UUID=a8f444e7-1f6c-4812-9cf8-f01546c2f4f1 ro quiet splash acpi=noirq pci=noacpi, routeirq initrd /boot/initrd.img-2.6.32-27-generic }
т.е. добавляем :
acpi=noirq pci=noacpi, routeirq
Перегружаемся.
И все.







