Эта статья впервые опубликована 2023-07-05
Предположим, вы хотите обслуживать некоторые дорожки рельсами, а некоторые другие дорожки WordPress. Или вы хотите, чтобы приложение обслуживало страницы рельсов, если они доступны, и возвращалось на WordPress в противном случае.
Для SEO и, как правило, для хорошей структуры онлайн-ресурсов, возможно, вы хотите, чтобы приложения (мы будем называть их восходящими потоками) делились пространством имен. Другими словами, если вы являетесь категориями обслуживания, вы хотите, чтобы пути выглядели как /категории / чайники, /категории / кофе-маги, а не /блог / категории / чайники и /rails-приложение / категории / кофе-маги. Вопрос в том, каково техническое решение этой проблемы?
Мы будем использовать nginx для решения этой проблемы.
восходящий бэкэнд {
сервер 192.2.0.1;
сервер 192.2.0.2;
...
?
Сервер {
...
местоположение / {
proxy pass http://backends;
proxy next upstream тайм-аут ошибки http 404;
?
?
где вышестоящие серверы - рельсы и WordPress, в таком порядке.
Давайте попробуем это на Localhost!
А для файлов на диске, возможно, статических активов, конфигурация выглядит следующим образом:
местоположение / {
root/path/to/root;
try files $uri@fallback;
?
Местоположение @fallback {
proxy pass http:
?
Другим, менее предпочтительным и непроверенным решением будет:
местоположение / {
Отправить 404s в B
error page 404 = @backendB
proxy intercept errors;
log not found off;
# Попробуйте прокси как обычно
proxy set header X-Forwarded-For $remote addr
прокси set header Хост $host;
proxy set header X-Real-IP $remote addr
proxy pass http://A;
?
Расположение @backendB {
Если А не сработало, попробуем Б.
proxy set header X-Forwarded-For $remote addr
прокси set header Хост $host;
proxy set header X-Real-IP $remote addr
proxy pass http://B;
Все 404 здесь обрабатываются нормально.
?