如何根據主機設定nginx根路徑

如何根據主機設定nginx根路徑

我如何設定訪客主機使用 nginx 中的特定根路徑?

IP 1.1.1.1 的訪客將使用

root /srv/web1

所有其他訪客將使用

root /srv/web2

答案1

雖然這個問題很容易透過簡單地做一些研究和閱讀文件(最好從初學者指南進而nginx 如何處理請求),無論如何我都會回答。

我假設您有一台具有多個網路介面和 IP 位址的伺服器,其中 1.1.1.1 位址分配給一個接口,其他位址分配給各自的介面。

Nginx 在這方面非常靈活,事實上,server當 nginx 無法透過以下方式匹配任何其他伺服器區塊時,總會有一個區塊被用作預設區塊server_name:即server檔案的第一個區塊或default_server在其listen指令中指定的區塊。請記住listen您可以在指令中指定IP

這意味著,就您而言:

server {
    listen 80 default_server;
    root /srv/web2;
    [...]
}
server {
    listen 1.1.1.1:80;
    root /srv/web1;
    [...]
}

如您在上面的範例中所看到的,第一個server區塊偵聽連接埠80 上的所有接口,而第二個區塊僅偵聽連接埠80 上的1.1.1.1 介面。造訪您網站的人將從/srv/web1接收文件,與HTTP請求中的Host欄位(即URL欄中寫入的網域名稱)無關。

另一種類似的行為可以透過將 IP 位址放入server_name指令中來獲得,如下所示:

server {
    listen 80;
    server_name 1.1.1.1;
    [...]
}
* 請注意,最後一個server區塊僅捕獲對文字 IP 位址的請求,而不捕獲對網域名稱的請求。

我希望這能回答您的問題,但下次請提供有關您目前設定的更多資訊並進行一些研究。

更新

要獲得所描述的行為,您可以使用地理模組如中所解釋的這個問題

geo $client {
    default web2;
    1.1.1.1 web1;
}
server {
    [...]
    root /srv/$client;
    [...]
}
此配置使用地理$client模組根據客戶端的 IP 位址設定變數 ( )。該變數被設定為預設值網路2或具體的網站1然後在root指令中替換。

請注意,geo指令必須位於http區塊內而不是server區塊內;上面的程式碼片段應該按原樣工作,但我不保證任何事情,因為我沒有測試它。

相關內容