我想將流量從一個域路由到另一個域(具有不同的子路徑),而無需使用 Nginx 更改瀏覽器中的 URL。例如,我 /app/example/ ---> https://another_domain.com:443/dev/app/ 我試過使用
location /app/example/ {
proxy_pass https://another_domain.com:443/dev/app/;
proxy_ssl_server_name on;
}
但是當我嘗試訪問“/app/example”時,瀏覽器中的 URL 將更改為“https://another_domain.com:443/dev/app/”,這不是我想要的。
我也嘗試過使用相同的子路徑:
location /app/example/ {
proxy_pass https://another_domain.com:443;
proxy_ssl_server_name on;
}
瀏覽器中的 URL 不會改變,但我的要求是將流量路由到另一個域中的另一個子路徑。
有人可以幫我嗎?如何在不更改瀏覽器中的 URL 的情況下使用 Nginx 將流量路由到另一個域的另一個子路徑?
uj5u.com熱心網友回復:
你不能。
代理不是一個好的解決方案,因為您可能會因為從不同的域提供服務而破壞頁面上的某些資源。
您能做的最好的事情就是創建一個只有 iframe 的頁面,該頁面加載其他站點。而且,這僅在目標站點沒有框架破壞時才有效。
uj5u.com熱心網友回復:
要使其正常作業,您需要擁有并控制目標服務器的回應,以確保 HTML 子資源(影像、CSS、JS)正常作業。 正如 Brad 所說,代理您無法控制的第三方站點是很困難的。通常,目標 HTML 回應中的relativehref和src標簽需要使用目標服務器 URL 的絕對 URL。
使用絕對 URL 正確完成后,這有效:
##
## ? https://example.com/proxy-absolute
## ? https://example.com/proxy-relative
##
location ~ ^/proxy-(absolute|relative)$ {
proxy_pass https://batman.dev/static/70408096/$1.html;
}
從這些第三方示例中,您可以看到 Google 搜索如何缺少子資源。Bing 會徹底檢測代理并重定向到其自己的域。
##
## https://example.com/google-search/apple
##
location ~ ^/google-search/([^/] ) {
proxy_pass https://www.google.com/search?q=$1;
}
##
## https://example.com/bing-search/apple
##
location ~ ^/bing-search/([^/] ) {
proxy_pass https://bing.com/search?q=$1;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/388354.html
標籤:nginx
