Nginx

Nginx 伺服器塊:子域與路徑

  • December 19, 2020

子域和位置路徑範例有什麼區別:

server {
   listen 80 default_server;
   listen [::]:80 default_server;

   server_name xxxx.yyy.com;

   location / {

       proxy_pass http://127.0.0.1:3000;

   }

}

或者

server {
   listen 80 default_server;
   listen [::]:80 default_server;

   server_name yyy.com;

   location / {

       proxy_pass http://127.0.0.1:3000;

   }
   location /xxxx/ {

       proxy_pass http://127.0.0.1:4000;

   }

}

顯然,分離級別不同,第一個在 DNS 伺服器上分離,第二個請求方向發生在 nginx 本身。我很想知道選擇一種解決方案而不是另一種解決方案的注意事項是什麼。

如果需要,您可以告訴 NGINX 響應 IP 地址或埠上的所有請求。配置中的子域/域僅限制來自特定“伺服器”配置塊的響應。

位置與域/子域無關,只是它們依賴於伺服器塊中配置的任何內容。通常對於 NGINX,您首先要配置域和 IP 以進行偵聽,然後完全忘記這一點。

您的第一個範例設置xxxx.yyy.com=>http://127.0.0.1:3000

第二個範例設置yyy.com/xxxx=>http://127.0.0.1:4000

您可以將範例 #1 合併到範例 #2 中,方法是將基域和子域都放在 #2 的伺服器塊中(如果您不關心這兩個路徑都適用於基域和子域):


server {

   listen 80 default_server;
   listen [::]:80 default_server;

   server_name yyy.com xxxx.yyy.com;

   location / {

       proxy_pass http://127.0.0.1:3000;

   }

   location /xxxx/ {

       proxy_pass http://127.0.0.1:4000;

   }
}

因此,您可以看到,正如您所說,沒有“DNS 分離”——除非您將它們託管在不同的 IP 地址上。你唯一的分離是在路徑中。

組合範例產生:

xxxx.yyy.com=>http://127.0.0.1:3000

yyy.com=>http://127.0.0.1:3000

yyy.com/xxxx=>http://127.0.0.1:4000

xxxx.yyy.com/xxxx=>http://127.0.0.1:4000

子域不是路徑。它們是完全不同的東西。因此,嘗試比較和對比它們表明您的理解偏離了軌道。

也許您在過去的某個地方有一個子域,其中一個目錄用於子域,另一個目錄用於主域。這些是您的 docroot,這只是一些基於 Web 的伺服器管理工具預設配置的方式。子域和路徑之間沒有內在關聯,除非您(或某些工具或系統管理員)創建一個。

您可以將任何域或子域(或您在位置塊中設置的任何路徑)映射到文件系統中的 /any/path/you/want。

位置是關於 PATHS的……再次在這裡,在 NGINX 找到與伺服器塊匹配的請求之後,它正在監視與 HTTP 請求中的路徑匹配的請求。

/thispath /thatpath /foo /bar 或 /foo/bar/on/thatpath 或者您可以使用萬用字元和正則表達式。您可以配置不同的文件副檔名以從不同的目錄提供服務,或者位置的常見用途是告訴 NGINX 如何處理某些文件類型,例如 PHP。

這裡給出了幾個範例配置:http: //nginx.org/en/docs/beginners_guide.html

如果您覺得這有幫助,請點贊或標記為解決方案。謝謝!

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