Apache-2.2

使用 nginx 的部分反向 http 代理

  • April 20, 2011

我有幾個 HTTP 服務在同一台機器上執行,在不同的埠上。我想使用 nginx 作為反向代理,但我的設置似乎不太正確。

我想要以下內容:

  • /fossil/==>http://127.0.0.1:8080/fossil/index.php
  • /fossil/(whatever)==>http://127.0.0.1:8080/(whatever)
  • /webmin/==>http://127.0.0.1:10000/
  • 由 nginx 本身提供的一些更具體的位置
  • 以及由 Apache 處理的所有其他內容 ==>http://127.0.0.1:8001

前兩個似乎造成了麻煩。我希望下面/fossil/的所有東西都由化石處理,在 8080 埠;除了根本身,它必須由一個特殊的 PHP 頁面(在 Apache 下)處理。

去這裡的方法是什麼?

試試下面的配置。

請務必查看該location = /fossil/部分中的評論。還要記住,對 /fossil/(whatever) 的請求會變成 /(whatever),因此內容中返回的任何 url 都應該是 /fossil/(whatever) 而不是 /(whatever)。如有必要,您可以在 nginx 端使用 sub_filter 在內容返回到客戶端時用 /fossil/(whatever) 替換 /(whatever)。

location = /fossil/ {
 # matches /fossil/ query only
 #
 # if Apache isn't configured to serve index.php as the index
 # for /fossil/ uncomment the below rewrite and remove or comment
 # the proxy_pass
 #
 # rewrite /fossil/ /fossil/index.php;
 proxy_pass http://127.0.0.1:8080;
}

location = /fossil/index.php {
 # matches /fossil/index.php query only
  proxy_pass http://127.0.0.1:8080;
}

location /fossil/ {
 # matches any query beginning with /fossil/
 proxy_pass http://127.0.0.1:8080/;
}

location /webmin/ {
 # matches any query beginning with /webmin/
 proxy_pass http://127.0.0.1:10000/;
}

location / {
 # matches any query, since all queries begin with /, but regular
 # expressions and any longer conventional blocks will be
 # matched first.
 proxy_pass http://127.0.0.1:8001;
}

# locations to be handled by nginx go below

引用自:https://serverfault.com/questions/261441