Я пытаюсь сбалансировать нагрузку веб-приложения через nginx, он отлично работает для всех, будет ли мое веб-приложение вызывать службу с подпутьем.
например это работает
http://example.com/luna/
но не для
http://example.com/luna/sales
Мой nginx.conf
user nobody;
worker_processes auto;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream lunaups {
server myhostserver1.com:8080;
server myhostserver2.com:8080;
}
server {
listen 80;
server_name example.com;
proxy_pass_header Server;
location = / {
rewrite ^ http://example.com/luna redirect;
}
location /luna {
rewrite ^$/luna/(.*)/^ /$1 redirect;
proxy_pass http://lunaups;
#add_header X-Upstream $upstream_addr;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
мое веб-приложение вызывает службу с дополнительным подпутьем, например / luna / sales, не возвращает ответ. Что мне здесь не хватает?
Это работает, если я удалю один из моих хост-серверов из восходящего потока, но когда я добавляю второй хост в восходящий поток, он не возвращает ответ.
Мое правило перезаписи неверно или все мои конфигурации неверны?
Ваше правило перезаписи перенаправляет веб-браузер с /luna/sales
к /sales
. Это означает, что веб-браузер выполняет новый HTTP-запрос для /sales
, но тогда у вас нет location
блок, который соответствует /sales
поэтому вы получите ошибку 404.
Я считаю, что вы действительно пытаетесь изменить URI, который проксируется на восходящий поток. Если да, вы можете попробовать изменить свой location
блок:
location ~ /luna(?<upstream_uri>(/.*)?) {
proxy_pass http://lunaups/$upstream_uri;
}
Это будет соответствовать либо /luna
или /luna/whatever
, привяжите совпавшее подвыражение как $upstream_uri
а затем отправьте только это подвыражение своему апстриму.