
haproxy.cfg
내 파일 에 다음과 같은 구성이 있습니다 .
acl is_api url_beg -i /api
acl is_frontend hdr(host) -i subdomain.mydomain.com
use_backend api if is_api
use_backend nginx-frontend if is_frontend
내 목표:
( ) 로 시작 하지 않는 한 히트는 subdomain.mydomain.com
파일을 제공합니다. 그러면 내 백엔드를 사용해야 합니다 .nginx
path
/api
subdomain.mydomain.com/api/*
api
이제 현재 구성을 사용하여 haproxy
서비스를 다시 시작하면 두 가지 시나리오가 발생합니다.
나는 간다
subdomain.mydomain.com
– 그것은 봉사하고 있다nginx-frontend
– 훌륭하다. 그런 다음subdomain.mydomain.com/api
- 404(nginx
사용됨) 로 이동합니다 .subdomain.mydomain.com/api
나는 그것을 서빙 하러 간다api
– 훌륭하다. 그런 다음subdomain.mydomain.com
- 404(api
백엔드가 사용됨) 로 이동합니다 .
따라서 두 페이지 중 첫 번째 방문 순서에 따라 내 하위 도메인에 대한 모든 요청이 두 백엔드에 할당됩니다.
완전 초보라서 바보같은 질문이었다면 죄송합니다.
도움이 필요하세요?
답변1
좋아, 방법을 알아냈는데... 하지만 nginx
구성( /etc/nginx/sites-enabled/default
)에서는 다음과 같습니다.
server {
listen 8080 default_server;
listen [::]:8080 default_server ipv6only=on;
server_name subdomain.mydomain.com;
location /api {
proxy_pass http://127.0.0.1:4001;
}
location / {
try_files $uri $uri/ =404;
}
}
그리고 haproxy.cfg
파일에서:
backend nginx
server nginx-1 127.0.0.1:8080 check
frontend all
bind *:80
mode http
acl is_frontend hdr(host) -i subdomain.mydomain.com
use_backend nginx if is_frontend
# other frontends...
누군가가 그것이 좋은 접근 방식인지에 대해 논평할 수 있다면 감사하겠습니다!
답변2
. url_beg
이는 도메인 뒤의 부분이 아닌 전체 URL을 사용합니다. 즉, 도메인이 들어옵니다 "http..."
.http://subdomain.mydomain.com/api
url_beg URL이 문자열 중 하나로 시작되면 true를 반환합니다. 이는 URL이 슬래시로 시작하는지 아니면 프로토콜 체계로 시작하는지 확인하는 데 사용할 수 있습니다.
대신 사용하세요 path_beg
.
frontend fe
...
acl is_api path_beg -i /api
acl is_frontend hdr(host) -i subdomain.mydomain.com
use_backend api if is_api
use_backend nginx-frontend if is_frontend !is_api