首頁> 運維> Nginx> 主體

Nginx初始化配置的方法

WBOY
發布: 2023-05-19 15:22:42
轉載
1667 人瀏覽過

基本概念

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 {
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;
}
}

一個大型的網站通常會有許多下屬的站點,有各自的伺服器提供對應的服務,在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 下的/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;
}

我們在upstream 中指定了一組機器,並將這個群組命名為backend,這樣在proxypass 中只要將請求轉移到backend 這個upstream 中我們就實現了在四台機器的反向代理加負載平衡。其中的 iphash指明了我們均衡的方式是按照使用者的 ip 位址進行分配。

要讓設定生效,我們不必重新啟動 nginx 只需要 reload 設定即可。


複製程式碼 程式碼如下:

sudo service nginx reload


以上是Nginx初始化配置的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!