Конвертация htaccess от apache в правила для nginx
Может кому пригодится сайтик который конвертирует правила из htaccess в nginx
http://www.anilcetin.com/convert-apache-htaccess-to-nginx/
Author Archive
Может кому пригодится сайтик который конвертирует правила из htaccess в nginx
http://www.anilcetin.com/convert-apache-htaccess-to-nginx/
Допустим у вас есть номер телефона рекламного отдела и PR-манагеры пустили какую-то рекламу в сентябре.
Задача: найти всех клиентов которые позвонили в сентябре первый раз в жизни, но при этом им, что-то не понравилось и они не звонили после сентября.
Инфа нужна, чтоб промыть им мозги… 🙂
Вот, что у меня получилось сходу:
…
SELECT c.*,d.* FROM (SELECT a.callerid AS callerid1,a.count AS count1 FROM (SELECT callerid,dst,COUNT(*) FROM calls WHERE dt BETWEEN '2010-09-01 00:00:00' AND '2010-10-01 00:00:00' AND dst='5555555' GROUP BY callerid,dst) AS a LEFT OUTER JOIN (SELECT callerid,dst,operator FROM calls WHERE dt BETWEEN '2009-02-01 00:00:00' AND '2010-09-01 00:00:00' AND dst='5555555') AS b ON a.callerid=b.callerid WHERE b.dst IS NULL) AS c LEFT OUTER JOIN (SELECT callerid AS callerid2,dst,COUNT(*) AS count2 FROM calls WHERE dt BETWEEN '2010-10-01 00:00:00' AND '2010-11-01 00:00:00' AND dst='5555555' GROUP BY callerid,dst) AS d ON c.callerid1=d.callerid2 WHERE d.dst IS NULL |
Запрос не сильно легкий, требует оптимизации, но результат дает 🙂
Поставил Proftpd, сконфигурил…. а он взял и начал ругаться на недоступность папки для анонимного пользователя
Ноя 08 18:55:03 localhost proftpd[29469] 127.0.0.1: ProFTPD 1.3.3c (maint) (built Пнд Ноя 8 2010 18:47:55 EET) standalone mode STARTUP Ноя 08 18:55:12 localhost proftpd[29481] 127.0.0.1 (10.0.1.100[10.0.1.100]): FTP session opened. Ноя 08 18:55:12 localhost proftpd[29481] 127.0.0.1 (10.0.1.100[10.0.1.100]): ftp: Directory ~/ is not accessible. Ноя 08 18:55:14 localhost proftpd[29481] 127.0.0.1 (10.0.1.100[10.0.1.100]): FTP session closed. |
На форуме Генты узрел, что если в системе включен acl для раздела, то не будет пускать… либо отрубить acl:
Опубликовано IsakovAN в 28 Декабрь, 2006 – 22:16.
Эх, взял напильник(strace) и начал е***ись…
Короче, весь баг был в чем? В файловой системе, в которой находился /home/ftp был выключен acl! И он из-за этого отказывался пускать ананимуса. Что за глупость?!man mount:
Цитата:acl / noacl
Support POSIX Access Control Lists (or not).Т.е. в fstabе надо опцию acl вписать.
Либо просто пересобрать фтп-сервер без поддержки acl
USE="-acl" emerge -av proftpd |
Книга Работа с Postgresql: настройка, масштабирование является справочным пособием по настройке и масштабированию Postgresql. В книге иследуются вопросы по настройки производительности Postgresql, репликации и кластеризации. Изобилие реальных примеров позволит как начинающим, так и опытным разработчикам быстро разобратся с особенностями масштабирования Postgresql для своих приложений.
http://postgresql.leopard.in.ua/
ссылка на книгу если с сайта не грузится
После перехода на с Apache на связку Nginx+spawn-cgi у меня некоректно запустились сайті на DLE.
Причем проблемы была именно в ссылках ЧПУ. Обычные ссылки newsid=xxx прекласно работали.
Решение проблемы
В конфиге Nginx вместо :
# if (!-e $request_filename) { # rewrite ^(.+)$ /index.php?q=$1 last; |
Вставляем такой код:
rewrite ^/page/(.*)$ /index.php?cstart=$1 last; rewrite ^/([0-9]+)/([0-9]+)/([0-9]+)/page,([0-9]+),([0-9]+),(.*).html(/?)+$ /index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&cstart=$5&news_name=$6 last; rewrite ^/([0-9]+)/([0-9]+)/([0-9]+)/page,([0-9]+),(.*).html(/?)+$ /index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 last; rewrite ^/([0-9]+)/([0-9]+)/([0-9]+)/print:page,([0-9]+),(.*).html(/?)+$ /engine/print.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 last; rewrite ^/([0-9]+)/([0-9]+)/([0-9]+)/(.*).html(/?)+$ /index.php?subaction=showfull&year=$1&month=$2&day=$3&news_name=$4 last; rewrite ^/([^.]+)/page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$ /index.php?newsid=$4&news_page=$2&cstart=$3 last; rewrite ^/([^.]+)/page,([0-9]+),([0-9]+)-(.*).html(/?)+$ /index.php?newsid=$3&news_page=$2 last; rewrite ^/([^.]+)/print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$ /engine/print.php?news_page=$2&newsid=$3 last; rewrite ^/([^.]+)/([0-9]+)-(.*).html(/?)+$ /index.php?newsid=$2 last; rewrite ^/page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$ /index.php?newsid=$3&news_page=$1&cstart=$2 last; rewrite ^/page,([0-9]+),([0-9]+)-(.*).html(/?)+$ /index.php?newsid=$2&news_page=$1 last; rewrite ^/print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$ /engine/print.php?news_page=$1&newsid=$2 last; rewrite ^/([0-9]+)-(.*).html(/?)+$ /index.php?newsid=$1 last; rewrite ^/([0-9]+)/([0-9]+)/([0-9]+)(/?)+$ /index.php?year=$1&month=$2&day=$3 last; rewrite ^/([0-9]+)/([0-9]+)/([0-9]+)/page/([0-9]+)(/?)+$ /index.php?year=$1&month=$2&day=$3&cstart=$4 last; rewrite ^/([0-9]+)/([0-9]+)(/?)+$ /index.php?year=$1&month=$2 last; rewrite ^/([0-9]+)/([0-9]+)/page/([0-9]+)(/?)+$ /index.php?year=$1&month=$2&cstart=$3 last; rewrite ^/([0-9]+)(/?)+$ /index.php?year=$1 last; rewrite ^/([0-9]+)/page/([0-9]+)(/?)+$ /index.php?year=$1&cstart=$2 last; rewrite ^/tags/([^/]*)(/?)+$ /index.php?do=tags&tag=$1 last; rewrite ^/tags/([^/]*)/page/([0-9]+)(/?)+$ /index.php?do=tags&tag=$1&cstart=$2 last; rewrite ^/user/([^/]*)/rss.xml$ /engine/rss.php?subaction=allnews&user=$1 last; rewrite ^/user/([^/]*)(/?)+$ /index.php?subaction=userinfo&user=$1 last; rewrite ^/user/([^/]*)/page/([0-9]+)(/?)+$ /index.php?subaction=userinfo&user=$1&cstart=$2 last; rewrite ^/user/([^/]*)/news(/?)+$ /index.php?subaction=allnews&user=$1 last; rewrite ^/user/([^/]*)/news/page/([0-9]+)(/?)+$ /index.php?subaction=allnews&user=$1&cstart=$2 last; rewrite ^/user/([^/]*)/news/rss.xml(/?)+$ /engine/rss.php?subaction=allnews&user=$1 last; rewrite ^/lastnews/(/?)+$ /index.php?do=lastnews last; rewrite ^/lastnews/page/([0-9]+)(/?)+$ /index.php?do=lastnews&cstart=$1 last; rewrite ^/catalog/([^/]*)(/?)+$ /index.php?catalog=$1 last; rewrite ^/catalog/([^/]*)/page/([0-9]+)(/?)+$ /index.php?catalog=$1&cstart=$2 last; rewrite ^/newposts(/?)+$ /index.php?subaction=newposts last; rewrite ^/newposts/page/([0-9]+)(/?)+$ /index.php?subaction=newposts&cstart=$1 last; rewrite ^/static/(.*).html(/?)+$ /index.php?do=static&page=$1 last; rewrite ^/favorites(/?)+$ /index.php?do=favorites last; rewrite ^/favorites/page/([0-9]+)(/?)+$ /index.php?do=favorites&cstart=$1 last; rewrite ^/rules.html$ /index.php?do=rules last; rewrite ^/statistics.html$ /index.php?do=stats last; rewrite ^/addnews.html$ /index.php?do=addnews last; rewrite ^/rss.xml$ /engine/rss.php last; rewrite ^/sitemap.xml$ /uploads/sitemap.xml last; rewrite ^/category/([^.]+)/(.*).html(/?)+$ /index.php?subaction=showfull&news_name=$2 last; rewrite ^/category/([^.]+)/page/([0-9]+)(/?)+$ /index.php?do=cat&category=$1&cstart=$2 last; rewrite ^/category/([^.]+)(/?)+$ /index.php?do=cat&category=$1 last; if (!-d $request_filename) { rewrite ^/([^.]+)/page/([0-9]+)(/?)+$ /index.php?do=cat&category=$1&cstart=$2 last; rewrite ^/([^.]+)/?$ /index.php?do=cat&category=$1 last; } if (!-f $request_filename) { rewrite ^/([^<]+)/rss.xml$ /engine/rss.php?do=cat&category=$1 last; rewrite ^/page,([0-9]+),([^/]+).html$ /index.php?do=static&page=$2&news_page=$1 last; rewrite ^/print:([^/]+).html$ /engine/print.php?do=static&page=$1 last; } if (!-f $request_filename) { rewrite ^/([^/]+).html$ /index.php?do=static&page=$1 last; } |
В случае если менять сетевые интерфейсы на системе с генту ( как вариант замена сгоревшей), то следующая новая сетевая карта получит индекс на единицу больший.
Но иногда это не оправдано, когда в системе 3 сетевые карты, а вы заменили 2 из них… в итоге получаем : eth1,eth3,eth4 … не очень удобно и не практично.
Чтоб немного разрулить эту ситуацию можно пойти двумя путями:
1. очистить содержимое файла /etc/udev/rules.d/70-persistent-net.rules с которого udev берет информацию.
После перезагрузки вы получите нумерацию eth0, eth1,eth2
2. Отредактировать вручную этот файл на свое усмотрение:
cat /etc/udev/rules.d/70-persistent-net.rules # This file was automatically generated by the /lib64/udev/write_net_rules # program, run by the persistent-net-generator.rules rules file. # # You can modify it, as long as you keep each rule on a single # line, and change only the value of the NAME= key. # PCI device 0x14e4:0x1648 (tg3) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:e0:81:34:2a:0b", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth3" # PCI device 0x14e4:0x1648 (tg3) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:e0:81:34:2a:0a", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2" # PCI device 0x8086:0x100e (e1000) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:07:e9:0b:28:e0", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1" # PCI device 0x8086:0x100e (e1000) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:07:e9:0b:28:d5", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" # PCI device 0x8086:0x1229 (e100) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:e0:81:34:2a:55", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth4" |
Решились потренироваться делать репликацию Master-Slave, которая реализована в версии 9.0
Значит так-с…
1. Обновляем Portage
emerge --sync |
2. Ставим новую БД
LINGUAS="ru" ACCEPT_KEYWORDS="~amd64" emerge -av /usr/portage/dev-db/postgresql-server/postgresql-server-9.0.1.ebuild |
3. Конфигурим
emerge --config =dev-db/postgresql-server-9.0.1 |
4. правим конфиг и запускаем на порту 6543, не выключая старый постгресс
5. производим миграцию БД
pg_dumpall -p 5432 | psql -d postgres -p 6543 |
6. стартуем новую БД на порту 5432 предварительно выключив старую
После чего устанавливаем Postgres на втором хосте, который будет использоваться как Slave
LINGUAS="ru" ACCEPT_KEYWORDS="~amd64" emerge -av /usr/portage/dev-db/postgresql-server/postgresql-server-9.0.1.ebuild |
Вносим изменения в Master, чтобы слэйв мог к нему подключится:
$ $EDITOR postgresql.conf listen_addresses = '10.0.xx.yy' $ $EDITOR pg_hba.conf # The standby server must have superuser access privileges. host replication postgres 10.0.xx.zz/22 trust |
Для запуску Java коду на системі Gentoo ви повинні мати JRE (Java Runtime Environment) встановлений.
Перш ніж йти далі, слід зазначити, що це буде працювати тільки з 32-розрядної версії Firefox. Це тому, що бінарний пакет JRE тільки у 32-бітному виконанні отже, несумісний з 64-розрядною версією Firefox. Якщо ви працюєте в 64-бітнії системі переконайтесь, що ви встановили www-client/mozilla-firefox-bin пакет, щоб отримати 32-розрядний оглядач.
Є безліч JRE пакетів у портежей, але рекомендований пакет є dev-java/sun-jre-bin.Не слід плутати з JRE JDK (Java Development Kit), який буде додавати непотрібні Java інструменти для програмування .
Щоб отримати плагін для браузера, ви повинні включити USE прапор nsplugin для JRE. Ви можете додати прапори USE до глобальних, поставивши їх прямо в make.conf.
Якщо ви не хочете кожен раз встановлювати прапор, ви можете поставити прапор тільки на цей пакет в /etc/portage/package.use.
dev-java/sun-jre-bin nsplugin |
Потім встановлюємо JRE
emerge -av dev-java/sun-jre-bin |
Ключі ‘-V’ і ‘a’ дозволять Вам переглянути USE прапори, які включені, і підтвердити, що вони правильні, перш ніж дозволити продовжити роботу.
Якщо ви працюєте в системі amd64 то вам потрібно встановити app-emulation/emul-linux-x86-java пакет. Цей пакет містить основні 32-розрядні бібліотеки для запуску 32-розрядних двійкових файлів JRE в 64-розрядних систем.
Вам необхідно встановити прапор USE nsplugin
/etc/portage/package.use.
app-emulation/emul-linux-x86-java |
emerge -av app-emulation/emul-linux-x86-java |
Тепер у вас є все, щоб налаштувати систему на використання JRE з утилітою eselect.
Використовуйте це для x86 системи.
eselect java-nsplugin set sun-jre-bin-1.6 |
Використовуйте це для amd64 системи.
eselect java-nsplugin set 32bit emul-linux-x86-java-1.6 |
Після того, як всі ці кроки були завершені ви можете переконатися, що все правильно, запустивши:
eselect java-nsplugin list |
Доступні плагіни 32-розрядної Java
[1] emul-linux-x86-java-1.6 current |
Доступні плагіни 64-бітної Java браузера
Available 32-bit Java browser plugins [1] emul-linux-x86-java-1.6 current Available 64-bit Java browser plugins |
Переконайтеся, що Firefox знайшов плагін, відкривши about:plugins Тепер ви повинні побачити плагін Java в списку.
Никогда не пользовался системами контроля версий, так как мало что творю на языках программирования, а скрипты можно просто хранить в папочке.
Ну и вот решил попробовать хранить скрипты (и не только) в каком-то хранилище, но при этом упустить освоение SVN И CVS, а сразу приступить к Git’у , так как мы не исчем легких путей 🙂
Для начала создаем собственный репозиторий с проэктом, который будет находится не на локальной машине, а где-то в сети.
Пишу по мотивам статьи How to set up your own private Git server on Linux
Сервер и клиенты (в основном) работают под управлением Gentoo.
Итак приступим.
Для начала добавим свой публичный ключ на сервер
cd ~/.ssh ssh-keygen -t rsa scp ~/.ssh/id_rsa.pub 'user'@'server':.ssh/authorized_keys |
Теперь мы можем зайти по SSH на наш сервер и установить Git:
ssh <server> ACCEPT_KEYWORDS="~amd64" USE="bash-completion cvs subversion" emerge -av git </server> |
Теперь добавим пользователя
useradd -d /home/git -m -s /bin/bash git |
Теперь вам нужно добавить свой публичный ключ для пользователя Git
mkdir /home/git/.ssh cp ~/.ssh/authorized_keys /home/git/.ssh/ chown -R git:git /home/git/.ssh chmod 700 !$ chmod 600 /home/git/.ssh/* |
просматривать красивый дамп по SIP протоколу:
tcpdump -pvvvvvv -i <inface> -s0 udp port 5060 |
Состыковка Астериска с ИскраТел проходит довольно занятно.
Провайдер телефонной связи может отдавать телефонные звонки по SIP, но сервер сигнализации и голосовые сервера находятся в разных местах.
По умолчанию Астер считает, что источник RTP находится на одном хосте с Сервером сигнализации, чтоб сказать ему о поиске голоса на тех хостах которые приходят в INVITE, а также в SDP, в настройках sip.conf необходимо добавить такие строки
canreinvite=yes dtmfmode=info |
When SIP initiates the call, the INVITE message contains the information on where to send the media streams. Asterisk uses itself as the end-points of media streams when setting up the call. Once the call has been accepted, Asterisk sends another (re)INVITE message to the clients with the information necessary to have the two clients send the media streams directly to each other.
А также опцией permit разрешить посылать голос на хосты отличные от сигнального.
В итоге лог должен содержать что-то типа такого:
Read more