
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
サービスを再起動すると、次の 2 つのシナリオが考えられます。
に行くと、
subdomain.mydomain.com
- うまく機能しています- 素晴らしいです。 次に、 - 404 (使用されました)nginx-frontend
に移動します。subdomain.mydomain.com/api
nginx
subdomain.mydomain.com/api
サービングにアクセスします- 素晴らしいです。その後、 404 (バックエンドが使用されました)api
に移動します。subdomain.mydomain.com
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
404エラーが発生します。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