基本概念
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 {
server_name localhost;
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.html index.htm;
## lo lo # try_files $uri $uri/ =404;
}
}
在這裡location 匹配/ 開始的所有請求,即localhost 下的/xxx 或/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 將第一個找到的結果回傳。
location 進階配置
上面的配置只是將使用者的url 映射到本地的文件,並沒有實現傳說中的反向代理和負載平衡(當然nginx 做靜態文件的分發也是想到的厲害),下面我們就來進一步配置location 看看怎麼實現。
配置很簡單例如我要將所有的請求到轉移到真正提供服務的一台機器的8080 端口,只要這樣:
複製代碼 代碼如下:
location / {
proxy_pass 123.34.56.67:8080;
}
這樣所有的請求就都被反向代理到123.34.56.67 去了。這樣我們反向代理的功能是實現了,可是就能代理到一台伺服器上哪有什麼負載平衡呀?這就要用到 nginx 的 upstream 模組了。
複製碼 程式碼如下:
upstream backend {
ip_hash;
server backend1.example.com ;
server backend3.example.com;
server backend4.example.com;
}
location / {
proxy_pass http://backend;
}
以上是Nginx初始化配置的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!