一 Nginx簡介
1.1 什麼是Nginx
Nginx
是一個高效能的http
和反向代理伺服器,其特點是佔用記憶體小,併發能力強。Nginx
專為效能優化而開發,效能是其最重要的考量,能經受高負載的考驗,有報告表明能支援高達50000個併發連線數。
1.2 反向代理
正向代理:在瀏覽器中配置代理伺服器,通過代理伺服器進行網際網路訪問。
反向代理:將請求傳送到反向代理伺服器,由反向代理伺服器去選擇目標伺服器獲取資料後,再返回給客戶端,此時反向代理伺服器和目標伺服器對外就是一個伺服器,暴漏的是代理伺服器地址。
1.3 負載均衡
如果請求數過大,單個伺服器解決不了,我們增加伺服器的數量,然後將請求分發到各個伺服器上,將原先請求集中到單個伺服器的情況改為請求分發到多個伺服器上,就是負載均衡。
1.4 動靜分離
為了加快伺服器的解析速度,可以把動態頁面和靜態頁面交給不同的伺服器來解析,加快解析速度,降低原來單個伺服器的壓力。
二 Nginx的安裝
Nginx
需要幾個依賴包,分別是pcre
,openssl
,zlib
,在安裝nginx
之前需要先安裝這幾個依賴。
2.1 安裝pcre依賴
- 使用命令下載
pcre
壓縮包
wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
- 解壓壓縮檔案
tar -xvf pcre-8.37.tar.gz
- 進入解壓後的名錄,執行以下命令
./configure
- 使用以下命令進行編譯安裝
make && make install
- 檢視安裝的
pcre
版本號
pcre-config --version
2.2 安裝openssl,zlib等依賴
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
2.3 安裝nginx
nginx
官網下載nginx
,官網地址:https://nginx.org/download/;- 將壓縮包拖到伺服器上;
- 使用命令
tar -xvf nginx-1.12.2.tar.gz
解壓壓縮包; - 使用命令
./configure
檢查; - 使用命令
make && make isntall
編譯安裝;
安裝成功後,在usr
會多出來一個資料夾,local/nginx
,在nginx
的sbin
資料夾下有啟動指令碼。
2.4 啟動nginx
在/usr/local/nginx/sbin
資料夾下,使用以下命令啟動
./nginx
然後瀏覽器訪問伺服器ip,nginx
預設埠是80,出現以下頁面則證明nginx
安裝成功;
2.5 Nginx常用的命令
使用這些命令時需要進入/usr/local/nginx/sbin
資料夾
- 檢視
nginx
的版本號
./nginx -v
- 啟動
nginx
./nginx
- 關閉
nginx
./nginx -s stop
- 重新載入
nginx
./nginx -s reload
2.6 Nginx的配置檔案
nginx
的配置檔案在/usr/local/nginx/conf
中的nginx.conf
。我們將nginx.conf
中註釋的內容刪除一下。
#user nobody;
worker_processes 1;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}
}
nginx
的配置檔案包含三部門。
1.全域性塊
從配置檔案開始到events
塊之間的內容,主要會設定一些nginx
伺服器整體執行的配置指令。
worker_processes 1;
這個代表nginx
處理併發的關鍵配置,值越大,處理併發能力越強。但是會受到硬體、軟體等約束。
2.events塊
events
塊涉及的指令主要影響nginx
伺服器與使用者網路的連線。
worker_connections 1024;
這個代表nginx
支援的最大連線數。
3.http全域性塊
nginx
伺服器配置最頻繁的部分。http
全域性塊包含http塊
和server塊
。
三 Nginx配置反向代理
3.1 ngix代理流程
本地瀏覽器訪問nginx
伺服器,nginx
伺服器反向代理tomcat
伺服器,當我們請求nginx
的時候直接訪問到tomcat
。tomcat
的安裝這裡就不在講了,我將tomcat
和nginx
安裝在了同一臺伺服器上。
3.2 配置ip和域名的繫結關係
由於我們的nginx
沒有域名,為了演示,因此我們在本地host
檔案中配置nginx
伺服器ip和域名進行繫結。這個host
檔案的具體位置在C:\Windows\System32\drivers\etc
。在host檔案中增加一句配置:
47.104.xxx.xxx www.javatrip.com
前面的ip是伺服器的ip地址,後面的域名是我隨便起的用於繫結這個ip的一個域名。配置好之後,我們使用域名訪問一下tomcat,如果能請求到omcat
預設頁面,則配置成功。
3.3 在nginx配置請求轉發
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}
我們將以上預設的配置檔案做個修改:
server {
listen 80;
server_name 47.104.xxx.xxx;
location / {
root html;
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
}
以上這段配置的意思就是請求是47.104.xxx.xxx:80
,都會轉發至47.104.xxx.xxx:8080
。
現在瀏覽器訪問www.javatrip.com,發現直接轉發到了tomcat
上了,這樣簡單的反向代理就完成了。
3.4 根據請求字尾分發
我們再解壓一個tomcat
,埠號設定為8081,分別在兩個tomcat
下webapps
目錄下面新建dev
和prod
目錄,然後在該目錄下寫一個檔案。
將請求www.javatrip.com:7001/dev
轉發到tomcat8080
,將請求www.javatrip.com:7001/prod
轉發到tomcat8081
。現在我們的nginx
監聽的埠號是7001。開啟nginx
的配置檔案,新建一個server
如下:
server {
listen 7001;
server_name 47.104.xxx.xxx;
location ~ /dev/ {
proxy_pass http://127.0.0.1:8080;
}
location ~ /prod/ {
proxy_pass http://127.0.0.1:8081;
}
}
然後試試效果,分別訪問`www.javatrip.com:7001/dev/a.html和www.javatrip.com:7001/prod/a.html,效果如下:
其中,配置轉發的時候用到了~,其含義內容如下:
- = 嚴格匹配。如果這個查詢匹配,那麼將停止搜尋並立即處理此請求。
- ~ 為區分大小寫匹配(可用正規表示式)
- !~為區分大小寫不匹配
- ~* 為不區分大小寫匹配(可用正規表示式)
- !~*為不區分大小寫不匹配
- ^~ 如果把這個字首用於一個常規字串,那麼告訴
nginx
如果路徑匹配那麼不測試正規表示式。
四 Nginx配置負載均衡
4.1 什麼是負載均衡
負載均衡(Load Balance),意思是將負載(工作任務,訪問請求)進行平衡、分攤到多個操作單元(伺服器,元件)上進行執行。是解決高效能,單點故障(高可用),擴充套件性(水平伸縮)的終極解決方案。
現在我們想實現的效果是通過訪問www.javatrip.com:7001/prod/a.html,將請求分別分發到兩個tomcat上面去,首先我們在tomcat8080
上新建一個prod
的資料夾,裡面放一個a.html
的檔案。這樣tomcat8081
和tomcat8080
兩個上就都有了一個prod
的檔案加且裡面有一個a.html
的檔案。
4.2 配置nginx.conf
首先,在http塊
中配置兩個tomcat
的服務列表
upstream myserver{
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
其次,在server塊
中配置規則:
server {
listen 80;
server_name 47.104.xxx.xxx;
location / {
root html;
proxy_pass http://myserver;
index index.html index.htm;
}
}
4.3 測試效果
訪問地址:www.javatrip.com:7001/prod/a.html,多重新整理幾次。發現有的請求到tomcat8080
上,有的請求到tomcat8081
上。
4.4 nginx支援的幾種負載策略
- 輪詢(預設):每個請求按時間順序逐一分配到不同的伺服器,如果伺服器down了,會自動剔除。
upstream myserver{
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
- weight(權重):預設為1,權重越高,分配的請求越多。
upstream myserver{
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=2;
}
- ip hash:每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後臺伺服器,可以解決
session
的問題。
upstream myserver{
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
- fair(第三方):按後端響應時間進行分配,響應時間越短分配的請求越多。
upstream myserver{
server 127.0.0.1:8080;
server 127.0.0.1:8081;
fair;
}
由於動靜分離在實際開發中也不常用,就不再寫了。本篇文章做為一個nginx入門,到這裡就基本完結了。