一 Nginx服務器
1.1 什么是Nginx
Nginx 是一個高性能的 http 和反向代理服務器,其特點是占用記憶體小,并發能力強, Nginx專為性能優化而開發,性能是其最重要的考量,能經受高負載的考驗,有報告表明能支持高達50000個并發連接數,
1.2 反向代理
正向代理:在瀏覽器中配置代理服務器,通過代理服務器進行互聯網訪問,例如平時我們使用的加速器、翻墻等代理就是正向代理,客戶機請求代理服務器,代理服務器轉發請求到對應的目標服務器(代理的是客戶)
反向代理:將請求發送到反向代理服務器,由反向代理服務器去選擇目標服務器獲取資料后,再回傳給客戶端,此時反向代理服務器和目標服務器對外就是一個服務器,暴漏的是代理服務器地址,部署在Web服務器上,
代理所有外部網路對內部網路的訪問,瀏覽器訪問服務器,必須經過這個代理,是被動的,(代理的是服務器)
1.3反向代理的作用:
-
安全,客戶端對Web服務器的訪問需要先經過反向代理服務器,這樣可以防止外部程式對Web服務器的直接攻擊,
-
負載均衡,反向代理服務器可以根據Web服務器的負載情況,動態地把HTTP請求交給不同的Web服務器來處理,前提是要有多個Web服務器,
-
提升Web服務器的IO性能,一個HTTP請求的資料,從客戶端傳輸給服務器,是需要時間的,例如N秒,如果直接傳給Web服務器,Web服務器就需要讓一個行程阻塞N秒,來接收IO,這樣會降低Web服務器的性能,如果使用反向代理服務器,先讓反向代理服務器接收完整個HTTP請求,再把請求發給Web服務器,就能提升Web服務器的性能,還有一些靜態檔案的請求,可以直接交給反向代理來處理,不需要經過Web服務器,
1.4 負載均衡
如果請求數過大,單個服務器解決不了,我們增加服務器的數量,然后將請求分發到各個服務器上,將原先請求集中到單個服務器的情況改為請求分發到多個服務器上,就是負載均衡,
1.5動靜分離
為了加快服務器的決議速度,可以把動態頁面和靜態頁面交給不同的服務器來決議,加快決議速度,降低原來單個服務器的壓力,
二 Nginx的安裝
Nginx 需要幾個依賴包,分別是 pcre , openssl , zlib ,在安裝 nginx 之前需要先安裝這幾個依賴,
2.1 安裝pcre依賴
- 使用命令下載 pcre 壓縮包
1 wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
- 解壓壓縮檔案
1 tar -xvf pcre-8.37.tar.gz
- 進入解壓后的名錄,執行以下命令
./configure
- 使用以下命令進行編譯安裝
1 make && make install
- 查看安裝的 pcre 版本號
1 pcre-config --version
2.2 安裝openssl,zlib等依賴
1 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 中注釋的內容洗掉一下,
1 #user nobody; 2 worker_processes 1; 3 4 #pid logs/nginx.pid; 5 6 events { 7 worker_connections 1024; 8 } 9 10 http { 11 include mime.types; 12 default_type application/octet-stream; 13 14 sendfile on; 15 #tcp_nopush on; 16 17 #keepalive_timeout 0; 18 keepalive_timeout 65; 19 20 #gzip on; 21 22 server { 23 listen 80; 24 server_name localhost; 25 26 location / { 27 root html; 28 index index.html index.htm; 29 } 30 } 31 }
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檔案中增加一句配置:
1 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 如下:
1 server { 2 listen 7001; 3 server_name 47.104.xxx.xxx; 4 5 location ~ /dev/ { 6 proxy_pass http://127.0.0.1:8080; 7 } 8 9 location ~ /prod/ { 10 proxy_pass http://127.0.0.1:8081; 11 } 12 }
然后試試效果,分別訪問`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 的服務串列
1 upstream myserver{ 2 server 127.0.0.1:8080; 3 server 127.0.0.1:8081; 4 } 5 其次,在 server塊 中配置規則: 6 7 server { 8 listen 80; 9 server_name 47.104.xxx.xxx; 10 11 location / { 12 root html; 13 proxy_pass http://myserver; 14 index index.html index.htm; 15 } 16 }
4.3 測驗效果
訪問地址:www.javatrip.com:7001/prod/a.html,多重繪幾次,發現有的請求到 tomcat8080上,有的請求到 tomcat8081 上,
4.4 nginx支持的幾種負載策略
- 輪詢(默認):每個請求按時間順序逐一分配到不同的服務器,如果服務器down了,會自動剔除,
1 1 upstream myserver{ 2 server 127.0.0.1:8080; 3 server 127.0.0.1:8081; 4 }
- weight(權重):默認為1,權重越高,分配的請求越多,
1 upstream myserver{ 2 server 127.0.0.1:8080 weight=1; 3 server 127.0.0.1:8081 weight=2; 4 }
- ip hash:每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個后臺服務器,可以解決 session 的問題,
upstream myserver{
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
- fair(第三方):按后端回應時間進行分配,回應時間越短分配的請求越多,
1 upstream myserver{ 2 server 127.0.0.1:8080; 3 server 127.0.0.1:8081; 4 fair; 5 }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/80865.html
標籤:Python
上一篇:雜碎小知識——函式相關
