Nginx
Nginx 忽略了我的第二個伺服器指令
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
指令,因此無法提供此服務。