LINUX.ORG.RU
ФорумAdmin

Задачка по Nginx. Нужно настроить альтернативный путь с внутренним перенаправлением в reverse-proxy settings

 , , ,


0

1

Необходимо настроить Nginx так, чтобы любой URL адрес, который не найден, идет по альтернативному пути, с внутренним перенаправлением (не меняется/не перенаправляется адрес в броузере). Эквивалент в Apache строка:

FallbackResource /path/to/fallbackdirectory/fallbackhandler.ext (ext can be php, py, jsp, c etc.)

Допустим альтернативный путь: http://appservers/fallbackdirectory/fallbackhandler.php

server{
       listen 80;
       index index.html index.htm index.php;
       server_name www.test.com
       location / {
                # допустим http://appservers/www/ есть www.test.com в броузере
                proxy_pass http://appservers/www/;
                proxy_http_version 1.1;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

Адрес сайта - http://www.test.com. Все, что вбивается после этого пути если не найдено должно попадать в альтернативный путь (внутреннее перенаправление, означающее никакого изменения в адресе или перенаправления в адресной строке броузера).

Альтернативный путь дан выше: (http://appservers/fallbackdirectory/fallbackhandler.php) который нужно настроить в Nginx конфиге.

Например, когда кто-то открывает адрес http://www.test.com/not_existing_directory/ и not_existing_directory не существует, нужно попасть в альтернативный путь и при этом сохранить http://www.test.com/not_existing_directory/ в адресной строке браузера.

Если директория существует, например, http://www.test.com/existing_directory/ тогда никаких изменений не должно производиться. Должно происходить обычное поведение - попадаем в существующие директории и файлы. Необходимый конфиг альтернативного пути необходим только для файлов и директорий, которые не существуют.

Это лишь пример, он может быть в несколько уровней тоже, например http://www.test.com/dir1/dir2/dir3/ или http://www.test.com/dir1/not_existing.php и т.д.

Все, что не найдено должно попадать в альтернативный путь, приведенный выше.

NB: Необходимо это сделать в настройках reverse-proxy

proxy_intercept_errors on;
error_page 404 = @fallback;

location @fallback {
proxy_pass http://olo.olo;
}
anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.