O problema é basicamente que usar uma diretiva proxy_pass
não irá reescrever o código HTML e, portanto, os URLs relativos, por exemplo, um img src="/assets/image.png"
não será alterado para img src="/bbb/assets/image.png"
.
Eu escrevi sobre estratégias potenciais para resolver isso no Apache httpd aqui e soluções similares também são possíveis para o nginx:
-
Se você tiver controle sobre
example.com
e como o aplicativo / conteúdo é implantado, implante no mesmo URI básico que deseja usar em example.net para o proxy reverso - > implemente seu código emexample.com/bbb
e, em seguida, seuproxy_pass
será bastante fácil, pois /assets/image.png será movido para /bbb/assets/image.png:location /bbb/ { proxy_pass http://example.com/bbb;
-
Se você tiver controle sobre
example.com
e como o aplicativo / conteúdo é implantado:
mudar para caminhos relativos , ou seja, em vez deimg src="/assets/image.png"
consulteimg src="./assets/image.png"
de uma páginaexample.com/index.html
e paraimg src="../../assets/image.png"
de uma páginaexample.com/some/path/index.html
-
Talvez você tenha sorte e o example.com use apenas alguns caminhos de URI na raiz e não sejam usados por example.net, e então simplesmente proxy reverso todos os subdiretórios necessários :
location /bbb/ { proxy_pass http://example.com/; } location /assets/ { proxy_pass http://example.com/asssets/; } location /styles/ { proxy_pass http://example.com/styles/;
-
desista usando um exemplo.com como subdiretório no example.net e hospede-o em um subdomínio de example.net :
server { server_name bbb.example.net location / { proxy_pass http://example.com/; } }
-
reescreva o conteúdo (HTML) ativando o nginx ngx_http_sub_module . Isso também permitirá que você reescreva URLs absolutas com algo semelhante a:
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/; }