Nginx:如何將 HTTP 請求轉送到另一個連接埠?

Nginx:如何將 HTTP 請求轉送到另一個連接埠?

我想做的是:當有人訪問http://localhost/route/abc伺服器時,回應與http://localhost:9000/abc

現在我像這樣設定我的 Nginx 伺服器:

location /route {
    proxy_pass  http://127.0.0.1:9000;
}

HTTP 請求已9000正確分派到端口,但其接收的路徑http://localhost:9000/route/abc不正確http://localhost:9000/abc

有什麼建議麼?

答案1

我討厭這裡的微妙之處,但嘗試在 9000 末尾添加一個 /,如下所示。現在它不再將「路由」附加到轉送的請求中。

location /route {
    proxy_pass  http://127.0.0.1:9000/;
}

答案2

我相信你可以使用重寫來刪除 URL 的多餘部分。對於你的情況,我認為你可以使用:

location /route/ {
    rewrite ^/route/?(.*)$ /$1 break;    
    proxy_pass  http://127.0.0.1:9000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

但是,如果您的應用程式中有內部鏈接,它們可能仍然指向 /abc/foo ,如果您這樣做,它們需要指向 /route/abc/foo ,以便原始請求正確輸入。如果可以的話,您最好保留 nginx 配置不變,並將您的應用程式配置為知道它位於子目錄中。

我知道這是一個老問題,但當我試圖解決同樣的問題時,這是我最熱門的谷歌搜尋!

答案3

嘗試以下操作

location /route/ {
        proxy_pass  http://127.0.0.1:9000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

答案4

維姆nginx.conf

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

  server {
    listen 8080;

    location / {
      proxy_pass http://compute-1-36:8787;
      proxy_redirect http://compute-1-36:8787/ $scheme://$host:8080/;
    }
  }
}

此程式碼偵聽 8080 並重定向到compute-1-36 上的連接埠 8787。您可以在位置中選擇其他路徑/

相關內容