柚子快報(bào)激活碼778899分享:運(yùn)維 Nginx
柚子快報(bào)激活碼778899分享:運(yùn)維 Nginx
Nginx-> 網(wǎng)絡(luò)服務(wù)器
正向代理
正向代理
是一個(gè)位于客戶端和原始服務(wù)器(origin server)之間的服務(wù)器,為了從原始服務(wù)器取得內(nèi)容,客戶端向代理發(fā)送一個(gè)請(qǐng)求并指定目標(biāo)(原始服務(wù)器),然后代理向原始服務(wù)器轉(zhuǎn)交請(qǐng)求并將獲得的內(nèi)容返回給客戶端。
客戶端必須要進(jìn)行一些特別的設(shè)置才能使用正向代理。就像要訪問google用vpn代理翻墻去訪問(用戶知道要訪問真正的服務(wù)器)
nginx的反向代理
什么是反向代理
反向代理
指的是瀏覽器/客戶端并不知道自己要訪問具體哪臺(tái)目標(biāo)服務(wù)器,只知道去訪問代理服務(wù)器 ,代理服務(wù)器再通過反向代理 +負(fù)載均衡實(shí)現(xiàn)請(qǐng)求分發(fā)到應(yīng)用服務(wù)器的一種代理服務(wù)。
反向代理服務(wù)的特點(diǎn)是代理服務(wù)器 代理的對(duì)象是應(yīng)用服務(wù)器,也就是對(duì)于瀏覽器/客戶端 來說應(yīng)用服務(wù)器是隱藏的。
以租房為例解釋正向代理和反向代理?
客戶端 <一> 代理 <一>服務(wù)端
A租房人(客戶端),B房產(chǎn)中介(代理),C真實(shí)房東(服務(wù)端)
1、正向代理
A租房人(客戶端)想租C真實(shí)房東的房子,但不認(rèn)識(shí)C真實(shí)房東(服務(wù)端)
B房產(chǎn)中介(代理)認(rèn)識(shí)C真實(shí)房東(服務(wù)端),并且從C真實(shí)房東(服務(wù)端)租到了房
A租房人(客戶端)通過B房產(chǎn)中介(代理)租到了C真實(shí)房東(服務(wù)端)的房
C真實(shí)房東(服務(wù)端)只知道房子租給了B房產(chǎn)中介(代理),并不知道A租房人(客戶端)租了自己的房子
2、反向代理
A租房人(客戶端)要租B房產(chǎn)中介(代理)的房
B房產(chǎn)中介(代理)從C真實(shí)房東(服務(wù)端)手里租了A租房人(客戶端)想要租的房
A租房人(客戶端)不知道這套房子真實(shí)房東是C真實(shí)房東(服務(wù)端)
C真實(shí)房東(服務(wù)端)不知道自己的房子被A租房人(客戶端)租住
nginx安裝
首先安裝nginx安裝環(huán)境
第一步
安裝nginx需要先將官網(wǎng)下載的源碼進(jìn)行編譯,編譯依賴gcc環(huán)境,如果沒有g(shù)cc環(huán)境,需要安裝gcc:
命令:yum install gcc-c++
第二步
PCRE(Perl Compatible Regular Expressions)是一個(gè)Perl庫(kù),包括 perl 兼容的正則表達(dá)式庫(kù)。nginx的http模塊使用pcre來解析正則表達(dá)式,所以需要在linux上安裝pcre庫(kù)。
命令:yum install -y pcre pcre-devel
第三步
zlib庫(kù)提供了很多種壓縮和解壓縮的方式,nginx使用zlib對(duì)http包的內(nèi)容進(jìn)行g(shù)zip,所以需要在linux上安裝zlib庫(kù)。
命令:yum install -y zlib zlib-devel
第四步
OpenSSL 是一個(gè)強(qiáng)大的安全套接字層密碼庫(kù),囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協(xié)議,并提供豐富的應(yīng)用程序供測(cè)試或其它目的使用。
nginx不僅支持http協(xié)議,還支持https(即在ssl協(xié)議上傳輸http),所以需要在linux安裝openssl庫(kù)。
命令:yum install -y openssl openssl-devel
然后安裝nginx
1、將安裝包上傳到/home,解壓
命令:tar -zxvf nginx-1.8.1.tar.gz
2、自定義創(chuàng)建一個(gè)文件夾作為Nginx安裝目錄,這里在home下創(chuàng)建nginx文件夾;
命令:cd /home
命令:mkdir nginx
3、在解壓的目錄(nginx-1.8.1)下執(zhí)行
先輸入命令 : cd /home/nginx-1.8.1
再執(zhí)行 命令 :./configure --prefix=/home/nginx
意思即配置安裝環(huán)境,將會(huì)把Nginx安裝到/home/nginx下
4,編譯:在解壓的文件夾(nginx-1.8.1)下先后執(zhí)行make 和 make install 命令
先輸入 make
然后輸入 make install
5、然后進(jìn)入nginx/sbin目錄下
命令: cd /home/nginx/sbin
執(zhí)行命令:./nginx 啟動(dòng)nginx
關(guān)閉防火墻
systemctl stop firewalld
或者打開端口
firewall-cmd --add-port=80/tcp --permanent (防火墻關(guān)閉了,不用做這個(gè)操作)
在瀏覽器輸入對(duì)應(yīng)的ip地址,不用加端口號(hào),因?yàn)閚ginx默認(rèn)是80端口,可以省略,就可以訪問到nginx
nginx常用指令
啟動(dòng):
windows
直接點(diǎn)擊Nginx目錄下的nginx.exe 或者 cmd運(yùn)行start nginx
linux
nginx目錄下,sbin目錄中,./nginx
關(guān)閉
nginx -s stop 或者 nginx -s quit
stop表示立即停止nginx,不保存相關(guān)信息
quit表示正常退出nginx,并保存相關(guān)信息
nginx -s stop 或者 nginx -s quit
nginx -s reload :修改配置后重新加載生效
nginx -s reopen :重新打開日志文件
nginx -t -c /path/to/nginx.conf 測(cè)試nginx配置文件是否正確
nginx -s reopen #重啟Nginx
nginx -s reload #重新加載Nginx配置文件,然后以優(yōu)雅的方式重啟Nginx
nginx -s stop #強(qiáng)制停止Nginx服務(wù)
nginx -s quit #優(yōu)雅地停止Nginx服務(wù)(即處理完所有請(qǐng)求后再停止服務(wù))
nginx -t #檢測(cè)配置文件是否有語法錯(cuò)誤,然后退出
nginx -?,-h #打開幫助信息
nginx -v #顯示版本信息并退出
nginx -V #顯示版本和配置選項(xiàng)信息,然后退出
nginx -t #檢測(cè)配置文件是否有語法錯(cuò)誤,然后退出
nginx -T #檢測(cè)配置文件是否有語法錯(cuò)誤,轉(zhuǎn)儲(chǔ)并退出
nginx -q #在檢測(cè)配置文件期間屏蔽非錯(cuò)誤信息
nginx -p prefix #設(shè)置前綴路徑(默認(rèn)是:/usr/share/nginx/)
nginx -c filename #設(shè)置配置文件(默認(rèn)是:/etc/nginx/nginx.conf)
nginx -g directives #設(shè)置配置文件外的全局指令
killall nginx #殺死所有nginx進(jìn)程
nginx部署圖片服務(wù)器
1,修改配置文件
Nginx默認(rèn)使用端口是80,這里直接先把Nginx端口改為8090
命令:vi /home/nginx/conf/nginx.conf
在42行位置,輸入以下代碼內(nèi)容
location ~ .*\.(gif|jpg|jpeg|png)$ {
expires 24h;
root /home/images/;#指定圖片存放路徑
access_log /home/nginx/logs/images.log;#圖片 日志路徑
proxy_store on;
proxy_store_access user:rw group:rw all:rw;
proxy_temp_path /home/images/;#代理臨時(shí)路徑
proxy_redirect off;
proxy_set_header Host 127.0.0.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 1280k;
proxy_connect_timeout 900;
proxy_send_timeout 900;
proxy_read_timeout 900;
proxy_buffer_size 40k;
proxy_buffers 40 320k;
proxy_busy_buffers_size 640k;
proxy_temp_file_write_size 640k;
if ( !-e $request_filename)
{
proxy_pass http://127.0.0.1:8090;#代理訪問地址,和上面的端口一致
}
}
2,重新加載nginx
修改了nginx配置文件后,得重重新啟動(dòng)一下nginx
切換目錄 命令:cd /home/nginx/sbin
重新加載 命令:./nginx -s reload
3,在/home下,新建一個(gè)images目錄
系統(tǒng)一般會(huì)自動(dòng)創(chuàng)建,可以先用 ls /home看看有沒有這個(gè)目錄
沒有就創(chuàng)建 : mkdir /home/images
4,上傳幾張圖片到images中
5,再次訪問,加上上面新設(shè)置的端口號(hào),將圖片名稱加在地址后面即可
nginx實(shí)現(xiàn)反向代理
1,復(fù)制3個(gè)tomcat,分別是
命令 : cd /home
復(fù)制命令 :
cp -r apache-tomcat-9.0.30 ./tomcat-8081
cp -r apache-tomcat-9.0.30 ./tomcat-8082
cp -r apache-tomcat-9.0.30 ./tomcat-8083
分別修改這幾各tomcat對(duì)應(yīng)的端口號(hào)
用工具找到位置 : /home/tomcat-8081/conf/server.xml
右擊打開,修改端口
tomcat-8081
tomcat-8082
tomcat-8083
2,新建一個(gè)test.html,內(nèi)容分別為對(duì)應(yīng)端口號(hào)的內(nèi)容顯示
第1步:新建一個(gè)txt文本,在里面輸入內(nèi)容
這是tomcat-8081
然后保存
第2步:把文檔改名為 test.html
第3步:將test.html這個(gè)文件拖到對(duì)應(yīng)的三個(gè)tomcat中,拖到tomcat-8081/webapps/ROOT中,三個(gè)tomcat都拖一個(gè)文件
第4步:將test.html的文件內(nèi)容,分別改成和tomcat目錄名稱對(duì)應(yīng)的值
3,分別啟動(dòng)這3個(gè)tomcat,保證這3個(gè)tomcat都能訪問
分別進(jìn)入 3個(gè)tomcat的bin目錄下,./startup.sh
cd /home/tomcat-8081/bin --> ./startup.sh
cd /home/tomcat-8082/bin --> ./startup.sh
cd /home/tomcat-8083/bin --> ./startup.sh
然后分別加上/test.html去訪問對(duì)應(yīng)的test頁(yè)面
4,配置nginx
在server的外面加上
upstream tomcat1 {
server 192.168.100.160:8081;
server 192.168.100.160:8082;
server 192.168.100.160:8083;
}
#192.168.100.160 -> http://tomcat1 -> http://192.168.100.160:8081
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://tomcat1;
#配置默認(rèn)訪問頁(yè),這里就會(huì)訪問到tomcat1里面的那個(gè)index.jsp文件里面
index index.html;
}
}
加完后,保存退出,重新加載nginx
命令:cd /home/nginx/sbin
命令:./nginx -s reload
5,然后在瀏覽器中輸入地址去訪問
http://192.168.100.160/test.html
然后刷新訪問地址,每次訪問的時(shí)候都會(huì)隨機(jī)出現(xiàn)不同的tomcat頁(yè)面,這其實(shí)就完成了反向代理的使用
6,然后我們還可以重新配置一下,當(dāng)我們?cè)L問指定頁(yè)面的時(shí)候,只有指定的服務(wù)器可以使用
upstream tomcat1 {
server 127.0.0.1:8081;
}
upstream tomcat2 {
server 127.0.0.1:8082;
server 127.0.0.1:8083;
}
server {
listen 80;
server_name localhost;
location /1 {
proxy_pass http://tomcat1;
index index.jsp;
}
location /test.html {
proxy_pass http://tomcat2;
index index.jsp;
}
}
這個(gè)時(shí)候再次訪問對(duì)應(yīng)的地址,發(fā)現(xiàn)只有8082和8083可以訪問我們指定的頁(yè)面
負(fù)載均衡
#反向代理+負(fù)載均衡
upstream reverseProxyServer{
#負(fù)載均衡應(yīng)用服務(wù)器A: 權(quán)重為10,10s內(nèi)連接請(qǐng)求失敗2次,nginx在10s內(nèi)認(rèn)為server是不可用的,將不在發(fā)送請(qǐng)求給這臺(tái)服務(wù)器
server 應(yīng)用服務(wù)器A的IP:8080 weight=10 max_fails=2 fail_timeout=10s;
#負(fù)載均衡應(yīng)用服務(wù)器B: 代理服務(wù)器權(quán)重為5,10s內(nèi)連接請(qǐng)求失敗2次,nginx在10s內(nèi)認(rèn)為server是不可用的,將不在發(fā)送請(qǐng)求給這臺(tái)服務(wù)器
server 應(yīng)用服務(wù)器B的IP:8080 weight=5 fail_timeout=10s max_fails=2;
#負(fù)載均衡應(yīng)用服務(wù)器C: 代理服務(wù)器權(quán)重為5,10s內(nèi)連接請(qǐng)求失敗2次,nginx在10s內(nèi)認(rèn)為server是不可用的,將不在發(fā)送請(qǐng)求給這臺(tái)服務(wù)器
server 應(yīng)用服務(wù)器C的IP:8080 weight=5 fail_timeout=10s max_fails=2;
}
server {
#監(jiān)聽80端口,http默認(rèn)端口80
listen 80;
#服務(wù)器IP或域名
server_name localhost;
#反向代理請(qǐng)求路徑中含有/appname的所有請(qǐng)求到upstream定義的對(duì)應(yīng)反向代理模塊
location /appname {
proxy_pass http://reverseProxyServer;
}
}
負(fù)載均衡算法常用的有輪詢、權(quán)重和ip_hash算法,默認(rèn)是輪詢算法~
(1)基于輪詢的算法
原理是每一個(gè)請(qǐng)求按時(shí)間順序逐一被分發(fā)到不同的應(yīng)用服務(wù)器,如果接收請(qǐng)求的應(yīng)用服務(wù)器掛了,并且請(qǐng)求超過最大失敗次數(shù)max_fails(1次),則在失效時(shí)間fail_timeout(10秒)內(nèi)不會(huì)再轉(zhuǎn)發(fā)請(qǐng)求到該節(jié)點(diǎn)~
upstream defaultReverseProxyServer{
server 192.168.0.1:8080;
server 192.168.0.2:8080;
}
(2)基于權(quán)重的算法
原理是每一個(gè)請(qǐng)求按權(quán)重被分發(fā)到不同的應(yīng)用服務(wù)器,同樣,如果接收請(qǐng)求的應(yīng)用服務(wù)器掛了,并且請(qǐng)求超過最大失敗次數(shù)max_fails(默認(rèn)1次或可設(shè)置N次),則在失效時(shí)間fail_timeout(默認(rèn)10秒,可設(shè)置N秒)內(nèi),不會(huì)再轉(zhuǎn)發(fā)請(qǐng)求到該節(jié)點(diǎn)~
upstream weightReverseProxyServer{
server 192.168.0.1:8080 weight=10 max_fails=2 fail_timeout=5s;
server 192.168.0.2:8080 weight=5 max_fails=2 fail_timeout=5s;
}
(3)基于ip_hash的算法
原理是每一個(gè)請(qǐng)求按用戶訪問IP的哈希結(jié)果分配,如果請(qǐng)求來自同一個(gè)用戶IP則固定這臺(tái)IP訪問一臺(tái)應(yīng)用服務(wù)器,該算法可以有效解決動(dòng)態(tài)網(wǎng)頁(yè)中存在的session共享問題。
upstream ipHashReverseProxyServer{
ip_hash;
server 192.168.0.1:8080;
server 192.168.0.2:8080;
}
一般使用的是基于權(quán)重的算法,因?yàn)楝F(xiàn)在很多情況下都是集群部署,而且集群下的各個(gè)服務(wù)器資源大多都是不均勻的,資源高的則分配權(quán)重高一些,資源低的則分配權(quán)重低一些,這種情況使用基于權(quán)重的負(fù)載均衡算法,可以更高效的利用資源和提高并發(fā)處理能力~
柚子快報(bào)激活碼778899分享:運(yùn)維 Nginx
推薦閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。