published:
29 dec 2014
category:
nginx
作為乙個 nginx 的初學者記錄一下從零起步的點滴。
nginx 最常的用途是提供反向**服務,那麼什麼反向**呢?正向**相信很多大陸同胞都在這片神奇的土地上用過了,原理大致如下圖:
**伺服器作為客戶端這邊的中介接受請求,隱藏掉真實的客戶,向伺服器獲取資源。如果**伺服器在長城外的話還能順便幫助我們實現翻越長城的目的。而反向**顧名思義就是反過來**伺服器作為伺服器的中介,隱藏掉真實提供服務的伺服器,原理大致如下圖:
這麼做當然不是為了實現翻越長城,而是為了實現安全和負載均衡等一系列的功能。所謂安全指客戶端的請求不會直接落到內網的伺服器上而是通過**做了一層**,在這一層就可以實現安全過濾,流控,防 ddos 等一系列策略。而負載均衡指我們可以水平擴充套件後端真正提供服務的伺服器數量,**按規則**請求到各個伺服器,使得各個伺服器的負載接近均衡。
而 nginx 就是目前流行的這樣乙個反向**服務。
在 ubuntu 下,可以捨去編譯安裝的過程,直接 apt-get
sudo apt-get install nginx
安裝好之後可以直接通過:
sudo service nginx start
來啟動 nginx 服務,nginx 預設設定了 80 埠的**,我們可以再瀏覽器訪問 http://locallhost 來進行檢查。
nginx 的預設配置檔案位於
/etc/nginx/nginx.conf
學習配置最好的方式,就是從例子入手,我們先不看其他的配置,直接看和 nginx 預設頁面相關的配置。在配置檔案中有一行:
include /etc/nginx/sites-enabled/*;
這一行載入了乙個外部的配置檔案,sites-enabled 資料夾下只有乙個 default 檔案,這個外部的配置檔案就是負責我們 nginx 的預設**。將配置的內容縮水後,得到下面幾行:
server
}
乙個大型的**通常會有很多下屬的站點,有各自的伺服器提供相應的服務,在 nginx 中我們可以通過乙個叫虛擬主機的概念來將這些不同的服務配置隔離,這就是上面配置中的 server 的含義。舉例來說 google 旗下有翻譯和學術兩款產品我們就可以在 nginx 的配置檔案中配置兩個 server,servername 分別為 translate.google.com 和 scholar.google.com,這樣的話不同的 url 請求就會對應到 nginx 相應的設定,**到不同的後端伺服器上。這裡的 servername 是和客戶端 http 請求中的 host 行進行匹配的。
本例中 server_name 為 localhost,這就是為什麼我們可以在瀏覽器通過 localhost 訪問到頁面的配置。下面兩個 listen 分別對應了 ipv4 和 ipv6 下的監聽埠如果設為 8080,那麼我們就只能通過 localhost:8080 來訪問到預設頁面了。
default_server 的含義是指如果有其他 http 請求的 host 在 nginx 中不存在設定的話那麼就用這個 server 的配置來處理。比如我們去訪問 127.0.0.1 那麼也會落到這個 server 來處理。
每個 url 請求都會對應的乙個服務,nginx 進行處理**或者是本地的乙個檔案路徑,或者是其他伺服器的乙個服務路徑。而這個路徑的匹配是通過 location 來進行的。我們可以將 server 當做對應乙個網域名稱進行的配置,而 location 是在乙個網域名稱下對更精細的路徑進行配置。
在這裡 location 匹配 / 開始的所有請求,即 localhost 下的 /*** 或者 /yyy 都要走下面的配置,除了這種簡單粗暴的匹配,nginx 也支援正則和完全相等及其他的精細匹配方式。而 tryfiles 意思是 nginx 會按照接下來的順序去訪問檔案,將第乙個匹配的返回。比如你去請求 localhost/test,他會去尋找 /test 檔案,找不到再去找 /test/ 再找不到就返回乙個 404。此外我們還可以在 location 的配置裡用 proxypass 實現反向**和負載均衡,不過這個最簡單的配置並沒有涉及。
其中 root 是指將本地的乙個資料夾作為所有 url 請求的根路徑。比如使用者請求了乙個 localhost/test,那麼 nginx 就會去需找 /usr/share/nginx/html 資料夾下的 test 檔案返回。
而 index 就是預設的訪問頁面了,當我們訪問 localhost 時,他會自動按順序尋找 root 檔案路徑下的 index.html 和 index.htm 將第乙個找到的結果返回。
上面的配置只是將使用者的 url 對映到本地的檔案,並沒有實現傳說中的反向**和負載均衡(當然 nginx 做靜態檔案的分發也是想到的厲害),下面我們就來進一步配置 location 看看怎麼實現。
配置起來很簡單比如我要將所有的請求到轉移到真正提供服務的一台機器的 8080 埠,只要這樣:
location /
這樣所有的請求就都被反向**到 123.34.56.67 去了。這樣我們反向**的功能是實現了,可是就能**到一台伺服器上哪有什麼負載均衡呀?這就要用到 nginx 的 upstream 模組了。
upstream backend
location /
我們在 upstream 中指定了一組機器,並將這個組命名為 backend,這樣在 proxypass 中只要將請求轉移到 backend 這個 upstream 中我們就實現了在四台機器的反向**加負載均衡。其中的 iphash 指明了我們均衡的方式是按照使用者的 ip 位址進行分配。
要讓配置生效,我們不必重啟 nginx 只需要 reload 配置即可。
sudo service nginx reload
以上是最簡單的通過 nginx 實現靜態檔案**、反向**和負載均衡的配置。在 nginx 中所有的功能都是通過模組來實現的,比如當我們配置 upstream 時是對 upstream 模組,而 server 和 location 是在 http core 模組,其他的還有流控的 limt 模組,郵件的 mail 模組,https 的 ssl 模組。他們的配置都是類似的可以再 nginx 的模組文件中找到詳細的配置說明。 nginx 配置簡單介紹
開啟nginx.conf檔案 全域性區 worker processes 1 有1個工作的子程序,可以自行修改,但太大無益,因為要爭奪cpu,一般設定為 cpu數 核數 接下來就是http 虛擬主機。螢幕截圖不完,就不截圖了。配置裡面有很多行可配置 拿乙個簡單的來說 當我訪問時,我是以ip訪問 基於...
nginx 簡單配置
server 檔案快取 js css檔案快取 location js css 不把css js image相應的資源檔案寫入快取,會導致資源檔案404,無法被訪問。至於快取的時間長短可以自己設定。在nginx的location和配置中location的順序沒有太大關係。與location表示式的型別...
簡單配置nginx
在mac下配置nginx 1,安裝 brew install nginx 2,啟動nginx 在終端鍵入 nginx 回車 3,在瀏覽器裡輸入localhost 8080 出現welcome to nginx 說明成功 安裝 nginx v 檢視版本號 4 cd usr local etc ngin...