nginx 配置詳解(新手必看)


內容來源:http://blog.csdn.net/david_xtd/article/details/16967837

 

譯者注:不知道其他開發者是否和我一樣,參與或者寫了很多Web項目,但是卻沒有真正的去完整的部署應用,很多時候都是交給ops即運維的同學幫忙來做。而作為一個有節操的開發者,我認為了解一些服務器方面的知識是很有必要的,讀了這篇文章之后,自己對nginx也有了一個初步的認識,對自己很有幫助,不敢獨享,遂譯之。

如果你是一名Web開發人員,那么你很有可能聽過nginx(讀音聽起來像engine-x). Nginx是一款速度快,功能強大的http以及反向代理服務器,經過簡單的配置之后即可以用來托管頁面。

不幸的是,和很多其他系統管理工具一樣,相關的原理教程和配置說明文檔都很少。雖然官方提供了一個wiki,但是內容多且復雜,卻沒有真正的介紹那些你可能真正需要的東西。在自己糾結這個wiki一段時間之后,我終於掌握了使用nginx的一些基礎知識,並把它們在這里與其他開發者分享出來,希望你們能夠更加快速的去掌握這些知識。

下面進入正題。針對本教程,你需要一個VPS(虛擬主機),最好是剛剛建立的,這樣可以避免與先前的配置產生沖突。

初始化安裝

現在假設你已經擁有一個運行ubuntu的虛擬主機(比如說托管於 digital ocean),配置好登錄選項並更新好 apt 之后,運行 apt-get install nginx 安裝nginx.在瀏覽器訪問你的IP地址,你會看到頁面顯示“welcome to ngnix”信息。OK,一切正常。

查找nginx目錄

在我們通過 apt 安裝完nginx后,它為我們提供了一個基本的結構,幫助我們迅速設置好配置文件。所有的nginx配置文件都在 /etc/nginx下(譯者注:Mac OS X環境下使用homebrew路徑與linux有區別,文章結尾部分提供mac下解決方案),輸入 cd 進入該目錄。你需要添加新配置選項的地方位於 sites-enabled 文件夾。如果你打開這個文件夾,你會發現一個名為 default 的txt文檔,打開后你就會找到nginx的配置選項以及 “welcome to nginx"歡迎選項的代碼。接下來我們開始建立屬於我們自己的配置文件用於顯示一個頁面。在sites-enabled目錄下新建一個空白文件並命名為 test,用你自己喜歡的文本編輯器進行編輯。

注意: 在該目錄下會發現一個 /etc/nginx/sites-available 的文件夾。這個文件夾一般在你需要建立和管理多個站點的時候非常有用,可以幫助你更好的組織不同的項目。你需要在這里添加你的nginx配置文案並將他們鏈接至 sites-enabled 目錄下。命令如下:

ln -s /etc/nginx/sites-available/dotcom /etc/nginx/sites-enabled/dotcom

只有在 sites-enabled 目錄下的配置文件才能夠真正被用戶訪問。但是你同樣可以將文件放在 sites-available 目錄下用來存檔或者生成鏈接。

配置靜態服務器

Nginx配置文件有自己的格式,好消息是文件的格式相當簡單,看起來特別像CSS文件,先指定變量名,然后在花括號內編寫指令。最頂層是 server ,代碼為:

server {

}

在花括號內,我們仍然可以像書寫CSS一樣,鍵值對后接分號,或者說更像sass的語法,並添加嵌套代碼塊。后面兩種風格的代碼我們都會用到,也很容易理解。

這里可以添加的鍵值對和代碼塊(在本教程的后面我們把它稱為指令)有很多種,你可以轉到官方文檔去具體查看。對於基本的服務器設置其實只用掌握一些重要的指令即可。我會給后面的每個指令鏈接官方的ngnix文檔。官方文檔是你深入理解nginx的唯一渠道,因此你必須掌握如何更好的去使用它。

listen

聲明服務器監聽的端口號。如果你了解rails,你一定知道本地服務器的默認端口是3000. Roots運行在1111端口。SSL在443端口。互聯網的默認端口是80,因此在url中未定義端口的話一般默認為80。因為你很有可能是去運行一個線上的服務器,因此最好定義成80端口。代碼如下:

server {
    listen 80;    
}

注意默認端口嚴格來講不是必要的,但是為了能夠保證你對整個流程足夠了解最好加上。完成了第一步,我們進入下一步server_name.

server_name

server_name主要用來匹配url地址。任意請求通過nginx時,它會查看url並尋找 server_name 片段。如果你的站點地址為 http://xvfeng.me, 那么你的 server_name 應當也為 xvfeng.me . 如果你在域名解析時使用了A記錄並通過服務器指向 http://snargles.com , 你可以添加另外一個 server 代碼,將 server_name 指向 snargles.com, 這段代碼就會匹配來自於這個域名的請求。

這個特性非常強大。這意味着你可以在單個nginx配置文件里托管無數個站點,甚至包括不同域名的網站。你需要做的只是將設置A記錄並指向虛擬機所在的IP, 之后設置其他的nginx服務器配置。

針對 server_name 還有兩點值得關注。首先是你可以設置子域名。如果你想匹配http://test.example.com ,設置相當簡單,甚至還可以指向一個完全不同的應用。第二點,你可以使用通配符, 即 * 或者正則來匹配路由。這個功能絕對強大。下面我們簡單的配置一下server_name到example.com .

server {
    listen 80;
    server_name example.com;
}

Nice.接下來再加一些配置就可以讓服務器運轉了。

root

這個是托管靜態站點最關鍵的部分。如果你只是想用它來托管一些html和css文件,root部分要定義的就是這些文件存放的路徑。我喜歡把文件放在 /var/www 目錄下,因此我們在這里建立一個文件夾。使用 mkdir 創建 /var/www/example 目錄,建立一個空白的 index.html 文件,隨便添加一些段落輸出hello world之類的內容。代碼如下:

server {
    listen 80;
    server_name example.com;
    root /var/www/example;
}

基本變量設置完畢,下一步配置路由。

location

Location接受兩個參數,一個字符串或者正則和一段代碼。字符串或者正則用於匹配某個特定目錄。如果你想讓用戶在訪問 example.com/whaterver 時訪問某個特定頁面,你需要將 whatever 設置為uri地址。在這里我們只需要訪問root目錄,因此只需要加上 / 即可,內容暫時為空,后面再做解釋。

server {
    listen 80;
    server_name example.com;
    root /var/www/example;

    location / {

    }
}

第一參數可以有很多種寫法,你可以參考上面給出的鏈接。在以上區塊內,我們需要路由指向結果頁面。注意 / 會匹配所有的url地址,因為在這里它被解釋為一個正則。如果你只想匹配某個准確的字符串,只需要在前面加上一個等號,寫法如下:

location = / { ... }

現在我們需要完成之前的代碼。我們可以在區塊內添加另外一段指令,用於加載名為 try_files 的文件。Try fiels接受了一組文件名或者正則,用於在根目錄下查找,並會加載查找到的第一個結果。對於我們的靜態服務器來講,我們希望找到一個在 / 之后緊跟着whatever的文件,例如 whatever.html. 如果在斜線后面沒有任何內容,則會尋找 index.html. 在上面給出的文檔鏈接中你可以找到更多的關於如何設置該選項的吸納關系介紹,這里我們只寫一些簡單的配置:

server {
    listen 80;
    server_name example.com;
    root /var/www/example;

    location / {
        try_files $uri $uri/ /index.html;    
    }
}

你可能會奇怪上面的 $url 是從哪里來的?其實是nginx所提供的。每次有請求時,nginx會生成一系列變量,這些變量存儲了請求的相關信息。這里的uri就是我們將要了解的內容之一。

  • 來自 http://example.com 的請求進入。
  • nginx找到server片段代碼,其中 server_name 為 example.com ,並使用它來處理請求
  • nginx匹配任意請求。因為這里的 / 會匹配根域名下的任意內容。
  • 在匹配到的location代碼中,nginx開始試圖加載一個文件。首先尋找一個未命名的文件,因為這里的uri匹配的就是沒有名稱的文件,所以無法找到。接着開始查找未命名的目錄,結果還是找不到。最后開始查找並加載根目錄下 /index.html 。

接下來想象一下如果你添加一個名為 test.html 的文件到根目錄下並訪問 http://example.com/test.html.自己試一下你就知道了。

你可以任意的去嘗試改變這里的配置環境。例如,在carrot.is這個網站里,但用戶訪問某個文件並且沒有加上 .html 后綴時,try_files同樣會查找 $uri.html 並匹配相應結果。因此在你訪問http://carrot.is.about 和 http://carrot.is/about.html 時你會得到相同的文件。你可以充分發揮你的想象力去設置你的配置文件。

啟動服務

總結一下我們所做的事情。首先添加了 server 選項,在nginx運行時,會查找 /etc/sites-enabled 目錄下的所有配置文件用於顯示對應內容。但是請等一下,你可能無法馬上得到結果-因為nginx並不知道你所作的這些改動。為了讓nginx真正讀取新配置文件,你需要重啟服務器,運行以下命令:

service nginx reload

注意:這里的 service 命令實際上是調用了配置文件里內容,這些都在使用 apt 時被生成。這里調用的實際上是 /etc/init.d/nginx reload 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM