Рейтинг:0

NGINX — обратный прокси, но одна подпапка в статическом локальном каталоге

флаг mt

У меня возникли проблемы с определением основного синтаксиса для передачи большей части трафика на локальную установку Solr, но при этом один запрос path/dir отправляется в статический каталог html. Все ли вторичные, третичные и т. д. местоположения должны быть установлены регулярным выражением? Не удалось найти простое руководство по этому вопросу.

текущие ошибки: /adv/index.html — 404 — не найдено /adv/ - 403 Запрещено /solr/ - работает нормально

Вот моя конфигурация:

www-данные пользователя;
рабочие_процессы авто;
pid /run/nginx.pid;
#include /etc/nginx/modules-enabled/*.conf;

События {
        worker_connections 1024;
        мульти_принять;
}

http {
        отправить файл включен;
        tcp_nopush включен;
        tcp_nodelay включен;
        keepalive_timeout 65;
        типы_хэш_макс_размер 2048;
        индекс index.html;

        включить /etc/nginx/mime.types;
        default_type application/octet-stream;
        сервер {
                слушать 80;

                место расположения / {
                    proxy_pass http://localhost:8983;
                }

                местоположение / реклама / {
                        # также не был уверен, какие разрешения здесь нужны
                        # рекурсивно установить папку adv и файлы внутри на 777
                        псевдоним /var/www/adv;
                }
        }
}
Richard Smith avatar
флаг jp
Проверьте журнал ошибок, но также попробуйте `root /var/www;` вместо `alias /var/www/adv;`
Ivan Shatsky avatar
флаг gr
@Tyndall Когда вы используете директиву alias внутри местоположения, вам нужно осторожно использовать косые черты.Ваша конфигурация заменит префикс `/adv/` вашего URI на `/var/www/adv`, что приведет к недопустимому имени файла. [Здесь] (https://stackoverflow.com/a/69296739/7121513) более подробное объяснение с примерами.
флаг mt
странный. Судя по журналам, мои запросы либо пытались добраться до /adv/adv/index.html, когда я использовал root, и /advindex.html, когда я использовал псевдоним.
флаг mt
Если я попытаюсь использовать root и удалить adv из пути (позволив ему добавить себя из URL-адреса, который я передаю), он будет работать для всего, кроме /adv, почти как будто он не знает своего каталога и просто обслуживает мой index.html файл. (/adv/ работает и /adv/index.html работает)
Ivan Shatsky avatar
флаг gr
@Tyndall Это ожидаемое поведение. Вы можете принудительно перенаправить, используя что-то вроде `location = /adv { return 301 /adv/; }`. Используйте либо `root /var/www`, либо `alias /var/www/adv/` внутри `location /adv/ { ... }`, но не `alias /var/www/adv`. Использование `root /var/www/` не принесет такого вреда, поскольку приведет к пути к файлу `/var/www//adv/index.html`, который тоже будет работать.
Ivan Shatsky avatar
флаг gr
@Tyndall Или вы можете использовать `location /adv { root /var/www; }` или `location /adv { псевдоним /var/www/adv; }`, однако он превзойдет любой URI запроса, начинающийся с `/adv`, например. `/ вперед` тоже.
флаг mt
всем спасибо. Итак, решение, которое, кажется, работает для меня. Из первого комментария Ивана (и Ричарда) это псевдоним без косой черты в пути местоположения или пути псевдонима. Странно то, что когда я набираю /adv без косой черты, я думаю, что меня перенаправляют на версию URL с косой чертой в конце. Это нормально для Nginx?
Ivan Shatsky avatar
флаг gr
@Tyndall Я думаю, что это нормально для каждого веб-сервера, поскольку `adv` - это каталог, а не файл. Вы просматриваете индекс внутри каталога `adv`. Думайте об этом, как о файловой системе.
флаг mt
Следует добавить это как ответ, чтобы получить кредит. Еще раз спасибо.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.