Nginx – отличный веб-сервер, но он также замечателен как обратный прокси, и это отлично когда вы делаете обе вещи одновременно.
Если вы хотите, чтобы Nginx выполнял роль веб-сервера, но если есть ошибка, ошибка 404 вы можете передать вызов Apache или любому другому серверу.
location / {
index index.html
try_files $uri $uri/ @apache;
}
Это скажет Nginx, чтобы он обслуживал все страницы и папки, которые соответствуют файлу или папке на диске, но если он не может найти его, он перейдет на @apache
И @apache выглядит так:
location @apache {
proxy_pass http://1.2.3.4:81;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Просто измените IP и порт в директиве proxy_pass, чтобы соответствовать вашим требованиям.
я обнаружил, что для того, чтобы Nginx отправил все ошибки «File Not Found 404» на бэкэнд, вам также нужно добавить эту строку в блок server
error_page 404 = @apache;
Финальный блок может выглядеть так:
server {
listen 80;
root /var/www;
index index.html;
server_name www.garron.me;
error_page 404 = @apache;
location / {
try_files $uri $uri/ @apache;
}
location @apache {
proxy_pass http://localhost:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache wwwgarron;
proxy_cache_valid 200 301 302 5s;
proxy_cache_use_stale updating error timeout invalid_header http_500;
proxy_ignore_headers Cache-Control Expires;
}
}