URLに基づいてNginxでリバースプロキシを実行しようとしています。http://mydomain.example.com/client1/...
にリダイレクトされたいですhttp://127.0.0.1:8193/...
。私は多くの方法を試しましたが、どれもうまくいきませんでした。アプリケーションはリダイレクトを行うことができることに注意してください。これらは私の最後のソリューションの構成ファイルです:
デフォルト
server {
listen 80;
server_name mydomain.example.com;
location / {
set $instance none;
if ($request_uri ~ ^/(.*)/$) {
set $instance $1;
}
set $no_cookie true;
if ($http_cookie ~ "instance=([^;] +)(?:;|$)") {
set $instance $1;
set $no_cookie false;
}
if ($no_cookie = true) {
add_header Set-Cookie "instance=$instance;Domain=$host;Path=/";
rewrite ^ / break;
}
include instances.conf;
}
インスタンス.conf
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 90;
proxy_send_timeout 60;
# Installation of language packs, etc. can take a long time
proxy_read_timeout 10800;
if ($instance = client1) {
proxy_pass http://127.0.0.1:8193;
}
if ($instance = client2) {
proxy_pass http://127.0.0.1:8194
}
...
ブラウザが をリクエストするhttp://mydomain.example.com/client1/
と、Nginx はinstance
値で名前が付けられた Cookie を設定しclient1
、トラフィックを適切なプロキシにリダイレクトする必要があります。後続のクエリでは、この Cookie を使用してリダイレクトを行う必要があります。私が抱えている問題は、$instance
変数を に設定しないことclient1
です。アプリケーションはプレフィックスを認識しないことを忘れないでください/client1
。
アイデアはありますか?より良い解決策を知っていますか?