Назад | Перейти на главную страницу

В чем разница между «location / path» и «location ^ ~ / path» в блоке местоположения nginx?

У меня есть многосайтовая сеть WordPress, и я пытаюсь перенести ее на свой новый сервер по одному сайту за раз, поэтому у меня есть обратный прокси-сервер на моем сервере nginx, указывающий на старый сервер для каждого дочернего сайта.

Когда я делаю:

location /oldsite1 {
   proxy_pass http://myoldip;
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
}
location /oldsite2 {
   proxy_pass http://myoldip;
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
}

Я могу получить доступ к интерфейсу сайта по адресам mydomain.com/oldsite1 и mydomain.com/oldsite2, но когда я перехожу на mydomain.com/oldsite1/wp-admin, все таблицы стилей и файлы JS возвращают 404. То же самое для / oldsite2.

Когда я делаю

location ^~ /oldsite1 {
   proxy_pass http://myoldip;
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
}
location ^~ /oldsite2 {
   proxy_pass http://myoldip;
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
}

Кажется, все работает нормально, нет проблем, но я не уверен, что на самом деле делает "^ ~", чтобы исправить это, или если есть причина, по которой я не должен делать это таким образом.

В документации указано:

Если у самого длинного совпадающего префикса есть модификатор «^ ~», то регулярные выражения не проверяются.

Я не уверен, чем это поведение отличается от простого отсутствия модификатора перед путем местоположения и почему.