基本概念
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;
location / {
try_files $uri $uri/ =404;
}
}
一個大型的網站通常會有很多下屬的站點,有各自的服務器提供相應的服務,在 nginx 中我們可以通過一個叫虛擬主機的概念來將這些不同的服務配置隔離,這就是上面配置中的 server 的含義。舉例來說 google 旗下有翻譯和學術兩款產品我們就可以在 nginx 的配置文件中配置兩個 server,servername 分別為 translate.google.com 和 scholar.google.com,這樣的話不同的url請求就會對應到nginx相應的設置,轉發到不同的后端服務器上。這里的 servername 是和客戶端 http 請求中的 host 行進行匹配的。
新聞熱點
疑難解答