location /

Gena Makhomed gmm на csdoc.com
Вс Окт 9 11:15:36 UTC 2011


On 09.10.2011 0:08, Maxim Dounin wrote:

>> Когда-то Максим говорил, что в конфигурации всегда желательно
>> указывать "location /", но в примерах на сайте http://nginx.org/
>> не всегда указывается "location /", например, In catch-all server
>> examples, на странице http://nginx.org/en/docs/http/server_names.html

>> Вопрос: "всегда указывать location /" - это была рекомендация,
>> чтобы обойти какие-то глюки в старых версиях nginx, и сейчас,
>> в nginx 1.x.х это уже не актуально? или и сейчас есть какие-то случаи,
>> когда nginx не будет нормально работать без "location /" в конфиге ?

> Это была рекомендация, чтобы не взорвать себе мозг деталями логики
> работы, и спокойно спать по ночам.

но ошибок и предупреждений при тестировании конфига, когда в нем нет
"location /" не происходит, значит иногда такой конфиг вполне безопасен.

> Ошибок там, AFAIK, сейчас нет, а вот нюансы присутствуют.
> Например, вот эти два конфига радикально отличаются:

>      server {
>          rewrite ^(.*) /prefix$1;
>      }

>      server {
>          rewrite ^(.*) /prefix$1;
>
>          location / {
>              # nothing here
>          }
>      }

в первом случае происходит зацикливание rewrite or internal redirection
cycle while processing "/prefix/prefix/prefix/prefix/prefix/prefix/..."
а во втором rewrite на уровне server отрабатывает всего один раз.

например, судя по примерам к документации - "return 444;"
на уровне server работает без нюансов, вне зависимости
от наличия/отсутствия "location /" в конфиге этого server`а.

из этого можно сделать вывод, что в конфиге вполне можно писать

server {
     listen 11.22.33.44:80 default_server;
     server_name default-server;
     return 444;
}

server {
     server_name www.example.com;
     rewrite ^ http://example.com$request_uri? permanent;
     # или аналог через return 3xx uri / return 2xx text
}

server {
     server_name example.com;
     rewrite ^ https://example.com$request_uri? permanent;
     # или аналог через return 3xx uri / return 2xx text
}

без "location /", а во всех остальных случаях -
желательно будет явно указывать "location /" ?

и всегда желательно делать location-по-умолчанию "location /",
если в конфиге nginx присутствуют какие-либо другие location`ы.

так же как желательно будет делать и server-по-умолчанию, куда будут
попадать все запросы, для которых нет более специфичного server`а.

я ничего не упустил?

-- 
Best regards,
  Gena



Подробная информация о списке рассылки nginx-ru