<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>Re[2]: &#1057;&#1080;&#1085;&#1090;&#1072;&#1082;&#1089;&#1080;&#1089; &#1082;&#1086;&#1085;&#1092;&#1080;&#1075;&#1091;&#1088;&#1072;&#1094;&#1080;&#1086;&#1085;&#1085;&#1086;&#1075;&#1086; &#1092;&#1072;&#1081;&#1083;&#1072;</title>
<META http-equiv=Content-Type content="text/html; charset=windows-1251">
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
body {
  margin: 5px 5px 5px 5px;
  background-color: #ffffff;
}
/* ========== Text Styles ========== */
hr { color: #000000}
span.rvts1 /* Heading */
{
 font-size: 10pt;
 font-family: 'Arial';
 font-weight: bold;
 color: #0000ff;
}
span.rvts2 /* Subheading */
{
 font-size: 10pt;
 font-family: 'Arial';
 font-weight: bold;
 color: #000080;
}
span.rvts3 /* Keywords */
{
 font-size: 10pt;
 font-family: 'Arial';
 font-style: italic;
 color: #800000;
}
a.rvts4, span.rvts4 /* Jump 1 */
{
 font-size: 10pt;
 font-family: 'Arial';
 color: #008000;
 text-decoration: underline;
}
a.rvts5, span.rvts5 /* Jump 2 */
{
 font-size: 10pt;
 font-family: 'Arial';
 color: #008000;
 text-decoration: underline;
}
span.rvts6
{
 font-weight: bold;
 color: #800000;
}
span.rvts7
{
 font-weight: bold;
 color: #800080;
}
a.rvts8, span.rvts8
{
 color: #0000ff;
 text-decoration: underline;
}
span.rvts9
{
 font-size: 8pt;
 font-family: 'arial';
 font-style: italic;
 color: #c0c0c0;
}
a.rvts10, span.rvts10
{
 font-size: 8pt;
 font-family: 'arial';
 color: #0000ff;
 text-decoration: underline;
}
/* ========== Para Styles ========== */
p,ul,ol /* Paragraph Style */
{
 text-align: left;
 text-indent: 0px;
 padding: 0px 0px 0px 0px;
 margin: 0px 0px 0px 0px;
}
.rvps1 /* Centered */
{
 text-align: center;
}
--></style>
</head>
<body>

<p>Здравствуйте, Gena.</p>
<p><br></p>
<p>Вы писали 16 марта 2009 г., 23:52:57:</p>
<p><br></p>
<p><span class=rvts6>&gt; On Monday, March 16, 2009 at 21:11:52, Denis V. Roghnovskiy wrote:</span></p>
<p><br></p>
<p><span class=rvts7>DVR&gt;&gt; Мне потребовалось реализовать в конфиге nginx проверку реферала,</span></p>
<p><span class=rvts7>DVR&gt;&gt; все хорошо, но вот не найду нигде как оформить синтаксис.</span></p>
<p><br></p>
<p><a class=rvts8 href="http://sysoev.ru/nginx/docs/http/ngx_http_referer_module.html">&gt; http://sysoev.ru/nginx/docs/http/ngx_http_referer_module.html</a></p>
<p><br></p>
<p><span class=rvts6>&gt; ?</span></p>
<p><br></p>
<p>Ага, спасибо, буду пробовать.</p>
<p><br></p>
<p><span class=rvts7>DVR&gt;&gt; Сейчас все выглядит так:</span></p>
<p><br></p>
<p><span class=rvts7>DVR&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ($http_referer ~ .some_value.){</span></p>
<p><span class=rvts7>DVR&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return 403;</span></p>
<p><span class=rvts7>DVR&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</span></p>
<p><span class=rvts7>DVR&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ($http_referer ~ .some_value_2.){</span></p>
<p><span class=rvts7>DVR&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return 403;</span></p>
<p><span class=rvts7>DVR&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</span></p>
<p><span class=rvts7>DVR&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ($http_referer ~ .some_value_3.){</span></p>
<p><span class=rvts7>DVR&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return 403;</span></p>
<p><span class=rvts7>DVR&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</span></p>
<p><br></p>
<p><span class=rvts7>DVR&gt;&gt; В итоге количество вхождений увеличивается ровно на количество</span></p>
<p><span class=rvts7>DVR&gt;&gt; if`ов, возможна ли реализация "в одну строку" и проверкой</span></p>
<p><span class=rvts7>DVR&gt;&gt; в одном if`е но с оператором подобным 'or' ?</span></p>
<p><br></p>
<p><span class=rvts6>&gt; если надо блокировать только адреса из определенного списка</span></p>
<p><span class=rvts6>&gt; в referer - подозреваю, что проверку можно написать так:</span></p>
<p><br></p>
<p><span class=rvts6>&gt; if ( $invalid_referer = 0 ) {</span></p>
<p><span class=rvts6>&gt; &nbsp; &nbsp; &nbsp;return 403;</span></p>
<p><span class=rvts6>&gt; }</span></p>
<p><br></p>
<p><span class=rvts6>&gt; PS можно было бы слегка доработать напильником модуль</span></p>
<p><span class=rvts6>&gt; &nbsp; &nbsp;http_referer, добавив директиву invalid_referers,</span></p>
<p><span class=rvts6>&gt; &nbsp; &nbsp;когда все остальные referers будут считаться valid,</span></p>
<p><span class=rvts6>&gt; &nbsp; &nbsp;а только для referes из даного списка $invalid_referer</span></p>
<p><span class=rvts6>&gt; &nbsp; &nbsp;будет не равно 0. одновременное присутствие в конфиге</span></p>
<p><span class=rvts6>&gt; &nbsp; &nbsp;директив valid_referers и invalid_referers - это ошибка,</span></p>
<p><span class=rvts6>&gt; &nbsp; &nbsp;потому что может быть задана только какая-то одна директива.</span></p>
<p><br></p>
<p>Ложкой дегтя является большое количество значений. Затеял я это для того, что бы запретить отдачу графики для более чем 40 серверов которые с наглым видом тянут ее от меня - трафик то покупается, да и других дел у сервера очень много. До использования nginx все решалось в .htacsess - файле для Апача, теперь же графикой заведует nginx.</p>
<p><br></p>
<p><br></p>
<p><span class=rvts9>--&nbsp;</span></p>
<p><span class=rvts9>С уважением,</span></p>
<p><span class=rvts9>&nbsp;Denis &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><a class=rvts10 href="mailto:sudo@od-news.ru">mailto:sudo@od-news.ru</a></p>

</body></html>