Как выявить 404 ошибку в nginx на 80 порту и перенаправить запрос на 8080 порт, который слушает apache сервер?

Ребят, смотрите ситуация без nginx:
1. Клиент запросил файл, допустим image.jpg, которого физически не существует, apache обрабатывает запрос, поняв что файла физически нет, перенаправляет запрос на сторону php, который в свою очередь создаёт этот файл.
2. Клиент снова запросил файл, image.jpg который физически существует (см. п. 1), следовательно сразу отдаётся клиенту.

А теперь смотрите ситуацию с nginx:
1. Клиент запросил файл, допустим image.jpg, которого физически не существует, nginx оповещает клиента о 404 ошибке.

Собственно вопрос, как реализовать правильную схему, в настройках nginx такого рода:
1. Клиент запросил несуществующий файл, nginx обрабатывает запрос, и перенаправляет его на apache (8080 порт).
2. Apache обработав запрос, действует по схеме, описанной в самом начале (п.п. 1,2 в самом начале).

Что посоветуете? Спасибо.

P.S. Если одной строкой: Как выявить 404 ошибку в nginx на 80 порту и перенаправить запрос на 8080 порт, который слушает apache сервер.
  • Вопрос задан
  • 4883 просмотра
Пригласить эксперта
Ответы на вопрос 5
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
у nginx для этого есть директива try_files.

А зачем вам apache в этой цепочке? Можно же напрямую на php-fpm передавать запросы такие?
Ответ написан
xaker1
@xaker1
location{
....
error_page 404 = /404.php;
}

Соответственно 404.php - скрипт, создающий ваш файл. В данном случае он же может отдать файл клиенту. Тогда разницы между первым запросом и остальными внешне не будет.
Ответ написан
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.
error_page 404 = @fallback;
location / { ...; }
location ~* ^.+\.(jpg|jpeg|gif|...) { ...; }
location @fallback {
	proxy_pass http://127.0.0.1:81;
	proxy_set_header Host $host;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	proxy_set_header X-Forwarded-Proto $scheme;
	proxy_set_header X-Real-IP $remote_addr;
}


Скорее всего так. А в апаче (в htaccess) у вас уже наверняка обрабатываются несуществующие файлы.
Ответ написан
Комментировать
street
@street
Backend developer
Если таких запросов не много, то можно включить кеширование 200 ответов в nginx, а обработку запросов повесить на PHP. Но такой метод может "скушать" ОЗУ.
Ответ написан
Комментировать
error_page 404 = @fallback;
#--------------Все 404 отдаем на обработку апача-------------------------------
location @fallback {
proxy_pass http://$host:82;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы