確かに私はexample.com
からドメインexample.net/bbb
を提供しようとした最初の人物ではありませんが、まだ解決策を見つけていません。
私のNGINX構成は guidelines に従い、次のようになります。
server {
listen 80;
server_name example.net;
root /path/to/aaa;
location /bbb/ {
proxy_pass http://example.com/;
proxy_set_header Host $Host;
proxy_set_header X-Real-IP $remote_addr;
}
location / {
try_files $uri $uri/ /index.html;
}
location ~ \.(svg|ttf|js|css|svgz|eot|otf|woff|jpg|jpeg|gif|png|ico)$ {
access_log off;
log_not_found off;
expires max;
}
}
example.com
のexample.net/bbb
のルートをなんとかレンダリングできますが、
example.net/bbb/some/path
は期待どおりに動作せず、index.html
のexample.net
がレンダリングされます。
ブラウザがexample.com/assets
を探すため、example.net/assets
のアセットは404になります。絶対パスをどこにも配置せずにこれを解決できたら素晴らしいことです。
問題は基本的に、proxy_pass
ディレクティブを使用してもHTMLコードが書き換えられないため、たとえばimg src="/assets/image.png"
への相対URLがimg src="/bbb/assets/image.png"
に魔法のように変更されないことです。
Apache httpd here でそれに対処するための潜在的な戦略について書きましたが、nginxでも同様のソリューションが可能です。
example.com
およびアプリケーション/コンテンツのデプロイ方法を制御できる場合、同じベースURIにデプロイリバースプロキシのexample.netで使用する
-> example.com/bbb
にコードをデプロイすると、/ assets/image.pngが/bbb/assets/image.pngに移動されるため、proxy_pass
は非常に簡単になります:
location /bbb/ {
proxy_pass http://example.com/bbb/;
example.com
およびアプリケーション/コンテンツのデプロイ方法を制御できる場合:
相対パスに変更、つまりimg src="/assets/image.png"
ではなく
ページからimg src="./assets/image.png"
を参照example.com/index.html
およびimg src="../../assets/image.png"
ページへexample.com/some/path/index.html
多分あなたは幸運で、example.comはルートのいくつかのURIパスのみを使用し、それらのどれもexample.netで使用されない場合、単純に必要なすべてのサブディレクトリのリバースプロキシ :
location /bbb/ {
proxy_pass http://example.com/;
}
location /assets/ {
proxy_pass http://example.com/assets/;
}
location /styles/ {
proxy_pass http://example.com/styles/;
example.comをexample.netのサブディレクトリとして使用することをあきらめ、代わりにexample.netのサブドメインでホストします。
server {
server_name bbb.example.net
location / {
proxy_pass http://example.com/;
}
}
(HTML)コンテンツを書き換え nginxを有効にして ngx_http_sub_module 。また、絶対URLを次のようなものに書き換えることもできます。
location /bbb/ {
sub_filter 'src="/assets/' 'src="/bbb/assets/';
sub_filter 'src="http://example.com/js/' 'src="http://www.example.net/bbb/js/' ;
sub_filter_once off;
proxy_pass http://example.com/;
}