Nginx

Nginx 忽略了我的第二個伺服器指令

  • July 29, 2014

apt-get install nginx我通過ubuntu 14.04安裝了 nginx 。因此,預設設置包括目錄中的配置/etc/nginx/conf.d/

include /etc/nginx/conf.d/*.conf;

在我的 conf.d 文件夾中,我有以下兩個文件(site1.conf 和 site2.conf)

server {
   listen 80;

   location /site1/ {
       proxy_pass http://127.0.0.1:3000/;
   }
}

server {
   listen 80;

   location /site2/ {
       proxy_pass http://127.0.0.1:3001/;
   }
}

當我訪問時http://x.x.x.x/site1/,我得到了執行在 3000 埠的伺服器的響應,正如預期的那樣。但是,當我訪問http://x.x.x.x/site2/時,我得到一個 404。在錯誤日誌中,它說

2014/07/29 09:37:51 [error] 23060#0: *9 "/usr/share/nginx/html/site2/index.html" is not found (2: No such file or directory), client: 5.57.55.92, server: , request: "GET /site2/ HTTP/1.1", host: "217.147.85.96"

這表明它使用預設配置,將 site2 視為可以在其中找到 index.html 文件的文件夾。

為什麼會這樣?我找不到任何理由為什麼會這樣。我嘗試為兩種配置設置 server_name ,但沒有任何區別。

兩個location指令都需要在相同的虛擬主機配置中。

不同的虛擬主機旨在允許同一伺服器提供不同的主機名和/或協議。您有效地做的是創建兩個虛擬主機,但沒有區分兩者的方法,例如使用server_name指令。由於它無法區分它們,因此nginx只使用第一個預設虛擬主機配置並嘗試映射請求,但由於既沒有呼叫目錄site2也沒有location指令,因此無法提供此服務。

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