Nginx
文章目錄
學習思路:
1.基本概念
反向代理
負載均衡
動靜分離
2.安裝與使用
linux安裝nginx
常用命令
配置文件
3.nginx配置實例
3.1反向代理
3.2負載均衡
3.3動靜分離
3.4高可用的集羣
4.nginx原理與結構
基本概念
- 什麼是nginx?
高性能web服務器 http服務器 反向代理;
優點:佔用內存少,併發能力強,高負載考驗
特性:處理靜態文件,反向代理,負載均衡,支持熱部署
相關概念
反向代理
正向代理:類似一個跳板機,代理訪問外部資源。就是代理服務器。客戶端必須手動配置代理服務器。跳轉
用途:訪問外網,google.com。 對客戶端的訪問認證,上網行爲管理,對外隱藏用戶信息。
反向代理:客戶端不需要任何配置就可以訪問。理解:內網代理服務器;保護
方向代理服務器接受客戶端請求,將請求轉發給內網服務器,結果返回給客戶端;代理服務器對外表現爲一個服務器。客戶端只能看到反向代理服務器,不能看到內網服務器的信息;
作用:WAF網站防護功能,保證內網安全;負載均衡:優化網站負荷;
倆者區別:
正向:跳轉 反向:保護
負載均衡
普通的請求流程: 客戶端-網絡-服務端-數據庫;
併發量高,請求數量多,單個服務器處理有瓶頸;增加服務器的數量,將請求發到多個服務器上;將反向代理服務器作爲負載均衡器,將多個請求分擔到多個服務器中;
原理:如何完成負載均衡選擇:
1.確保所選的服務器能夠對請求做出響應;
2.根據預先配置好的算法從健康服務池中選擇;
會定期檢查後的服務器,判斷連接狀態更新健康服務器池;
負載均衡算法:
- Round Robin 輪詢
- Least Connection 最小連接
- Source 溯源 根據請求源IP的散列(hash)選擇要轉發的服務器
負載均衡器單點故障,連接到第二個負載均衡器上;利用浮動IP解決IP地址重新映射的方法;
上面的簡單的負載均衡概念,負載應用於不同的場景下有不同的類型
GSLB Global Server Load Balance 全局負載均衡,實現在廣域網上不同地域的服務器間的流量調配;
SLB Server Load Balance 網絡負載均衡服務,針對彈性計算平臺雲服務器設計
4層負載均衡 在傳輸層中的配置轉發
7層負載均衡 在應用層實現,nginx負載均衡就是7層負載均衡
動靜分離
爲了加快網站的解析速度,將動態資源和靜態資源由不同的服務器來解析,加快解析速度,降低單個服務器的壓力;
靜態資源:HTML,JS,CSS,img
動態資源:後臺應用
就是支持前後端分離?
方法:
將靜態資源部署在nginx(靜態服務器)上,後臺項目部署在應用服務器上,根據一定規則靜態資源的請求全部請求到nginx上,達到動靜分離; 如何進行請求分離,前後端交互;
1.靜態資源部署在CDN上
CDN系統能夠實時地根據網絡流量和各節點的連接、負載狀況以及到用戶的距離和響應時間等綜合信息將用戶的請求重新導向離用戶最近的服務節點上。
2.後的API提供數據
前端調用後端的API, 後端接受請求,處理好數據,將處理的結果通過JSON格式返回至前端;nginx主要採用java平臺開發,應用服務器爲Tomcat服務器;
域名問題
採用相同域名下,用戶請求api時可以避免跨域所帶來的問題,相對開發更爲快速,工作量也相對小一些。
前後端採用不同域名時,需要前後端開發時兼容跨域請求的情況,開發量相對上一種會稍多一些。解決跨域方式最常用的方式就是採用JSONP,還有一種解決方式使用CORS(HTTP訪問控制)允許某些域名下的跨域請求。
動靜分離優點:
1.後端api接口服務化:後端服務的功能模塊可以提供多個平臺使用,便於維護;
2.前後端並行開發:關係接口,開發互不干擾,並行開發,提高開發效率;
3.減少後端服務器壓力,提高訪問速度:後端不需要再進行渲染,前端更放的開;
動靜分離缺點:
1.開發量變大,需要前後端對api的理解;
安裝練習
環境:Linux Ubuntu 16.04 公IP: 47.94.231.159
https://blog.csdn.net/qq_23832313/article/details/83578836
直接apt -get install nginx安裝
版本:nginx -v
啓動:service nginx start
配置文件
- 主程序:/usr/sbin/nginx
- 配置文件 /etc/nginx
- 靜態文件 /usr/share/nginx ; /var/www/html/
- 日誌 /var/log/nginx
這裏又安裝了PCRE 可以支持Rewrite功能
基本命令
一個指向功能有多種形式的命名,當然底層的實現是一樣的
啓動 service nginx start
nginx
關機 service nginx stop
nginx -s stop
nginx -s quit
:處理完請求後退出;
重啓 service nginx reboot
nginx -s reopen
重新加載配置文件: nginx -s reload
-t 測試配置文件是否有問題; -v 顯示版本信息 ;-c filename 設置配置文件;-p prefix 設置前綴路徑;-s signal 發送進程信號
ps -ef | grep nginx
查看nginx相關進程 可以執行命令 kill -s signal 進程id
看個視頻 慢死了 我去
訪問公有IP:http://47.94.231.159
若不能訪問需要關閉防火牆,或者打開指定端口號;
配置文件
nginx指令: http://www.nginx.cn/doc/
位置:/ect/nginx/nginx.conf
; ubantu的配置文件一般都再etc下面
centos:/user/local/conf/nginx.conf
全局塊
nginx服務器整體運行的配置指令:
user nginx服務的用戶組
worker_processes: 顧名思義工作進程,是nginx併發處理的配置,w_p值越大併發處理量也就越大,會受到硬件,軟件等設備的制約;
pid 進程存放的路徑
error_log 日誌存放的路徑和類型
worker_rlimit_nofile 進程可以打開的最大文件描述符的值
events塊
影響nginx服務器與用戶的網絡連接,用於併發處理的配置
use epoll 使用epoll事件驅動模型來處理多連接請求,達到併發;
worker_connections 每個工作進程可同時支持的最大連接數目;
http塊
Nginx服務器配置中最頻繁的部分,代理,緩存和日誌定義等功能和第三方模塊的配置都在這裏;
http全局塊
http全局塊的配置包括文件引入,MIME-TYPE定義,日誌定義,連接超時時間,單鏈接請求上限等;
include 是主模塊指令,實現對配置文件所包含的文件的設定,減少主配置文件的複雜度;
default_type 設定默認類型爲二進制流;
client_header_buffer_size 客戶端請求頭緩衝區的大小,一般1K夠用,自定義消息頭,或有更大的Cookie可以增加緩衝區的大小;
client_max_body_size 客戶端請求的最大單個文件字節數;
large_client_header_buffers 客戶端請求中較大的消息頭的緩衝最大數量和大小 4個32K;
sendfile 開啓高效文件傳輸模式;tcp_nopush,tcp_nodelay 設置爲on用於防止網絡阻塞;
keepalive_timeout 客戶端保持活動的超時時間;
HttpGzip模塊配置:這個模塊支持實時壓縮輸出數據流
- gzip on 開啓GZIP壓縮
- gzip_min_length 允許壓縮頁面的最小字節
- gzip_buffers 申請內存作爲壓縮結果流緩存
- gzip_http_version 設置識別HTTP協議版本 默認1.1
- gzip_comp_level 壓縮等級:1.壓縮比最小,處理速度最快 9.壓縮比最大,處理速度最慢,但 傳輸速度快,比較消耗cpu資源;
- gzip_types 用來指定壓縮的類型
- gzip_vary on 可以讓前端的緩存服務器緩存經過GZIP壓縮的頁面,例如用Squid緩存經過Nginx壓縮的數據。
fastcgi模塊配置 :…待看
server塊
虛擬主機的配置,每個sever塊是一個虛擬主機;通常將虛擬主機的配置文件寫入另一個文件,然後通過include包含進來,便於維護和管理;
server全局塊
listen 指定虛擬主機的服務端口;server_name 指定IP地址或域名,多個域名之間用空格分開;index設定訪問的默認首頁文件類型和地址;root 指定虛擬主機的網頁根目錄;charset gb2312 設置網頁二點默認編碼格式;access_log 虛擬主機的訪問日誌存放路徑
location塊
location用於設置Url地址的匹配規則,可以根據正則表達式匹配符合規則的url來完成相應的操作;
通過location 匹配規則可以實現 反向代理,動靜分離,負載均衡等操作;expires 30d 文件的過期時間 30天
配置實例
反向代理
實現效果
1.打開瀏覽器,再瀏覽器輸入地址http://www.123.com, 跳轉到linux 系統tomcat主頁面中;
對外暴露nginx的方向代理服務器,tomcat的服務器不對外暴露;
準備工作
環境:ubantu16.04 nginx 1.10.3 公有IP:47.94.231.159
安裝tomcat 使用8080默認端口: 下載地址 https://blog.csdn.net/a542551042/article/details/49650067
安裝JDK: https://yq.aliyun.com/articles/704959?spm=a2c4e.11155472.0.0.3dbe7a6deAEVPZ
啓動tomcat :./startup.sh
訪問 : http://47.94.231.159:8080/
tomcat安裝 目錄:usr/src/apache/
配置過程
- windows系統host文件中進行本地域名IP配置
目錄:C:\Windows\System32\drivers\etc\hosts
- nginx 請求轉發的配置
配置文件proxy_1.conf:添加
proxy_pass http://127.0.0.1:8080;
server {
listen 80;
server_name 47.94.231.159;
root var/www/html;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
將代理配置文件包含到nginx.conf http塊中;nginx -s reload
重新加載配置文件;
完成反向代理,再瀏覽器輸入域名/ip 會默認打開8080下的tomcat頁面
進階配置
實現效果:通過不同路徑訪問不同服務器
http://47.94.231.159/path1/ 跳轉到 127.0.0.1:8081
http://47.94.231.159/path2/ 跳轉到 127.0.0.1:8082
準備倆個服務器 配置好相應的環境變量,更改默認端口,啓動端口和結束端口
tomcat 配置文件.更改端口:tomacat/conf/server.xml
路由:再url後的路徑時組webapps目錄下:tomacat/webapps/path1/index.html
修改nginx配置文件 location url匹配原則:
location ~ /path1/ {
proxy_pass http://127.0.0.1:8081;
}
location ~ /path2/ {
proxy_pass http://127.0.0.1:8082;
}
正則表達式不嚴謹:…繼續學習
負載均衡
準備:自己寫三個監聽端口的服務,用於測試負載均衡。
配置文件:
每個server指令後不僅支持ip,同時支持域名,socket;
常用參數
跟在server後面
- down :當前的server暫時不參加負載均衡
- backup:預留的備份服務器
- max_fails 允許請求失敗的次數
- fail_timeout 經過max_fails後服務暫停的時間
- man_conns 限制的最大連接數
分配策略
輪詢 默認,按時間順序逐一分配到不同的後端服務器
加權輪詢 weight 默認爲1.權重越高分配的客戶端越多
server 47.94.231.159:8081 weight=10;
ip_hash 每個請求按照訪問的ip的hash結構分配,每個訪客固定訪問一個後端服務器。解決session問題;
ip_hash
server 192.168.0.1:80;
url_has 顧名思義
hash hash自定義的key
fair 按照後端服務器的響應時間來分配請求,響應時間短的優先分配;
server 192.168.0.1:81;
fair;
least_conn 最少連接數,哪個機器連接數少就分配
動靜分離
通過nginx中間件將動態請求,靜態請求分開;分離資源,減少不必要的請求消耗,減少請求延時
方式:1.靜態資源放在獨立的服務器中;
2.混合在一起,由nginx通過location分開處理
參數:expires 緩存設置
autoindex on 列出當前文件夾內容
動態請求放到Tomcat中,jpg,png靜態資源在nginx直接訪問;
測試:靜態圖片jpg,動態隨機數代碼php ;分開存儲同時演示;
在導航html 中分別去請求jpg和php
<body>
<h1>測試動靜分離</h1>
<img src="http://47.94.231.159/img/cat.jpg"/>
<script language="php" src="http://47.94.231.159/test/random.php">
</body>
配置文件
將對php的請求轉發到了8080端口,tomcat服務器監聽的端口;
jpg直接打開/opt/app/code路徑下的靜態文件;這就是簡單的動靜分離;
原理與結構
…待看 如何完成併發處理;線程池? IO複用?