01 nginx基礎(chǔ)概念
1.1 什么是nginx
l?是一個高性能的HTTP和反向代理服務(wù)器
l?特點(diǎn):占有內(nèi)存少,并發(fā)能力強(qiáng)
l?事實(shí)上Nginx的并發(fā)能力確實(shí)在同類型的網(wǎng)頁服務(wù)器中表現(xiàn)較好
l?可以作為靜態(tài)頁面的web服務(wù)器,同時還支持CGI協(xié)議的動態(tài)語言,如perl、PHP
l?不支持java,java程序只能通過與tomcat配合完成
l 專為性能優(yōu)化而開發(fā),是線上非常注重效率,能經(jīng)受高負(fù)載的考驗(yàn),最大支持的并發(fā)連接數(shù)是50000個
l 支持熱部署,啟動特別容易,并且?guī)缀踝龅?/span>7*24不間斷運(yùn)行,即使運(yùn)行幾個月也不需要重新啟動,還能夠在不間斷服務(wù)的情況下,對軟件版本進(jìn)行升級
1.2 反向代理
1) 正向代理
在客戶端(瀏覽器)配置代理服務(wù)器,通過代理服務(wù)器進(jìn)行互聯(lián)網(wǎng)訪問的過程
2)反向代理
反向代理:其實(shí)客戶端對代理是無感知的,因?yàn)榭蛻舳瞬恍枰魏闻渲镁涂梢栽L問。
我們需要將請求發(fā)送到反向代理服務(wù)器,由反向代理服務(wù)器去選擇目標(biāo)服務(wù)器并獲取數(shù)據(jù),然后在返回給客戶端,
此時反向代理服務(wù)器和目標(biāo)服務(wù)器對外是一臺服務(wù)器,暴露的是代理服務(wù)器地址,隱藏了真是服務(wù)器的IP地址。
?1.3 負(fù)載均衡
普通請求處理方式:客戶端發(fā)送多個請求到服務(wù)器,服務(wù)器處理請求,有一些可能要與數(shù)據(jù)庫進(jìn)行交互,服務(wù)器處理完畢后,再講結(jié)果返回給服務(wù)端
?
單個服務(wù)器解決不了,我們增加服務(wù)器的數(shù)量,然后將請求分發(fā)到各個服務(wù)器上,將原先請求集中到單個服務(wù)器上的情況改為請求分發(fā)到多個服務(wù)器上,將負(fù)載分發(fā)到不同的服務(wù)器,就是我們所說的負(fù)載均衡
1.4 動靜分離
為了加快網(wǎng)站的解析速度,可以把動態(tài)頁面和靜態(tài)頁面由不同的服務(wù)器來解析,加快解析速度,降低原來單個服務(wù)器的壓力
?
?
?02 nginx安裝,常用命令和配置文件
2.1 nginx安裝(linux)結(jié)合docker
步驟一:docker search nginx
?步驟二:拉取最新版本的Nginx
?步驟三:新建并運(yùn)行
?步驟四:訪問
說明:
安裝完成后,我們可以使用以下命令來運(yùn)行 nginx 容器:
$ docker run --name nginx-test -p 8080:80 -d nginx
參數(shù)說明:
- --name nginx-test:容器名稱。
- -p 8080:80: 端口進(jìn)行映射,將本地 8080 端口映射到容器內(nèi)部的 80 端口。
- -d nginx: 設(shè)置容器在在后臺一直運(yùn)行。
注意:
- 其中的會出現(xiàn)加載時間過長的問題,其原因是配置文件中的問題,需要修改
- 配置文件中的端口與啟動映射的管口要保持一致才行
?安裝完成之后,在user多出來一個文件夾local/nginx,在Nginx中有sbin啟動腳本
?
?2.2 常用命令
01 使用nginx操作命令的前提條件:必須進(jìn)入nginx的目錄中/user/local/nginx/sbin
02 查看nginx的版本號:./nginx -V
?
03 啟動nginx: ?./nginx
?
?04? 關(guān)閉nginx: ?./nginx -s stop
?
? 05 查看nginx狀態(tài): ?ps -ef | grep nginx
?06 重新加載nginx: ?./nginx -s reload
?2.3配置文件
01 配位文件的位置
?02 配置文件的內(nèi)容
#===================全局塊開始====================== #user nobody; #工作進(jìn)程數(shù),一般配置成和cpu數(shù)量一致 worker_processes 1; #全局錯誤日志及pid文件存放位置 error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #nginx 啟動master進(jìn)程pid號 #pid logs/nginx.pid; #=================全局塊結(jié)束============================ #==============events塊開始====================== events { #標(biāo)識單個worker進(jìn)程的最大并發(fā)數(shù) worker_connections 1024; } #============events塊結(jié)束============================ #============http塊開始(nginx服務(wù)器中配置最頻繁的部分,配置虛擬主機(jī),監(jiān)聽端口,請求轉(zhuǎn)發(fā)等等)========================== http { #引入 mime 類型定義文件 include mime.types; default_type application/octet-stream; #設(shè)置日志生成格式 #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #連接的超時時間 #keepalive_timeout 0; keepalive_timeout 65; #解開注釋就是開啟gzip壓縮 #gzip on; #此處配置多臺tomcat服務(wù)器(名稱不能有下劃線:webServer) upstream webServer{ server 127.0.0.1:8081; server 127.0.0.1:8082; } #此處配置多臺tomcat服務(wù)器(名稱不能有下劃線:webs2Server) #upstream webs2Server{ #server 192.168.30.19:8083; #server 192.168.32.12:8085; #} server { #定義當(dāng)前這個server監(jiān)聽的端口 listen 80; #定義使用localhost訪問 server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; #默認(rèn)請求地址,如果請求是:192.168.10.80:80/ 那么會進(jìn)入這個里面的tomcat反向代理地址 #一個location里面只能有一個proxy_pass location / { #此處可以配置Tomcat反向代理地址比如: #此處可以引用上面upstream 的多臺tomcat;也可以單獨(dú)配置一臺 proxy_pass http://127.0.0.1:8081/; #配置單臺 #proxy_pass http://webServer/; #引用上面的多臺 #引用上面的多臺配置 # root html; #默認(rèn)的網(wǎng)站根目錄的位置 #index index.html index.htm; #網(wǎng)站的歡迎頁,起始頁 } #表示如果請求是:192.168.10.80:80/web 那么會進(jìn)入這個里面的tomcat反向代理地址 location /web { #此處引用上面的配置的多臺tomcat #proxy_pass http://127.0.0.1:8082/; #proxy_pass http://w eb2Server/; #引用上面的多臺Tomcat配置 } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # #錯誤提示頁面 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ .php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ .php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} }
?03 配置文件組成
1)有但部分組成
?
03 nginx配置實(shí)例-反向代理
1)?實(shí)現(xiàn)效果:打開瀏覽器,在瀏覽器地址欄輸入地址www.123.com,跳轉(zhuǎn)到linux系統(tǒng)tomcat主頁面中
2)?準(zhǔn)備工作
(1)在linux系統(tǒng)安裝tomcat,并使用默認(rèn)端口8080 ?
?(3)在windows系統(tǒng)中通過瀏覽器訪問tomcat服務(wù)器
3)?訪問過程分析
4)?具體配置
(1)?在nginx中進(jìn)行 請求轉(zhuǎn)發(fā)的配置(反向代理)
???????
5)?最終測試
??????
?
?
04 nginx配置實(shí)例--反向代理02
1)實(shí)現(xiàn)效果:
使用nginx反向代理,根據(jù)訪問的路徑不同跳轉(zhuǎn)到不同端口的服務(wù)中去
Nginx監(jiān)聽端口為9001
訪問http://127.0.0.1:9001/edu/ 直接跳轉(zhuǎn)到127.0.0.1:8080
訪問http://127.0.0.1:9001/vod/ 直接跳轉(zhuǎn)到127.0.0.1:8081
2)準(zhǔn)備工作
?。?)?準(zhǔn)備兩個tomcat服務(wù)器,一個是8080端口,一個是8081端口
?。?)?準(zhǔn)備文件夾和測試頁面
3)具體配置
(1)找到nginx的配置文件,進(jìn)行反向代理配置
?。?)開放對外訪問的端口號 9001, 8080,,8081
4)最終測試
說明:
?
?05 nginx配置實(shí)例--負(fù)載均衡
1)?實(shí)現(xiàn)效果
瀏覽器地址欄輸入地址http://192.168.17.129/edu/a.html 負(fù)載均衡效果,平均到8080和8081端口中
2)?準(zhǔn)備工作
- 準(zhǔn)備兩臺tomcat服務(wù)器,分別是8080,,8081
- 在兩臺tomcat里面webapps目錄中,創(chuàng)建名稱為edu文件夾,在edu文件夾中創(chuàng)建頁面a.html
3)?在nginx的配置文件中進(jìn)行負(fù)載均衡的配置工作
?06nginx分配服務(wù)器策略
第一種:輪詢(默認(rèn))
每個請求按照時間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉,會被自動踢出
第二種: 權(quán)重
weight代表權(quán)重,默認(rèn)為1,權(quán)重越高被分配的客戶端越多
?
通過修改weight的值即可
第三種:ip_hash:按照每個請求訪問ip的hash結(jié)果分配,這樣每個訪客固定訪問一個后端服務(wù)器,可以解決session的問題
? 可以解決session共享問題
第四種:fair:按后端服務(wù)器的響應(yīng)時間來分配請求,響應(yīng)時間短的優(yōu)先分配
?
?07 ngnix配置實(shí)例--動靜分離
動靜分離簡單來說就是把動態(tài)請求和靜態(tài)請求分開,不能理解為把動態(tài)頁面和靜態(tài)頁面物理分離
?????
動靜分離的兩種方式
- 純粹的把靜態(tài)文件獨(dú)立成單獨(dú)的域名,放到獨(dú)立的服務(wù)器上,(兩個tomcat)(主流推崇)
- 動態(tài)和靜態(tài)文件混合在一起發(fā)布,通過nginx來分開處理
1)?準(zhǔn)備工作
?
2)? 具體配置
在nginx配置文件中進(jìn)行配置
?3)最終測試
???
?
?08 nginx配置高可用集群
01 什么是高可用
面臨的問題:如果nginx宕機(jī)(即請求無法實(shí)現(xiàn)的效果)
?
?高可用
(1)需要兩臺nginx服務(wù)器
(2)需要keepalived
(3)需要一個虛擬ip
?
?安裝之后,在etc里面生成目錄keepalived,有文件keepalived.conf
4.完成高可用配置(主從配置)
配置文件keepalived.conf(兩臺服務(wù)器都需要)
?
?主服務(wù)器
?
?腳本文件
?
?備份服務(wù)器
?腳本文件
最終測試:
(1)在瀏覽器地址欄輸入虛擬ip地址 192.168.17.50
?
訪問
(2)把主服務(wù)器(192.168.17.129)nginx和keepalived停止(先停keepalived,再停止nginx),然后輸入192.168.17.50,仍能正常訪問
?
?從(備)服務(wù)器中的效果
?瀏覽器
?
?09 nginx原理解析
?
?
本文摘自 :https://www.cnblogs.com/