【轉】如何在Ubuntu 14.04 LTS上設置Nginx虛擬主機

 

介紹

轉自http://www.pandacademy.com/%E5%A6%82%E4%BD%95%E5%9C%A8ubuntu-14-04-lts%E4%B8%8A%E8%AE%BE%E7%BD%AEnginx%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA/#i-3php

使用Nginx Web服務器時,可使用server blocks(相似於Apache中的虛擬主機)來封裝配置詳細信息,並託管單個服務器的多個域。css

在本教程中,咱們將討論如何在Ubuntu 14.04服務器上配置Nginx中的服務器塊。html

先決條件

在本教程中,咱們將使用具備sudo權限的非root用戶。 若是沒有這樣配置的用戶,能夠經過Ubuntu 14.04初始服務器設置教程中按照步驟1-4生成一個用戶。mysql

還須要在服務器上安裝Nginx。 若是須要在服務器上擁有整個LEMP(Linux,Nginx,MySQL和PHP)堆棧,能夠按照在Ubuntu 14.04中設置一個LEMP棧的教程。若是隻須要Nginx,鍵入如下內容完成:linux

sudo apt-get update sudo apt-get install nginx 

知足這些要求後,即可以繼續使用本教程。nginx

爲了演示,咱們將使用Nginx服務器設置兩個域。咱們在本教程中使用的域名是example.com和test.com。web

第一步 設置新文檔根目錄

默認狀況下,Ubuntu 14.04上的Nginx啓用一個服務器塊。它被配置爲從如下位置的目錄中提供文檔:sql

/usr/share/nginx/html

咱們不會使用默認值,由於咱們更容易處理/var/www目錄中的內容。默認狀況下,Ubuntu的Nginx包不使用/var/www做爲它的文檔根目錄。ubuntu

由於咱們是用戶而不是包維護者,所以能夠告訴Nginx這是須要文檔根的地方。具體來講,咱們須要在/var/www目錄中爲每一個站點創建一個目錄,而且須要在這些目錄下面有一個名爲html的目錄來保存實際文件。瀏覽器

首先須要建立必要的目錄。咱們可使用如下命令來作到這一點。-p標誌使mkdir按照如下方式建立任何須需的父目錄:

sudo mkdir -p /var/www/example.com/html sudo mkdir -p /var/www/test.com/html 

現已建立目錄,咱們須要將全部權轉讓給常規用戶。使用$USER環境變量替換當前登陸的用戶賬戶,這將容許用戶在此目錄中建立文件,而不容許訪問者建立內容。

sudo chown -R $ USER:$ USER /var/www/example.com/html
sudo chown -R $ USER:$ USER /var/www/test.com/html

若是用戶沒有修改其umask值,web根的權限應該是正確的,但也能夠鍵入如下內容確保其正確性:

chmod -R 755 /var/www 

如今已配置目錄結構,能夠繼續操做。

第二步 爲每一個網站建立示例頁面

現已設置目錄結構,能夠爲每一個網站建立一個默認頁面,以即可以顯示一些內容。

在第一個網域中創建index.html檔案:

nano /var/www/example.com/html/index.html 

在文件內部建立一個真正基本的文件,它指明當前訪問的網站。它將以下所示:

<html> <head> <title>Welcome to Example.com!</title> </head> <body> <h1>Success! The example.com server block is working!</h1> </body> </html> 

完成後保存並關閉文件。

因爲第二個網站的文件基本上與前者相同,能夠將其複製到第二個文檔根,以下所示:

cp /var/www/example.com/html/index.html /var/www/test.com/html/ 

如今能夠在編輯器中打開並修改新文件,以便其引用第二個域:

nano /var/www/test.com/html/index.html 
<html> <head> <title>Welcome to Test.com!</title> </head> <body> <h1>Success! The test.com server block is working!</h1> </body> </html> 

完成後保存並關閉此文件。如今一些網頁將向兩個網域的訪問者顯示。

第三步 爲每一個域建立server blocks(服務器塊)文件

如今已有咱們但願服務的內容,還須要實際建立服務器塊,它將告訴Nginx如何作到這一點。

默認狀況下,Nginx包含一個名爲default的服務器塊,咱們可使用它做爲配置的模板。首先設計第一個域的服務器塊,而後爲第二個域將其複製,並進行必要的修改。

建立第一個服務器塊文件

如上所述,經過複製默認文件來建立第一個服務器塊配置文件:

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/example.com 

如今使用root權限打開在文本編輯器中建立的新文件:

sudo nano /etc/nginx/sites-available/example.com 

忽略已註釋的行,文件將相似於如下內容:

server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; root /usr/share/nginx/html; index index.html index.htm; server_name localhost; location / { try_files $uri $uri/ =404; } } 

首先須要注意listen指令。只有一個服務器塊能夠具備default_server規範。若是所請求的server_name與任何可用的服務器塊不匹配,則它將指定哪一個塊應該用於服務器請求。

咱們最終將禁用默認服務器塊配置,所以能夠將default_server選項放在此服務器塊中,或者放在其餘一個站點中。在此服務器塊中將啓用default_server選項,但用戶能夠選擇最適合自身的選項。

接下來須要要調整文檔根,它由根指令指定。將其指向用戶建立的網站的文檔根目錄:

root /var/www/example.com/html; 

注意:每一個Nginx語句必須以分號(;)結尾,若是遇到問題,請檢查每一行語句。

接下來修改server_name以匹配第一個域的請求。咱們能夠添加任何想要匹配的別名。下面將添加一個www.example.com別名以演示:

server_name example.com www.example.com; 

完成後,文件將以下所示:

server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; root /var/www/example.com/html; index index.html index.htm; server_name example.com www.example.com; location / { try_files $uri $uri/ =404; } } 

以上就是須要的基本配置。保存,並關閉以退出文件。

建立第二個服務器塊文件

如今已有初始服務器塊配置,咱們可使用它做爲第二個文件的基礎。將其複製以建立新文件:

sudo cp /etc/nginx/sites-available/example.com /etc/nginx/sites-available/test.com 

在編輯器中以root權限打開新文件:

sudo nano /etc/nginx/sites-available/test.com 

在這個新文件中,咱們將要再次查看listen指令。若是在最後一個文件中啓用了default_server選項,則必須在此文件中將其刪除。此外,用戶必須擺脫ipv6only = on選項,由於它只能對每一個地址/端口組合指定一次:

listen 80; listen [::]:80; 

調整文檔根指令以指向第二個域的文檔根目錄:

root /var/www/test.com/html; 

調整server_name以匹配第二個域和任何別名:

server_name test.com www.test.com; 

在改變後,文件應該看起來以下:

server { listen 80; listen [::]:80; root /var/www/test.com/html; index index.html index.htm; server_name test.com www.test.com; location / { try_files $uri $uri/ =404; } } 

完成後,保存並關閉文件。

第四步 啓用服務器塊並從新啓動Nginx

現已建立服務器塊,而後須要啓用它們。

經過從這些文件建立符號連接,到Nginx從啓動期間讀取的sites-enabled目錄,以完成啓動。

鍵入如下內容建立這些連接:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/ 

這些文件如今位於已啓用的目錄中。可是,咱們用做模板的默認服務器塊文件也會啓用,而且會與設置了default_server參數的文件衝突。

經過刪除符號連接來禁用默認服務器塊文件。它仍然能夠在sites-available目錄中引用,但在啓動時它不會被Nginx讀取:

sudo rm /etc/nginx/sites-enabled/default 

咱們還須要在默認的Nginx配置文件中真正快速地調整一個設置。鍵入如下內容打開:

sudo nano /etc/nginx/nginx.conf 

只須要取消一行註釋,查找並刪除此註釋:

server_names_hash_bucket_size 64; 

從新啓動Nginx以啓用更改。鍵入如下內容:

sudo service nginx restart 

Nginx如今應該爲兩個域名服務。

第五步 設置本地主機文件(可選)

若是用戶沒有使用本身的域名,而是使用了虛擬值,則能夠修改本地計算機的配置,以容許臨時測試Nginx服務器塊配置。

這將阻止其餘訪問者正確地查看用戶網站,但它將讓用戶可以獨立訪問每一個網站並測試其配置。 這基本上經過攔截一般去DNS解析域名的請求來完成。相反,當請求域名時,用戶也能夠設置但願本地計算機訪問的IP地址。

確保在本地計算機上操做這些步驟,而不是在VPS服務器上。 用戶須要具備root訪問權限,或成爲管理組的成員,或經過編輯系統文件來執行此操做。

若是在家中使用Mac或Linux計算機,則鍵入如下內容編輯所需的文件:

sudo nano /etc/hosts 

用戶須要其服務器的公共IP地址和要路由到服務器的域。假設服務器的公共IP地址是111.111.111.111,則將添加到文件的行看起來以下:

127.0.0.1 localhost 127.0.0.1 guest-desktop 111.111.111.111 example.com 111.111.111.111 test.com 

這將攔截對example.com和test.com的任何請求,並將它們發送到用戶服務器,若是實際上用戶不擁有正在使用的域,這即是指望的結果。

在完成後保存並關閉文件。

第六步 測試結果

現已設置完畢,用戶應該測試服務器塊是否正常工做。經過訪問網絡瀏覽器中的域完成:

http://example.com 

應顯示以下所示的頁面:

若是要訪問第二個域名,則應該看到一個稍有不一樣的網站:

http://test.com 

若是這兩個站點都工做,則已使用Nginx成功配置了兩個獨立的服務器塊。

此時,若是用戶在本地計算機上調整了主機文件以進行測試,則可能須要刪除添加的行。

結論

用戶如今應該可以爲但願從同一服務器託管的每一個域建立服務器塊,只要其硬件能夠處理流量,對能夠建立的服務器塊沒有任何實際數量限制。

相關文章
相關標籤/搜索