#nginx-config #nginx-location
Вопрос:
Следующие повторные матчи «http://my.domain/video.mp4» успешно, но не может соответствовать «http://my.domain/abc/video.mp4».
location ~ "^. (mp4|mkv|m4a)$" {
root /home/user/Videos;
}
Журнал Nginx гласит
[05/May/2021:12:29:25 0800] "GET /video.mp4 HTTP/1.1" status: 206, body_bytes: 1729881
[05/May/2021:12:29:46 0800] "GET /abc/video.mp4 HTTP/1.1" status: 404, body_bytes: 555
Это подключено. На самом деле, я хочу, чтобы URL-адреса в разделе «/service1/» были сопоставлены с каталогом пользователя 1, а URL-адреса в разделе «/service2» были сопоставлены с каталогом пользователя 2. Поэтому я пишу
location ~ "^/service1/. (mp4|mkv|m4a)$" {
root /home/user1/Videos;
}
location ~ "^/service2/. (mp4|mkv|m4a)$" {
root /home/user2/Videos;
}
И как первый пример, эта конфигурация не может ни с чем совпадать.
Я много искал в Google. Никакой ответ не может этого объяснить. Я хочу, чтобы это сработало. Спасибо!
Ответ №1:
Я знаю, в чем проблема. В моей второй конфигурации, если мне потребуется «/service1/abcd.mp4», Nginx попытается найти его по адресу «/home/user1/Видео/service1/abcd.mp4», но на самом деле файл находится по адресу «/home/user1/Видео/abcd.mp4». Теоретически я могу обойти это, переписав
location ~ "^/service1/. (mp4|mkv|m4a)$" {
rewrite "^/service1/(. (mp4|mkv|m4a))$" "$1";
root /home/user1/Videos;
}
location ~ "^/service2/. (mp4|mkv|m4a)$" {
rewrite "^/service2/(. (mp4|mkv|m4a))$" "$1";
root /home/user2/Videos;
}
Но это не работает. Я схожу с ума.