nginx Регламент местоположения для нескольких путей, но недействительный - PullRequest
1 голос
/ 21 марта 2020
    location ^~/images/ {
        root /mnt/disha;
    }
    location ^~/pdf/ {
        root /mnt/disha;
    }
    location ^~/contact/ {
        root /mnt/disha;
    }
    location ^~ /excel {
        root /mnt/disha;
    }

Как я могу объединить эти 4 в 1 местоположение?

Я пробовал это:

location ~ ^/(images|pdf|contact|excel)/ {
    root /mnt/disha;
}

Работало нормально с 4 местоположениями, тогда nginx приходит 404 Не найдено после объединения с 1.

я также попробовал location ~ * ^ / (images | pdf | contact | excel).

все методы, которые я пробовал, недопустимы, что мне делать?

Вот мой весь сервер Conf:

server{
    listen 80;
    listen 443 ssl;
    server_name erp.xxx.com;
    index index.html;
    location ~ ^/(images|pdf|contact|excel)/ {
        root /mnt/disha;
    }
    location ^~/{
        root /mnt/disha/erp;
    }
    ssl_certificate /etc/xxx/xxx.pem;
    ssl_certificate_key /etc/xxx/xxx.key;
    ssl_ciphers ECDHE-RSA-AES128-GCM- 
    SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
}

запрос 404, который я протестировал:

wget http://erp.xxx.com/excel/export_outbound_stock_20200321150255.xls

1 Ответ

0 голосов
/ 21 марта 2020

Модификатор ^~ заставляет совпадающий префикс location иметь приоритет над всеми блоками регулярного выражения location.

location ^~ / { ... } эффективно отключает любое местоположение регулярного выражения.

Чтобы преобразовать четыре префиксных блока location в один блок регулярного выражения location, вы также должны удалить модификатор ^~ из последнего блока location.

Например:

root /mnt/disha/erp;

location / {
}

location ~* ^/(images|pdf|contact|excel)/ {
    root /mnt/disha;
}

Фактически, блок location / можно опустить, если он пустой, так как оператор root может быть помещен в контекст блока server.

См. этот документ для деталей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...