500 ошибка в nginx
Скверная ошибка попалась... в логах php пусто, в логах apache пусто - ошибок нет
Посмотреть, что творится в логах nginx сразу мысль не пришла, а зря.
Снижение трафика на сервере
Столкнулся с проблемой нового хостинга, где ограничение по трафику - 2Tb.
Сайт, с просмотром/скачиванием видео ~20.000 за сутки, кушает 120Gb.
Пришлось принять меры:
- ограничил скачивание видео для пользователей - 3 видео в сутки (пока элементарно, если применить мозг - ломается мгновенно)
- в nginx сделал элементарное ограничение по скорости и коннектам
в зоне http:
limit_zone download $binary_remote_addr 10m;
в location:
limit_conn download 2;
limit_rate_after 2048k;
limit_rate 128k;
restart nginx в debian:
/etc/init.d/nginx restart
просмотр трафика в realtime утилитой ifstatus
Количество одновременное воспроизводимых видео - 2
После скачки 2Mb скорость падает до 128Kb
Nginx – логические операторы «И», «ИЛИ»
Как написать location в nginx, который срабатывает, если два условия должны выполняться. Логично было бы написать так:
if ($http_user_agent ~* "Opera" AND $http_referer ~* "yandex.ru") {
bla bla bla
}
nginx не предусматривает в условиях логические операторы
Решение есть в виде хака:
set $a "";
if ($http_user_agent ~* "Opera" ) {
set $a 1;
}
if ($http_referer ~* "yandex.ru") {
set $a 1$a;
}
if ($a = 11) {
bla bla bla
}
Идея очень проста, создается переменная, в которую по мере срабатывания условий накапливается строка. Далее срабатывает какое-либо условие с учетом этой строки.
Может man читал не внимательно и кто-то подскажет более красивое решение этой проблемы?