<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="http://178.140.10.58:8080/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="http://178.140.10.58:8080/feed.php">
        <title>Библиотека знаний - nginx:faq</title>
        <description>Заметки IT программиста</description>
        <link>http://178.140.10.58:8080/</link>
        <image rdf:resource="http://178.140.10.58:8080/lib/exe/fetch.php?media=wiki:dokuwiki.svg" />
       <dc:date>2026-04-17T13:22:02+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="http://178.140.10.58:8080/doku.php?id=nginx:faq:locations"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="http://178.140.10.58:8080/lib/exe/fetch.php?media=wiki:dokuwiki.svg">
        <title>Библиотека знаний</title>
        <link>http://178.140.10.58:8080/</link>
        <url>http://178.140.10.58:8080/lib/exe/fetch.php?media=wiki:dokuwiki.svg</url>
    </image>
    <item rdf:about="http://178.140.10.58:8080/doku.php?id=nginx:faq:locations">
        <dc:format>text/html</dc:format>
        <dc:date>2021-12-31T00:26:30+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Алгоритм выбора location в Nginx</title>
        <link>http://178.140.10.58:8080/doku.php?id=nginx:faq:locations</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;алгоритм_выбора_location_в_nginx&quot;&gt;Алгоритм выбора location в Nginx&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432\u044b\u0431\u043e\u0440\u0430 location \u0432 Nginx&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c_\u0432\u044b\u0431\u043e\u0440\u0430_location_\u0432_nginx&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-63&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;root_vs_alias&quot;&gt;root VS alias&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;location /ks/ {
        root /opt/images/;
}
# /opt/images/ks
&lt;/pre&gt;
&lt;pre class=&quot;code&quot;&gt;location /ks/ {
        alias /opt/images/;
}
# /opt/images
&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;root VS alias&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;root_vs_alias&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;64-246&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;с_одним_уровнем_вложенности&quot;&gt;С одним уровнем вложенности&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 Вначале будет искаться равенство (=) . Оно имеет высший приоритет.
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 Потом будет искаться максимальный по длине префиксный location , после чего будет проверено, есть ли на найденном location модификатор приоритета (^~), и если он есть, то будет возвращён этот location.
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 Потом будут проверяться регулярные выражения ((~) и (~*))  сверху вниз. При совпадении будет возвращён первый location из них.
&lt;/div&gt;&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;
 Потом вернётся тот префиксный location, который мы нашли до этого.
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421 \u043e\u0434\u043d\u0438\u043c \u0443\u0440\u043e\u0432\u043d\u0435\u043c \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441_\u043e\u0434\u043d\u0438\u043c_\u0443\u0440\u043e\u0432\u043d\u0435\u043c_\u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;247-1170&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;с_вложенными_location&quot;&gt;С вложенными location&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Стартуем с верхнего уровня. Если на текущем уровне выполняется равенство (&lt;img src=&quot;http://178.140.10.58:8080/lib/images/smileys/smile2.svg&quot; class=&quot;icon smiley&quot; alt=&quot;=)&quot; /&gt; , поиск прекращается — это и будет результат, т. к. такой location не может иметь никаких других вложенных location. В противном случае ищем на текущем уровне самый большой префиксный location (3) )&amp;lt;/sup&amp;gt; . Если такой префиксный location существует, то делаем его текущим уровнем и переходим к п. 2. В противном случае выходим из цикла. Мы вышли из цикла. На данный момент мы нашли «самый большой» префиксный location, но не думайте, что это самый большой из всех. Пример:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;location /abc {
    location /abcdefghi {
        …
    }
}

location /abcdef {
    …
}
&lt;/pre&gt;

&lt;p&gt;
В данном примере мы перейдём в /abcdef, т. к. на его уровне он переборол более короткий /abc. Но по факту существуют location и больше него. Теперь в найденном location мы ищем первый верный regexp. При нахождении поиск полностью прекращается. Обратите внимание: в этом пункте мы по факту ищем regexp на самом нижнем уровне, а не на верхнем, как многие могли бы подумать. Т. е. поиск regexp идёт снизу, а не сверху (но внутри одного уровня идёт сверху, а не снизу). Далее, если ничего не найдено, поднимаемся на один уровень вверх и аналогично ищем первый regexp, но в этот раз уже только при условии, что location, в котором мы были до этого, не имел метки (^~). Повторяем этот пункт до тех пор, пока подниматься будет некуда. При этом нужно иметь ввиду: Даже если какой-то из уровней имеет метку (^~), это не значит, что мы не осуществляем подъём. Подъём осуществляется всегда, но если более нижний уровень имел метку (^~), то на текущем уровне поиск regexp&amp;#039;ов не проводится. Возможности запретить проверку regexp в самом нижнем уровне нет — для этого нужно создать ещё один вложенный уровень. А вот запретить проверку regexp на нулевом уровне можно — для этого location первого уровня (который находится на нулевом уровне) должен иметь метку (^~). Мы сделали подъём по дереву, но так и не нашли ни одного regexp. Раз regexp не найден, возвращаем «почти самый большой» префиксным location, который был найден ранее.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 location&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441_\u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438_location&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1171-&amp;quot;} --&gt;</description>
    </item>
</rdf:RDF>
