私は次のAPIを持っています:
NGINXを使用して、次の場所ですべて実行できるようにしたいと思います。
localhost:443/api /
顧客が2つのサーバーにまたがっているため、これは非常に難しいようです。
これが注文から始まった失敗した試みです
server {
listen 443;
server_name localhost;
location /api/orders {
proxy_pass https://localhost:500/api/orders;
proxy_set_header Host $Host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
server {
listen 443;
server_name localhost;
location /api/customers/$id/billing {
proxy_pass https://localhost:400/api/customers/$id/billing;
proxy_set_header Host $Host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
server {
listen 443;
server_name localhost;
location /api/customers {
proxy_pass https://localhost:300/api/customers;
proxy_set_header Host $Host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
修正するまで何かが飛び出しますか?ありがとう!
3つのサービスは同じサーバーによってプロキシされているため(nginx
に関する限り)、1つのlocation
ブロック内の3つのserver
ブロックとして構成する必要があります。詳細は このドキュメント を参照してください。
元のURIを変更せずにそのまま渡す場合は、proxy_pass
ステートメントでURIを指定する必要はありません。
server {
{
listen 443;
server_name localhost;
proxy_set_header Host $Host;
proxy_set_header X-Forwarded-For $remote_addr;
location /api/orders {
proxy_pass https://localhost:500;
}
location /api/customers {
proxy_pass https://localhost:400;
}
location = /api/customers {
proxy_pass https://localhost:300;
}
}
proxy_set_header
ステートメントが同一の場合、それらを親ブロックで一度指定できます。
必要なlocation
ステートメントのタイプは、localhost:300/api/customers/
サービスによって処理されるURIの範囲によって異なります。 1つのURIの場合、=
構文が機能します。 /api/customers/:id/billing
に一致しないURIの場合は、正規表現のロケーションブロックを使用する必要があります。詳細は このドキュメント を参照してください。
ここでSSLを終了しない限り、これが機能するかどうかはわかりません。つまり、 セキュアサーバーとしてのリバースプロキシ を構成します。
受け入れられた答えは私にとってはうまくいきませんでした。 Kubernetesサービスとして実行されている3つのサーバーを異なるクラスターIPにマップしました(Kubernetesノードからのみアクセス可能)。そこで、ホストマシンのIPを使用しました-10.ttt.ttt.104
と次の設定を使用して、仕事用ネットワークからこれらのサービスにアクセスできるようにします。
私はnginxのエキスパートではありませんが、これはうまくいきました。ベースとして使用してください。
events {
worker_connections 4096; ## Default: 1024
}
http{
server {
listen 80;
listen [::]:80;
server_name 10.ttt.ttt.104;
proxy_set_header Host $Host;
proxy_set_header X-Forwarded-For $remote_addr;
location / {
proxy_pass http://10.103.152.188:80/;
}
}
server {
listen 9090;
listen [::]:9090;
server_name 10.ttt.ttt.104;
proxy_set_header Host $Host;
proxy_set_header X-Forwarded-For $remote_addr;
location / {
proxy_pass http://10.107.115.44:9091/;
}
}
server {
listen 8080;
listen [::]:8080;
server_name 10.ttt.ttt.104;
proxy_set_header Host $Host;
proxy_set_header X-Forwarded-For $remote_addr;
location / {
proxy_pass http://10.105.249.237:80/;
}
}
}