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