nginx зачем мне дополнительный блок location?

Мне было интересно, не могли бы вы пояснить, почему добавление того, что я сделал, помогло решить мою проблему, поскольку, хотя моя проблема устранена, я не уверен, почему это работает, и раньше это не работало в настройке.

Старая установка:

У меня есть файлы, которые обслуживаются по следующему адресу: http://192.168.33.1:3000/bower_components/... например, (http://192.168.33.1:3000/bower_components/animate.css/animate.css)

У меня настроен обратный прокси-сервер nginx по адресу http://192.168.33.10:80/.

У меня есть следующий блок местоположения:

location /content {
   proxy_pass http://192.168.33.1:3000/;
   proxy_redirect off;
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_max_temp_file_size 0;
   client_max_body_size 10m;
   client_body_buffer_size 128k;
   proxy_connect_timeout 90;
   proxy_send_timeout 90;
   proxy_read_timeout 90;
   proxy_buffer_size 4k;
   proxy_buffers 4 32k;
   proxy_busy_buffers_size 64k;
   proxy_temp_file_write_size 64k;
}

В этой настройке будет загружен следующий URL-адрес: http://192.168.33.10/content/app/index.css

но следующий URL-адрес даст мне 404, даже если прямой доступ к файлу загрузится нормально: http://192.168.33.10/content/bower_components/animate.css/animate.css (или что-нибудь еще в папке Bower_components в этом отношении)

Исправление:

Немного поиграв, я обнаружил, что если добавить следующий блок местоположения, все будет работать:

location /content/bower_components {
     proxy_pass http://192.168.33.1:3000/bower_components;
}

Я понимаю, почему этот дополнительный блок местоположения будет работать, но я не понимаю, почему первоначальный блок местоположения не включал правило добавления блока местоположения, которое я добавил.

Любые советы относительно того, что происходит?


person ThinkBonobo    schedule 25.07.2016    source источник


Ответы (1)


Это может быть или не быть правильным ответом, но...

Блок локации:

location /content {
    proxy_pass http://192.168.33.1:3000/;
    ...
}

использует псевдонимы URI, начинающиеся с /content до /, в которых отсутствует завершающий /.

Я хотел бы использовать:

location /content/ {
    proxy_pass http://192.168.33.1:3000/;
    ...
}

а затем исправьте конкретный случай /content, если вам нужно.

Я не знаю, почему http://192.168.33.10/content/app/index.css работает.

Дополнительные сведения см. в этом документе.

person Richard Smith    schedule 25.07.2016