Billmanager через Nginx

12
neodev
На сайте с 12.11.2011
Offline
9
8754

В данной статье, опишу кратко список всех действий, чтобы Подключить Биллинг через Nginx, а не через Apache.

В рассматриваемом примере имеем следующую конфигурацию:

Debian 5 / Nginx 1.0.10 (front:80&443) / Apache 2 (back:8080) / Billmanager+ISPmanager

В ISPmanager, в настройках адреса доступа к панели, ставим галочку "Включить встроенный HTTP сервер", и указываем 1500 порт для подключений... Рестартим (killall -9 -r ispmgr) панель. И пробуем подключиться по 1500 порту. [ https://ВАШ.IP.СЕРВЕРА:1500/manager/ispmgr ]

Если подключение прошло успешно, идем дальше, иначе - смотрим логи и ищем ошибку...

В файл nginx.conf в раздел http {} добавляем в самый конец инклуд (перед }):

include /etc/nginx/mybillmgr.conf;

Файл mybillmgr.conf следующего содержания:

	server {

listen 12.34.56.78:80;
server_name my.host.com;
location / {
rewrite ^/manager/billmgr$ https://$server_name/billmgr permanent;
rewrite ^/manager/ispmgr$ https://$server_name/ispmgr permanent;
rewrite ^/manager/(.*)$ https://$server_name/$1 permanent;
rewrite ^/(.*)$ https://$server_name/$1 permanent;
}
}
server {
listen 12.34.56.78:443;
server_name my.host.com;
ssl on;
ssl_certificate /var/www/httpd-cert/my.host.com.crt;
ssl_certificate_key /var/www/httpd-cert/my.host.com.key;
error_log /var/log/nginx/my.host.com.error.log;
access_log /var/log/nginx/my.host.com.access.log;
location /manimg/ {
root /usr/local/ispmgr/skins/;
rewrite ^/manimg/(.*)$ /$1 break;
}
location /mancgi/ {
limit_conn ngconn 1;
limit_req zone=billmgr burst=3 nodelay;
proxy_pass http://127.0.0.1:8080;
proxy_redirect http://my.host.com:8080/ /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
location / {
limit_conn ngconn 2;
limit_req zone=billmgr burst=5 nodelay;
proxy_pass https://12.34.56.78:1500;
proxy_redirect https://my.host.com:1500/ /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
}

Теперь про все настройки...

listen 12.34.56.78:443;

Открываем порт 443, для SSL протокола... Соответственно в Конфиге Apache лучше сменить данный порт, или отключить [Listen 443] вообще, убрав из загрузки mod_ssl...

server_name my.host.com;

Указываем домен на котором будет расположен биллинг, может быть как основной домен, так и субдомен...

ssl on;

ssl_certificate /var/www/httpd-cert/my.host.com.crt;
ssl_certificate_key /var/www/httpd-cert/my.host.com.key;

Разрешаем соединение по защищенному протоколу, так же необходимо сгенерировать ключи, но об этом уже в другой статье...

error_log /var/log/nginx/my.host.com.error.log;

access_log /var/log/nginx/my.host.com.access.log;

Логируем все запросы, и логи ошибок... Могут понадобиться для отладки.

location /manimg/ {

root /usr/local/ispmgr/skins/;
rewrite ^/manimg/(.*)$ /$1 break;
}

По адресу [ https://my.host.com/manimg/ ] располагаются изображения стиля, js скрипты к панеле, и другие вспомогательные элементы... Указываем root директорию и ревритем адрес для корректного пути к файлам...

location / {

limit_conn linitconnect 2;
limit_req zone=billmgr burst=5 nodelay;
proxy_pass https://12.34.56.78:1500;
proxy_redirect https://my.host.com:1500/ /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}

Данный фрагмент проксирует все запросы к биллингу "/" на наш ihttpd сервер который на 1500 порту... Возможно использование proxy_pass = 127.0.0.1 (не успел протестировать...). А также http протокол, а не https (не успел протестировать...).

Так же ограничиваем количество соединений и запросов limit_conn, limit_req с заранее созданными директивами..

limit_req_zone $binary_remote_addr zone=billmgr:5m rate=1r/s;
Модуль ngx_http_limit_req_module ( начиная с версии 0.7.21) позволяет ограничить число запросов по заданному ключу или, как частный случай, число запросов с одного IP-адреса.

location /mancgi/ {

limit_conn ngconn 1;
limit_req zone=billmgr burst=3 nodelay;
proxy_pass http://127.0.0.1:8080;
proxy_redirect http://my.nghost.in:8080/ /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}

А это самый непонятный участок... Не нашел способа корректно связать Nginx и Ihttpd, в некоторых операциях биллинга, таких как переход на сервер, выдавалась ошибка Fatal error [You do not authorized for this operation]. Возможно неправильно передавался IP адрес, в логах никакой полезной информации не обнаружил, решил проксировать на Apache.

Допустим Apache стоит у нас на 8080 порту, и доступ с внешки прикрыт файрволлом. Добавляем в конфиг виртуалхостов апача следующее:

<VirtualHost 127.0.0.1:8080>

ServerName my.host.com
ServerAdmin root@host.com
DocumentRoot /usr/local/ispmgr/bin/
Alias /mancgi/ /usr/local/ispmgr/cgi/
DirectoryIndex billmgr
Options -Indexes
</VirtualHost>

Также должен быть в конфиге апача инклудирован ispmgr.inc [/usr/local/ispmgr/etc/ispmgr.inc] файл, который в моем случае следующего содержания:

LoadModule ispmgr_module /usr/local/ispmgr/lib/apache/mod_ispmgr.so

Alias /disabled/ /usr/local/ispmgr/www/disabled/
<Directory /usr/local/ispmgr/>
Order allow,deny
Allow from all
AddDefaultCharset utf-8
</Directory>
<Directory /usr/local/ispmgr/cgi/>
SetHandler directcgi-handler
AddDefaultCharset utf-8
</Directory>
<Directory /usr/local/ispmgr/bin/>
SetHandler ispwrap-handler
AddDefaultCharset utf-8
DirectoryIndex billmgr
</Directory>

Данные новороты позволят проксировать все запросы, которые идут к адресу /mancgi/ через Apache к модулям Billmanager... К сожалению на данный момент не нашел альтернативного способа корректной работы модулей...

И на последок закрываем файрволом 1500 порт с внешки.

После проведения тестов HTTP/DDOS атаки по биллингу, ДО и ПОСЛЕ внесения данных изменений на сервере: Dual-Core AMD Opteron(tm) Processor 1218 2611.910 Mhz X 2 / 4 GB RAM результаты оказались намного лучшими...

С 30% load average, при использовании Apache. И после частичного переноса биллинга на Nginx с лимитами limit_conn и limit_req загрузка составила не более 2%.

Возможно я упустил некоторые моменты, буду рад если меня поправят...

Так же выслушаю предложения и замечания...

Спасибо всем за внимание.

[ng-host.ru (http://ng-host.ru/)] - [divku.ru (http://divku.ru/)] - [cliku.ru (http://cliku.ru/)]
Andreyka
На сайте с 19.02.2005
Offline
822
#1

А зачем это надо?

Не стоит плодить сущности без необходимости
neodev
На сайте с 12.11.2011
Offline
9
#2
Andreyka:
А зачем это надо?

Отписал же,

После проведения тестов HTTP/DDOS атаки по биллингу:
load average До: 30% при Apache.
После: не более 2% при Nginx.

через nginx легче настроить лимиты, и парсить логи на превышение лимитов...+ бан ip фаерволом.

M
На сайте с 16.09.2009
Offline
278
#3
neodev:
через nginx легче настроить лимиты, и парсить логи на превышение лимитов...+ бан ip фаерволом.

Может проще прочитать документацию апача и соответствующих модулей?

Абонементное сопровождение серверов (Debian) Отправить личное сообщение (), написать письмо ().
Andreyka
На сайте с 19.02.2005
Offline
822
#4
neodev:

Отписал же,

через nginx легче настроить лимиты, и парсить логи на превышение лимитов...+ бан ip фаерволом.

В биллинге нагрузку делает не веб а база

pupseg
На сайте с 14.05.2010
Offline
347
#5

Статья хорошая.Приятно, что человек сам провел исследование и выложил в паблик то, за что я беру от 4000руб. Но все же, действительно - это не нужно. Если хостер действительно хостер, а не пара полуживых впс -то нужно отделять мух от котлет:

Определения:

обзовем сущностью абстрактный сервер (впс или дедик, если по взрослому - то дедик).

1) хранилище данных (БД) - одна сущность.

2) интерпритаторы языков программирования - вторая сущность.

3) фронт - третья сущность

4) бэк - четвертая сущность

5) бакап - пятая сущность

6) биллинг, расчеты, финансы - шестая сущность.

затраты - 600$ в месяц на серверы, 1000$ в месяц на раскрутку на этом ресурсе и других тематических.

выход - 3600-4000$ чистой прибыли с бизнеса хостинга.

Итог - зачем биллинг и финансовую информацию селить рядом с хостингом ?

PS: а статья хорошая. имеет право на жизнь. афтар маладэц.

Качественная помощь в обслуживании серверов. (/ru/forum/661100) Бесплатных консультаций не даю, не помогаю, не обучаю. Минималка от 100$. Как пропатчить KDE-просьба не спрашивать. Есть форумы (http://linux.org.ru) и полезные сайты (http://www.opennet.ru/).
M
На сайте с 24.10.2011
Offline
173
#6
pupseg:
я беру от 4000руб

и что, находятся такие, кто столько платит за установку прокси к апачу?

pupseg
На сайте с 14.05.2010
Offline
347
#7

200-300-500-800 рублей - это не деньги. от 2000руб - уже деньги.

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

M
На сайте с 24.10.2011
Offline
173
#8

pupseg, ну так тс его и не исключил, о чем разговор? :) и не вижу упоминаний rpaf, наверное, это не оч. хорошо

pupseg
На сайте с 14.05.2010
Offline
347
#9

кстати да ......

rpaf ........

ээээ ..может я чтото упустил...

M
На сайте с 16.09.2009
Offline
278
#10

у вас в биллинге авторизация по allow/deny? :)

логи есть на фронтенде

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий