web-dev-qa-db-ja.com

Nginx proxy_passlongディレクティブ

proxy_passをやりたい

からhttps://foo.bar/api/v1/users/{userId}/store/{storeCode}/statusからhttps://bar.foo/api/v1/users/{userId}/store/{storeCode}/status

そしてまた

からhttps://foo.bar/api/v1/users/{userId}/opendateからhttps://bar.foo/api/v1/users/{userId}/opendate

その2つのリンクとの違いは、アクセスに使用するhttpメソッドです。後で、limit_exceptを使用してアクセスを制限しますが、最初にリクエストをproxy_passしたいと思います。

私はこのような構成をしました

location /api/v1/users/[0-9a-z]+/store {
    proxy_pass https://bar.foo/api/v1/users/[0-9a-z]+/store;
    proxy_set_header Host $proxy_Host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for;
    proxy_redirect off;
    proxy_buffering off;
    proxy_ssl_protocols TLSv1.2;
    proxy_ssl_server_name on;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_pass_request_headers on;
}


location /api/v1/users/[0-9a-z]+/opendate {
    proxy_pass https://bar.foo/api/v1/users/[0-9a-z]+/opendate;
    proxy_set_header Host $proxy_Host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For 
    proxy_add_x_forwarded_for;
    proxy_redirect off;
    proxy_buffering off;
    proxy_ssl_protocols TLSv1.2;
    proxy_ssl_server_name on;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_pass_request_headers on;
}

しかし、それでもサーバーがリクエストをプロキシすることはできません。 nginxの正規表現を使用して長いディレクティブの場所をproxy_passする方法を知っている人はいますか?

2
jack deace

それが正規表現である場合は、locationディレクティブに間違った構文を使用しています。詳細については、 このドキュメント を参照してください。

アップストリームに渡す前にURIが変更された場合は、proxy_passにURI部分を指定するだけで済みます。詳細については、 このドキュメント を参照してください。

例えば:

location ~ ^/api/v1/users/[0-9a-z]+/store {
    proxy_pass https://bar.foo;
    ...
}
0
Richard Smith