網址代理我對3000端口運行的NodeJS + ExpressJS應用程序,它有一個路線:NGINX + ExpressJS - 反向在HTML
router.get('/getHello', function(req, res) {
res.send('Hello, world!');
});
和HTML網頁,其中執行此航線上的GET
<a href="/getHello">
<input type="button" value="Visit Helo World page" />
</a>
這個獨立的應用程序按預期工作。當按下按鈕時,它顯示Hello, world!
。
現在,這裏的問題:
我使用nginx
這個應用程序的反向代理設置。下面是從sites-available
的配置文件(sites-enabled
鏈接)
server {
listen 80;
server_name localhost;
location /routetest/ {
proxy_pass http://127.0.0.1:3000/;
proxy_http_version 1.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
proxy_cache_bypass $http_upgrade;
}
}
的應用程序打開罰款當我訪問http://localhost/routetest
但是當我按一下按鈕,它會打開http://localhost/getHello
而我希望它打開http://localhost/routetest/getHello
。由於http://localhost/getHello
沒有定義,我結束了一個404(在另一方面,http://localhost/routetest/getHello
正確返回Hello, world
消息)
現在,我的問題是:
我的前端與/
爲書面基本路徑(使所有的GET和POST請求),例如<a href="/getHello">
,我覺得手動追加/routetest/
之前我的HTML中的所有網址不是一個好習慣(因爲我可能想稍後更改此基本路徑,然後我會有隨處更新)。那麼,有沒有辦法讓NGINX
或某express
中間件爲使用/
作爲基本路徑編寫的URL添加/routetest/
,而無需手動在我的HTML中更改它?
刪除領先的'/'作品,我同意這是最簡單的解決方案,但仍然需要我修改所有網址。我不知道爲什麼我在前端工作時沒有考慮相對URL。擁有相對URL是否是一種好習慣?有什麼缺點? –
正如您所說,識別所有要修改的URL確實是一項棘手的任務,但我會盡量使用'ngx_http_sub_module'來嘗試。 –
@Abhilashk我通常會使用相對URL,但他們也有問題。例如如果你有一個共享的頁面頭引用了一些CSS,但這些頁面並不在相對於該CSS的相同位置。我想有一些' '的詭計可能會對此有所幫助,但我從未沿着這條路線走下坡路。我想HTML中的大多數URL都是'href =「/','src =」/'或'action =「/'形式,這可能不會太糟糕。對於JS來說,它可能是微不足道的,這取決於具體情況的惡夢。 –
skirtle