nginx地址重寫、反向代理方式
案例一:nginx地址重寫
什么是地址重寫?
就是地址欄被重寫,如:www.360buy.com ----> www.jd.com
rewrite 舊地址 新地址 [選項] //rewrite后不要寫域名,從/開始寫。
需求:
沿用上次的www.a.com的配置,實現(xiàn)以下要求:
- 1、所有訪問a.html的請求,重定向到b.html
- 2、所有訪問192.168.0.100的請求重定向到www.tmooc.cn
- 3、所有訪問192.168.0.100/的請求重定向到www.tmooc.cn/下相同的頁面
- 4、實現(xiàn)瀏覽器與curl訪問相同的頁面文件,返回不同的內(nèi)容
實現(xiàn)方案:
- 主要用到參數(shù) rewrite
- rewrite regex replacement flag
- rewrite 舊地址 新地址 【選項】
步驟一:修改配置文件(訪問a.html 跳到b.html)
[root@porxy ~]# vim /usr/local/nginx/conf/nginx.conf server { listen 80; server_name 192.168.35.134; ###添加下列信息#### rewrite /a.html /b.html; [root@porxy ~]# echo "BBB" > /usr/local/nginx/html/b.html [root@porxy ~]# /usr/local/nginx/sbin/nginx -s reload 客戶端進行驗證: [root@client ~]# curl http://192.168.35.134/a.html //訪問的是a.html,實際出來的是b.html BBB
瀏覽器驗證:
步驟二:修改配置文件(訪問a.網(wǎng)站的a頁面,跳轉(zhuǎn)的是a網(wǎng)站的b頁面)
[root@porxy ~]# vim /usr/local/nginx/conf/nginx.conf server { listen 80; server_name 192.168.35.134; ###多添加redirect#### rewrite /a.html /b.html redirect; [root@porxy ~]# echo "BBB" > /usr/local/nginx/html/b.html [root@porxy ~]# /usr/local/nginx/sbin/nginx -s reload 客戶端進行驗證: [root@client ~]# curl http://192.168.35.134/a.html //訪問的是a.html,實際出來的是b.html BBB
瀏覽器地址欄會出現(xiàn)變化:
步驟三:修改配置文件(訪問192.168.4.5的請求重定向至www.tmooc.cn)
[root@porxy ~]# vim /usr/local/nginx/conf/nginx.conf server { listen 80; server_name 192.168.35.134; ######添加這個信息######### rewrite ^/ http://www.tmooc.cn/ ; # ^/ 值得正則匹配 [root@porxy ~]# /usr/local/nginx/sbin/nginx -s reload
瀏覽器訪問時直接跳轉(zhuǎn)到www.tmooc.cn 網(wǎng)站
步驟四:訪問192.168.35.134/下面的頁面,重定向到www.tmooc.cn/下相同的頁面
[root@porxy ~]# vim /usr/local/nginx/conf/nginx.conf location / { } listen 80; listen 80; server_name 192.168.35.134; ######添加配置####### rewrite ^/(.*)$ http://www.tmooc.cn/$1; #.*代表任何東西,()括號代表復(fù)制,后面的$1就是第一個括號的東西。更好的解決了步驟三的缺點。 [root@porxy ~]# /usr/local/nginx/sbin/nginx -s reload 瀏覽器驗證: 例如:訪問的是http://www.baidu.com/free 則會跳轉(zhuǎn)到http://www.tmooc.cn/free頁面下。
瀏覽器測試:
步驟五:修改配置文件(實現(xiàn)curl和火狐訪問相同鏈接返回的頁面不同)
連接相同則代表
訪問:/usr/local/nginx/html/test.html 實際訪問:/usr/local/nginx/html/firefox/test.html
腳本更改為:如何區(qū)分?
if (如果你是手機){
rewrite ^/(.*) /firefox/$1;
}
http { include mime.types; default_type application/octet-stream; #######下面注釋的很重要######## #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' //日志的第一列時客戶端的ip地址,第二列時橫線,第三列是用戶名,第四列是方括號括起來的時間,第五列是訪問的頁面 # '$status $body_bytes_sent "$http_referer" ' //然后是狀態(tài),再一列是字節(jié),再是看請求的是什么 # '"$http_user_agent" "$http_x_forwarded_for"'; //$http_user_agent 是可以看到客戶端用的是什么操作系統(tǒng),什么瀏覽器,什么版本號, #access_log logs/access.log main;
步驟一:
1)創(chuàng)建網(wǎng)頁目錄及對應(yīng)的網(wǎng)頁文件
[root@porxy ~]# echo " I am beautiful girl" > /usr/local/nginx/html/test.html [root@porxy ~]# mkdir -p /usr/local/nginx/html/firefox/ [root@porxy ~]# echo "firefox page" > /usr/local/nginx/html/firefox/test.html
2)修改nginx配置文件
[root@porxy ~]# vim /usr/local/nginx/conf/nginx.conf server { listen 80; server_name 192.168.35.134; #rewrite ^/ http://www.tmooc.cn/ ; #rewrite ^/(.*)$ http://www.tmooc.cn/$1; #########添加下列信息######### #這里的~符號代表正則匹配,*符號代表不區(qū)分大小寫 if ($http_user_agent ~* firefox){ #識別客戶端firefox瀏覽器 rewrite ^(.*)$ /firefox/$1; } [root@porxy ~]# /usr/local/nginx/sbin/nginx -s reload
nginx地址重寫【總結(jié)】
rewrite 舊地址 新地址 [選項] //rewrite后不要寫域名,從/開始寫。
rewrite /a.html /b.html ; //訪問a跳轉(zhuǎn)到b
rewrite /a.html /b.html redirect; // redirect 臨時重定向
rewrite /a.html /b.html last; // last意思是不再讀其他rewrite
rewrite /a.html /b.html permament; //permament意思是永久重定向。
rewrite /a.html /b.html break; // break意思是不再讀其他語句,請求結(jié)束。
案例二: nginx的反向代理
Nginx功能:
- 調(diào)度器(輪詢算法)
- 健康檢查
什么是調(diào)度?
就是當用戶發(fā)送訪問請求時,nginx代理器將第一次請求發(fā)送到web1,第二次請求發(fā)送到web2服務(wù)器上。
什么是健康檢查?
就是智能的判斷哪臺服務(wù)器壞了,智能做健康檢查。
結(jié)構(gòu)上的作用:
這個環(huán)境的結(jié)構(gòu)上作用就是:
1.當訪問壓力增大時,可以把負載均衡到每個服務(wù)器上。在生產(chǎn)環(huán)境中起到高并發(fā)的功能。
2.起到高可用的功能。當不做這個環(huán)境時,壞了一臺機子將全部壞掉,有這個環(huán)境就可以起到高可用的功能。
實驗環(huán)境:四臺虛擬機
client | 192.168.35.137 | ens33 |
proxy | 192.168.35.5 | ens33 |
proxy | 192.168.0.5 | ens37 |
web1 | 192.168.0.100 | ens33 |
web2 | 192.168.0.200 | ens33 |
不相同網(wǎng)段之間不通。Nginx即叫代理服務(wù)器、也叫調(diào)度器。
步驟一:部署實施后端Web服務(wù)器
1)部署后端服務(wù)器
[root@web1 ~]# echo "AAA" >/var/www/html/index.html [root@web2 ~]# echo "BBB" >/var/www/html/index.html [root@porxy ~]# systemctl start httpd
步驟二:配置nginx服務(wù)器,添加服務(wù)器池,實現(xiàn)反向代理
[root@porxy ~]# vim /usr/local/nginx/conf/nginx.conf ######添加如下信息###### #upstream 定義后端的服務(wù)器集群,集群名字任意(如webserver) #使用server定義集群中的具體服務(wù)器和端口 upstream webserver { server 192.168.0.100:80; server 192.168.0.200:80; } server { listen 8000; server_name localhost; # server_name 192.168.35.5; # rewrite /a.html /b.html; #訪問a.html跳轉(zhuǎn)到b.html # rewrite /a.html /b.html redirect; #訪問a.網(wǎng)站 的a頁面,跳轉(zhuǎn)的是a網(wǎng)站的b頁面 # rewrite ^/ http://www.tmooc.cn/ ; # ^/ 值得正>則匹配 # rewrite ^/(.*)$ http://www.tmooc.cn/$1; # .*代表任何東西,()括號代表復(fù)制,后面的$1就是第一個>括號的東西 #charset koi8-r; #access_log logs/host.access.log main; location / { #處理靜態(tài)信息 ######添加如下信息###### proxy_pass http://webserver; #當用戶訪問8000>端口時,直接定義到webserver root html; index index.html index.htm; } [root@porxy ~]/usr/local/nginx/sbin/nginx -s reload 此時在客戶端上:9驗證負載均衡)
驗證(健康檢查):
當停掉某一臺web服務(wù)器時,再次客戶端訪問,看是否輪詢,是否報錯,
步驟三:配置upstream 服務(wù)器集群池屬性
1)設(shè)置失敗次數(shù),超時時間,權(quán)重
- weight:設(shè)置服務(wù)器權(quán)重值,權(quán)重默認為1
- max_fails設(shè)置最大失敗次數(shù)
- fail_timeout:設(shè)置失敗超時時間,單位為秒,(壞了,超時時間內(nèi)不再連接)
- down: 標記服務(wù)器已關(guān)機,不參與集群調(diào)度
長時間不能恢復(fù)使用down,短時間可以使用fail——timeout,權(quán)重越高,服務(wù)器越繁忙
[root@porxy ~]vim /usr/local/nginx/conf/nginx.conf upstream webserver { server 192.168.0.100:80 weight=1 max_fails=1 fail_timeout=30 ; #意思為權(quán)重時2:1的概率 server 192.168.0.200 weight=2 max_fails=2 fail_timeout=30; } [root@porxy ~]/usr/local/nginx/sbin/nginx -s reload
步驟四:配置upstream 服務(wù)器集群的調(diào)度算法
1)相同客戶端訪問相同的服務(wù)器
假設(shè):web1、web2是一個需要登錄的動態(tài)網(wǎng)站。porxy使用輪詢算法時,登錄web1,則訪問到了web2。
需求:相同客戶端訪問相同的服務(wù)器
解決辦法:porxy采用ip_hash算法
vim /usr/local/nginx/conf/nginx.conf .... upstream webserver{ ip_hash; #通過ip_hash設(shè)置調(diào)度規(guī)則為:相同客戶端訪問相同的服務(wù)器 server 192.168.0.100:80; #使用server定義集群中的具體服務(wù)器和端口 server 192.168.0.200:80; } server { listen 80; server_name www.a.com; location / { proxy_pass http://webserver; root html; index index.html index.htm; } } ... 重啟服務(wù) /usr/local/nginx/sbin/nginx -s reload
總結(jié):案例一配置都是在http中修改,所以做的是網(wǎng)站代理。
案例三:Nginx的TCP/UDP調(diào)度器
需求
使用Nginx實現(xiàn)tcp/udp調(diào)度器功能,實現(xiàn)如下功能:
- 后端ssh服務(wù)器兩臺
- nginx編譯安裝時需要使用–with-stream,開啟ngx_stream_core_module模塊
- nginx采用輪詢的方式調(diào)用后端ssh服務(wù)器
方案:
使用4臺虛擬機,其中一臺作為nginx代理服務(wù)器,該服務(wù)器需要配置兩塊網(wǎng)卡,IP地址分別為192.168.0.100和192.168.0.200。
實驗環(huán)境:四臺虛擬機
client | 192.168.35.137 | ens33 |
proxy | 192.168.35.5 | ens33 |
proxy | 192.168.0.5 | ens37 |
web1 | 192.168.0.100 | ens33 |
web2 | 192.168.0.200 | ens33 |
nginx可以做其他服務(wù)的代理
要實現(xiàn)Nginx對TCP/UDP的調(diào)度,需要安裝以下模塊
模塊
- ngx_stream_core_module模塊
- 使用--with-stream開啟該模塊 (開啟這一功能,則可以代理一切的服務(wù))
- 注意:nginx從1.9版本才開始支持該功能
步驟一:部署支持4層tcp/ip代理的Nginx服務(wù)器
特別注意:做過之前實驗的,現(xiàn)在需要將之前的刪除后,重新安裝。
[root@proxy ~]# yum -y install gcc pcre-devel openssl-devel [root@proxy ~]# tar -xf nginx-1.20.1.tar.gz [root@proxyt ~]# cd nginx-1.20.1/ [root@localhost nginx-1.20.1]# ./configure \ > --with-http_ssl_module \ //開啟ssl加密功能 > --with-stream //開啟四層反向代理,也就是tcp/udp的服務(wù)器 [root@proxy nginx-1.20.1]# make && make install
步驟二:修改nginx配置文件,添加地址池,實現(xiàn)tcp/udp反向代理
[root@porxy ~]vim /usr/local/nginx/conf/nginx.conf events { worker_connections 1024; } stream { upstream backend{ server 192.168.0.100:22; #后端兩臺ssh服務(wù)器 server 192.168.0.200:22; } server { listen 12345; #nginx監(jiān)聽的端口號確保唯一性 proxy_pass backend; proxy_connect_timeout 1s; #連接的超時時間 proxy_timeout 3s; } } [root@proxy conf]# /usr/local/nginx/sbin/nginx
步驟三:客戶端驗證
[root@client ~]# ssh 192.168.4.5 -p 12345
總結(jié):案例二只要是tcp/udp的代理都可以做。
最后
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Nginx的location路徑與proxy_pass匹配規(guī)則說明
這篇文章主要介紹了Nginx的location路徑與proxy_pass匹配規(guī)則說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06Linux Nginx下SSL證書安裝方法及WordPress CDN配置
這篇文章主要介紹了Linux Nginx下SSL證書安裝方法及WordPress CDN配置,需要的朋友可以參考下2017-08-08Nginx常用配置以及代理轉(zhuǎn)發(fā)操作詳解
這篇文章主要給大家介紹了關(guān)于Nginx常用配置以及代理轉(zhuǎn)發(fā)的相關(guān)資料,nginx一般被用來做反向代理,將請求轉(zhuǎn)發(fā)到應(yīng)用服務(wù)器上,比如tomcat的應(yīng)用,需要的朋友可以參考下2023-09-09linux(centos5.5)/windows下nginx開啟phpinfo模式功能的配置方法分享
某站點用到結(jié)合phpinfo功能的urlrewrite,在nginx中需要在nginx.conf文件中進行配置才可支持phpinfo2013-02-02nginx禁止直接通過ip進行訪問并跳轉(zhuǎn)到自定義500頁面的操作
這篇文章主要介紹了nginx禁止直接通過ip進行訪問并跳轉(zhuǎn)到自定義500頁面的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05Nginx流量同時轉(zhuǎn)發(fā)多后端(流量鏡像分發(fā))
在需要同時將請求轉(zhuǎn)發(fā)至多個后端服務(wù)的場景中,Nginx的mirror模塊提供了流量鏡像分發(fā)的功能,本文就來介紹一下Nginx流量同時轉(zhuǎn)發(fā)多后端(流量鏡像分發(fā)),感興趣的可以了解一下2024-10-10