これは SO before で尋ねられましたが、答えは一般化されていません。だからここに行く。
2つの異なるウェブアプリがあります。それらはルートの異なるサーバー上にあるように作られました。しかし、それらは同じサーバー上のサブディレクトリに配置されます。以下のスクリプトは、URIとともにサブディレクトリをスクリプトに送信しています。これは問題です。
古いURL:
新しいURL:
ストアサイトは、/store/items/1
だけを表示したいときに/items/1
を表示しています。同じことがバックオフィスサイトにも当てはまります。
私の試み:
location /store {
try_files @store_site;
}
location /backoffice {
try_files @backoffice_site;
}
location @store_site {
include uwsgi_params;
uwsgi_pass unix:/var/run/uwsgi/store_site.sock;
proxy_set_header Host $Host;
}
location @backoffice_site {
include uwsgi_params;
uwsgi_pass unix:/var/run/uwsgi/backoffice_site.sock;
proxy_set_header Host $Host;
}
繰り返しになりますが、ストアサイトは/store
プレフィックス付きのURLを取得し、バックオフィスは/backoffice
を取得しています。それらのサイトは、それらの接頭辞を期待しないようにコード化されました。実際のサイトに送信する前に、/store
および/backoffice
プレフィックスを削除する必要があります。
これは書き換えルールのことですか?
this SO page に基づいてこれを試しましたが、うまくいきませんでした。構文について何か理解してはいけません。
location /store {
rewrite ^/store/(.*) /$1;
try_files $uri @store_site;
}
更新
どうやら、これは機能します(break;
を追加)これは完全なソリューションですか?
location /store {
rewrite ^/store/(.*) /$1 break;
try_files $uri @store_site;
}
break
を使用して、リダイレクトをトリガーせずにURIを書き直す必要があります。
設定の詳細、すべてがバックエンドに送られるべきか、またはNginxが静的ファイルなどのいくつかのリクエストを処理するべきかどうかに応じて、いずれかが必要になります...
location /store {
try_files $uri @store_site;
}
location /backoffice {
try_files $uri @backoffice_site;
}
location @store_site {
rewrite ^/store/(.*) /$1 break;
include uwsgi_params;
uwsgi_pass unix:/var/run/uwsgi/store_site.sock;
}
location @backoffice_site {
rewrite ^/backoffice/(.*) /$1 break;
include uwsgi_params;
uwsgi_pass unix:/var/run/uwsgi/backoffice_site.sock;
}
...または
location /store {
rewrite ^/store/(.*) /$1 break;
include uwsgi_params;
uwsgi_pass unix:/var/run/uwsgi/store_site.sock;
}
location /backoffice {
rewrite ^/backoffice/(.*) /$1 break;
include uwsgi_params;
uwsgi_pass unix:/var/run/uwsgi/backoffice_site.sock;
}
これをアイテムに試してみることをお勧めします:
location /store/ {
rewrite ^/store/(.*) /$1 break;
include uwsgi_params;
proxy_set_header Host $Host;
uwsgi_pass unix:/var/run/uwsgi/store_site.sock;
}
テストはしていませんが、動作するはずです。