簡體   English   中英

使用Nginx反向代理隱藏一個域上的Node應用程序端口號

[英]Hiding Node app port numbers on one domain with nginx reverse proxy

我仍然是nginx的相對入門者,希望對我正在從事的工作有所幫助和澄清。

假設我有2個Node應用程序app1app2

我有一個生產服務器,但是我想先在本地進行測試。

當前, app1偵聽端口8000,而app2偵聽端口8001。

因此,當前它們位於localhost:8000localhost:8001 ,並將在生產服務器中作為production.example.com:8000production.server.com:8001

我的問題是,如何隱藏端口號並將它們分配給特定的URL?

我希望可以從生產服務器中的localhost/app1localhost/app2以及production.example.com/app1production.server.com/app2訪問結果。

我不知道我在nginx.conf中出了什么問題,所以我希望有人可以在這個問題上為我提供幫助。 這些應用程序都具有HTML表單,因此我需要將它們發布到production.example.com/app1或諸如production.example.com/app2/download 由於它們僅位於/public/css.css ,而不位於app2/public/css.css ,因此它們的CSS也由於每個應用程序中公用文件夾的位置而app2/public/css.css

我可以通過分別在Node應用程序中添加/app1/app2來更改所有表單動作和路由器獲取/發布,以及樣式表引用,但是感覺好像我做錯了,因為我不應該更改我的任何路由器信息。

這是我的nginx.conf文件:

編輯:所以這就是我現在所擁有的:

server {
        # ...

        location /app1 {
                rewrite ^/app1$ / break;
                rewrite ^/app1/(.*) /$1 break;
                proxy_pass      http://127.0.0.1:8000;
        }

        location /app2 {
                rewrite ^/app2$ / break;
                rewrite ^/app2/(.*) /$1 break;
                proxy_pass      http://127.0.0.1:8001;
        }
}

我仍然遇到相同的問題,即節點應用程序本身未使用其上下文。

因此,我具有與4-5個微服務相同的配置。 這是我使用的配置。

server {

    listen       80;
    server_name  localhost;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;
    location /ifttt {
        rewrite ^/ifttt$ / break;
        rewrite ^/ifttt/(.*) /$1 break;
        proxy_pass http://127.0.0.1:8080;
    }
    location /actions {
        rewrite ^/actions$ / break;
        rewrite ^/actions/(.*) /$1 break;
        proxy_pass http://127.0.0.1:5000;
    }
    location /events {
        rewrite ^/events$ / break;
        rewrite ^/events/(.*) /$1 break;
        proxy_pass http://127.0.0.1:5050;
    }
    location / {
        proxy_pass http://127.0.0.1:8081;
    }
}

希望它可以作為建設性的參考。 我們拿一個

location /actions {
    rewrite ^/actions$ / break;
    rewrite ^/actions/(.*) /$1 break;
    proxy_pass http://127.0.0.1:5000;
}

因此,第一次重寫僅匹配localhost/actions並將其轉發到http://127.0.0.1:5000 ;第二次重寫匹配localhost/actions/<anything>並將其轉發到http://127.0.0.1:5000/<anything>

我認為您在正則表達式匹配之前缺少了斜杠( / )。

編輯:

使用您的評論作為參考

索引位於/app1/index
頁面位於/app1/index/flashfireblast
並且導航欄標題需要引用/app1/stylesheets/css.css

因此,要從/app1/index/flashfireblast /app1/stylesheets/css.css處理/app1/stylesheets/css.css ,您需要添加../stylesheets/css.css作為樣式表href。

以供參考:
如果當前目錄是/var/www
1) / :表示根。 /
2) ./ :表示當前目錄。 /var/www
3) ../ :表示上一個目錄。 /var/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM