Linux

配置 nginx 伺服器塊

  • October 13, 2014

CentOS上,我一直使用預設的 webRoot ( /usr/share/nginx/html) 來執行我的簡單腳本和小型應用程序。前幾天,我不得不配置nginx伺服器塊以通過/var/www/html. 在閱讀了一些教程後,我發現有兩種方法可以做到這一點,使用 virtual.conf 或創建 sites-available 和 sites-enabled 文件夾並將新的 conf 放入其中。

  1. 部署應用程序並將主機文件編輯為

192.168.0.38 dev.mysite.com www.dev.mysite.com (my local IP)

該應用程序在我訪問 localhost 時工作,但我的 oldwebroot 在我訪問 dev.mysite.com 時打開。我該如何解決? 2. 我仍然不知道在一台伺服器上執行多個站點,如果我將文件層次結構創建為/var/www/mysite1/htmland/var/www/mysite2/html並在可用站點中為它們創建兩個 conf,那麼我們如何在機器上訪問它們?當它們都使用本地IP時,主機中的編輯會是什麼?

請幫助我克服我的困惑並解決問題,我已連結我的 nginx.conf 和 mysite 伺服器塊配置。

伺服器塊 - ​​http://codepad.org/nMEvcycy nginx.conf - http://codepad.org/WLl4bd1x

1)我認為問題出在監聽指令上,因為它是在 localhost 上設置的,而您的域在 resolv.conf 文件中解析為 192.168.0.38。

改變

listen localhost:80;

listen 80;

或者,如果您不想監聽其他網路介面,則只需在 IP 中添加另一個監聽指令:

listen localhost:80;
listen 192.168.0.38:80;    

2)當您訪問網站時,您的瀏覽器首先使用 DNS 解析解析域名後面的 IP(在您的特定情況下,它在 hosts 文件中被本地覆蓋,因此不使用外部 DNS)。網路伺服器將偵聽其背後的 IP,並根據收到的 Host 標頭在虛擬主機之間發送請求。這意味著您可以在同一個 IP 地址上託管多個域。

例如,您想訪問 mysite1.com 和 mysite2.com。在 DNS mysite1.com 和 mysite2.com 中有 IP XXXX 如果您訪問 mysite1.com 會發生什麼:您的瀏覽器將打開多個 TCP 連接(通常是 4 個,以便並行發送請求並更快地獲取連結內容)到 XXXX 80 埠。

然後它會發送

GET / HTTP/1.1
Host: mysite1.com
[ ... ]

現在你訪問 mysite2.com,同樣的,它打開到 XXXX 埠 80 的 TCP 連接,但這次發送:

GET / HTTP/1.1
Host: mysite2.com
[ ... ]

您將擁有每個站點的足夠內容。

為了讓 nginx 匹配 Host 標頭,您必須server_name在伺服器塊中設置指令。因此,您可以使用不同的server_name值將配置拆分為不同的伺服器塊,並在一個 IP 後面為多個站點提供服務,或者通過在server_name指令中使用多個值來為多個域提供相同的內容(但是,永遠不要這樣做:它被稱為重複內容和機器人會炸毀你,總是使用重定向)。那是為了HTTP。

現在,對於 HTTPS,它更複雜,因為 SSL 握手發生在 HTTP 流量交換之前。這種握手是保護連接和交換密碼資訊的一種手段。但是,如果您在同一個 IP 上執行此操作,並且有多個具有不同server_name值和不同證書的伺服器塊,那麼 nginx 怎麼知道在 SSL 隧道建立的早期階段他必須選擇哪個證書(以及伺服器塊)?還沒有看到主機頭!

為了解決這個問題,有一個名為 Server Name Indication 的 SSL 擴展允許客戶端在握手階段發送目標主機,以便 Web 伺服器可以選擇正確的虛擬主機。還存在其他解決方法,例如 x509 SubjectAltName 擴展(證書端)或只是一個域 = 一個 IP。

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