Я пытаюсь создать обратный прокси-сервер на основе местоположения.
Моя конфигурация не работает так, как ожидалось.
Он должен передавать все запросы, сделанные на бэкэнд /api
и /auth
обратно, а все остальное — на фронтэнд-сервер.
server {
listen 80;
server_name 127.0.0.1 localhost;
# remove server version
server_tokens off;
try_files $uri $uri/ =404;
autoindex off;
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
location ~ ^/(api|auth)/ {
proxy_pass http://127.0.0.1:8080/$1;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~ ^/(.*) {
proxy_pass http://127.0.0.1:3000/$1;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Upgrade $http_upgrade;
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://example.com/
похоже, работает правильно и обслуживает фронтенд, но запрос на /api
или /auth
возвращает ошибку 404 из бэкенда.
Когда я смотрю на URL запроса, который получает бэкэнд, он всегда /
и это неправильно.
В чем я не прав?
EDIT: У меня все заработало со следующими изменениями:
location ~ /(api|auth)/(.*)$ {
proxy_pass http://127.0.0.1:8080/$1/$2;
...
}
location ~ /(.*)$ {
proxy_pass http://127.0.0.1:3000/$1;
...
}