當(dāng)前位置:首頁 > 公眾號精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]一、NginxRewrite規(guī)則1.Nginxrewrite規(guī)則Rewrite規(guī)則含義就是某個(gè)URL重寫成特定的URL(類似于Redirect),從某種意義上說為了美觀或者對搜索引擎友好,提高收錄量及排名等。語法:rewrite[flag]關(guān)鍵字正則替代內(nèi)容flag標(biāo)記?Rewr...



一、Nginx Rewrite 規(guī)則

1. Nginx rewrite規(guī)則

Rewrite規(guī)則含義就是某個(gè)URL重寫成特定的URL(類似于Redirect),從某種意義上說為了美觀或者對搜索引擎友好,提高收錄量及排名等。語法:
rewrite[flag]
關(guān)鍵字正則替代內(nèi)容flag標(biāo)記?

Rewrite規(guī)則的flag標(biāo)記主要有以下幾種:
1) last :相當(dāng)于Apache里的(L)標(biāo)記,表示完成rewrite;
2) break:本條規(guī)則匹配完成后,終止匹配,不再匹配后面的規(guī)則
3) redirect:返回302臨時(shí)重定向,瀏覽器地址會(huì)顯示跳轉(zhuǎn)后的URL地址
4) permanent:返回301永久重定向,瀏覽器地址欄會(huì)顯示跳轉(zhuǎn)后的URL地址
last和break用來實(shí)現(xiàn)URL重寫,瀏覽器地址欄URL地址不變

2. Nginx rewrite例子

a) 例如用戶訪問www.dbspread.com,想直接跳轉(zhuǎn)到網(wǎng)站下面的某個(gè)頁面,www.dbspread.com/new.index.html如何來實(shí)現(xiàn)呢?? ?我們可以使用Nginx Rewrite 來實(shí)現(xiàn)這個(gè)需求,具體如下:在server中加入如下語句即可:
server {listen 80; #監(jiān)聽80端口server_name www.dbspread.com; #域名#rewrite規(guī)則index index.jsp index.html index.htm;root /usr/local/nginx/html; #定義服務(wù)器的默認(rèn)網(wǎng)站根目錄位置
???#監(jiān)聽完成以后通過斜桿(/)攔截請求轉(zhuǎn)發(fā)到后端的tomcat服務(wù)器location / {#如果后端的服務(wù)器返回502、504、執(zhí)行超時(shí)等錯(cuò)誤,自動(dòng)將請求轉(zhuǎn)發(fā)到upstream負(fù)載均衡池中的另一臺服務(wù)器,實(shí)現(xiàn)故障轉(zhuǎn)移。proxy_next_upstream http_502 http_504 error timeout invalid_header;proxy_set_header Host $host; #獲取客戶端的主機(jī)名存到變量Host里面,從而讓tomcat取到客戶端機(jī)器的信息proxy_set_header X-Real-IP $remote_addr; #獲取客戶端的主機(jī)名存到變量X-Real-IP里面,從而讓tomcat取到客戶端機(jī)器的信息proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;rewrite ^/$ http://www.dbspread.com/new.index.html permanent;proxy_pass http://web1; #跳轉(zhuǎn)到對應(yīng)的應(yīng)用web1 }}
效果圖如下:

Nginx keepalived?實(shí)現(xiàn)高可用,防盜鏈及動(dòng)靜分離配置

rewrite?????^/$????http://www.dbspread.com/new.index.html??permanent;對應(yīng)如下語法:
rewrite [flag];關(guān)鍵字??????正則????????替代內(nèi)容??????????????????????flag標(biāo)記正則表達(dá)式說明:*代表前面0或更多個(gè)字符 代表前面1或更多個(gè)字符
?代表前面0或1個(gè)字符
^代表字符串的開始位置
$代表字符串結(jié)束的位置 。為通配符,代表任何字符
b)例如多個(gè)域名跳轉(zhuǎn)到同一個(gè)域名,nginx rewrite規(guī)則寫法如下:
server {listen 80; #監(jiān)聽80端口server_name www.dbspread.com; #域名#rewrite規(guī)則index index.jsp index.html index.htm;root /usr/local/nginx/html; #定義服務(wù)器的默認(rèn)網(wǎng)站根目錄位置
if ($host != 'www.dbspread.com' ){ rewrite ^/(.*)$ http://www.dbspread.com/$1 permanent; }}格式:
rewrite [flag];
關(guān)鍵字? ? ?正則? ? ? ? ? 替代內(nèi)容 flag標(biāo)記
說明:
rewrite為固定關(guān)鍵字,表示開始進(jìn)行rewrite匹配規(guī)則、
regex部分是 ^/(.*) ,這是一個(gè)正則表達(dá)式,匹配完整的域名和后面的路徑地址
replacement部分是http://www.dbspread.com/$1,$1是取自regex部分( )里的內(nèi)容。匹配成功后跳轉(zhuǎn)到的URL。
flag部分 permanent表示永久301重定向標(biāo)記,即跳轉(zhuǎn)到新的 http://www.dbspread.com/$1 地址上

二、Nginx 防盜鏈

1.?什么是防盜鏈

比如http://www.dbspread.com/download/av123.rmvb 這個(gè)視頻下載地址被其他網(wǎng)站引用,比如在www.test.com的index.html引用download/av123.rmvb就叫盜鏈,我們要禁止這種引用就叫做防盜鏈

2. 怎么實(shí)現(xiàn)防盜鏈

在nginx的nginx.conf的server里面配置如下代碼

server {listen 80;server_name www.dbspread.com *.dbspread.com;location ~* \.(rmvb|jpg|png|swf|flv)$ { #rmvb|jpg|png|swf|flv表示對rmvb|jpg|png|swf|flv后綴的文件實(shí)行防盜鏈valid_referers none blocked www.dbspread.com; #表示對www.dbspread.com此域名開通白名單,比如在www.test.com的index.html引用download/av123.rmvb,無效root html/b;if ($invalid_referer) { #如果請求不是從www.dbspread.com白名單發(fā)出來的請求,直接重定向到403.html這個(gè)頁面或者返回403 #rewrite ^/ http://www.dbspread.com/403.html;return 403; } }
}

三、Nginx 動(dòng)靜分離

1. 動(dòng)靜分離是什么

Nginx動(dòng)靜分離是讓動(dòng)態(tài)網(wǎng)站里的動(dòng)態(tài)網(wǎng)頁根據(jù)一定規(guī)則把不變的資源和經(jīng)常變的資源區(qū)分開來,動(dòng)靜資源做好了拆分以后,我們就可以根據(jù)靜態(tài)資源的特點(diǎn)將其做緩存操作,這就是網(wǎng)站靜態(tài)化處理的核心思路。

2. 動(dòng)靜分離原理圖

Nginx keepalived?實(shí)現(xiàn)高可用,防盜鏈及動(dòng)靜分離配置

3. Nginx動(dòng)靜分離應(yīng)該注意的地方

1). WEB項(xiàng)目開發(fā)時(shí)要注意,將靜態(tài)資源盡量放在一個(gè)static文件夾
2). 將static靜態(tài)資源文件夾放到Nginx可以取到的位置
3). 頁面要建立全局變量路徑,方便修改路徑
4). 修改nginx.conf的location, 匹配靜態(tài)資源請求

4. Nginx動(dòng)靜分離步驟

4.1 準(zhǔn)備一個(gè)靜態(tài)資源button.css

body {margin: 10px 20px;text-align: center;font-family: Arial, sans-serif;background-color: red;}

4.2? 在/var/local下新建一個(gè)static文件夾用來存放靜態(tài)資源button.css

Nginx keepalived?實(shí)現(xiàn)高可用,防盜鏈及動(dòng)靜分離配置

4.3 在tomcat-8080/webapps/ROOT下的index.html里面引入button.css

  • test
    歡迎來到8080端口tomcat

    ?4.4 在nginx的nginx.conf中server節(jié)點(diǎn)新增靜態(tài)資源分離的配置

    server {listen 80; #監(jiān)聽80端口server_name www.dbspread.com; #域名#rewrite規(guī)則index index.jsp index.html index.htm;root /usr/local/nginx/html; #定義服務(wù)器的默認(rèn)網(wǎng)站根目錄位置#重定向if ($host != 'www.dbspread.com' ){ rewrite ^/(.*)$ http://www.dbspread.com/$1 permanent; }
    #防盜鏈location ~* \.(rmvb|jpg|png|swf|flv)$ { #rmvb|jpg|png|swf|flv表示對rmvb|jpg|png|swf|flv后綴的文件實(shí)行防盜鏈valid_referers none blocked www.dbspread.com; #表示對www.dbspread.com此域名開通白名單,比如在www.test.com的index.html引用download/av123.rmvb,無效root html/b;if ($invalid_referer) { #如果請求不是從www.dbspread.com白名單發(fā)出來的請求,直接重定向到403.html這個(gè)頁面或者返回403 #rewrite ^/ http://www.dbspread.com/403.html;return 403; } }
    #監(jiān)聽完成以后通過斜桿(/)攔截請求轉(zhuǎn)發(fā)到后端的tomcat服務(wù)器location / {#如果后端的服務(wù)器返回502、504、執(zhí)行超時(shí)等錯(cuò)誤,自動(dòng)將請求轉(zhuǎn)發(fā)到upstream負(fù)載均衡池中的另一臺服務(wù)器,實(shí)現(xiàn)故障轉(zhuǎn)移。proxy_next_upstream http_502 http_504 error timeout invalid_header;proxy_set_header Host $host; #獲取客戶端的主機(jī)名存到變量Host里面,從而讓tomcat取到客戶端機(jī)器的信息proxy_set_header X-Real-IP $remote_addr; #獲取客戶端的主機(jī)名存到變量X-Real-IP里面,從而讓tomcat取到客戶端機(jī)器的信息proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#rewrite ^/$ http://www.dbspread.com/new.index.html permanent;#用戶訪問www.dbspread.com,想直接跳轉(zhuǎn)到網(wǎng)站下面的某個(gè)頁面:www.dbspread.com/new.index.htmlproxy_pass http://web1; #跳轉(zhuǎn)到對應(yīng)的應(yīng)用web1 }
    # location ~ .*\.(php|jsp|cgi|shtml)?$ #動(dòng)態(tài)分離 ~匹配 以.*結(jié)尾(以PHP JSP結(jié)尾走這段)# {# proxy_set_header Host $host;# proxy_set_header X-Real-IP $remote_addr;# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# proxy_pass http://jvm_web2;# }
    #靜態(tài)分離 ~匹配 以.*結(jié)尾(以html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css結(jié)尾走這段),當(dāng)然不是越久越好,如果有10000個(gè)用戶在線,都保存幾個(gè)月,系統(tǒng)托跨location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {root /var/local/static; #靜態(tài)資源存放在nginx的安裝機(jī)器上#proxy_pass http://www.static.com; #靜態(tài)資源也可存放在遠(yuǎn)程服務(wù)器上expires 30d; #30天之內(nèi)只要訪問過一次就從緩存拿 }
    #日志級別有[debug|info|notice|warn|error|crit] error_log 級別分為 debug, info, notice, warn, error, crit 默認(rèn)為crit, 生產(chǎn)環(huán)境用error #crit 記錄的日志最少,而debug記錄的日志最多access_log /usr/local/logs/web2/access.log main;error_log /usr/local/logs/web2/error.log crit;
    }

    4.5 訪問頁面查看效果

    Nginx keepalived?實(shí)現(xiàn)高可用,防盜鏈及動(dòng)靜分離配置

    四、Nginx keepalived? 實(shí)現(xiàn)高可用

    1.?keepalived是什么

    Keepalived軟件起初是專為LVS負(fù)載均衡軟件設(shè)計(jì)的,用來管理并監(jiān)控LVS集群系統(tǒng)中各個(gè)服務(wù)節(jié)點(diǎn)的狀態(tài),后來又加入了可以實(shí)現(xiàn)高可用的VRRP (Virtual Router Redundancy Protocol ,虛擬路由器冗余協(xié)議)功能。因此,Keepalived除了能夠管理LVS軟件外,還可以作為其他服務(wù)(例如:Nginx、Haproxy、MySQL等)的高可用解決方案軟件

    2.?keepalived主要功能

    管理LVS負(fù)載均衡軟件
    實(shí)現(xiàn)LVS集群節(jié)點(diǎn)的健康檢查
    作為系統(tǒng)網(wǎng)絡(luò)服務(wù)的高可用性(failover)

    3.?keepalived故障轉(zhuǎn)移

    Keepalived高可用服務(wù)之間的故障切換轉(zhuǎn)移,是通過 VRRP 來實(shí)現(xiàn)的。
    在 Keepalived服務(wù)正常工作時(shí),主 Master節(jié)點(diǎn)會(huì)不斷地向備節(jié)點(diǎn)發(fā)送(多播的方式)心跳消息,用以告訴備Backup節(jié)點(diǎn)自己還活著,當(dāng)主 Master節(jié)點(diǎn)發(fā)生故障時(shí),就無法發(fā)送心跳消息,備節(jié)點(diǎn)也就因此無法繼續(xù)檢測到來自主 Master節(jié)點(diǎn)的心跳了,于是調(diào)用自身的接管程序,接管主Master節(jié)點(diǎn)的 IP資源及服務(wù)。而當(dāng)主 Master節(jié)點(diǎn)恢復(fù)時(shí),備Backup節(jié)點(diǎn)又會(huì)釋放主節(jié)點(diǎn)故障時(shí)自身接管的IP資源及服務(wù),恢復(fù)到原來的備用角色。
    說明:keepalived的主從切換和redis的主從切換是不一樣的,keepalived的主節(jié)點(diǎn)掛了以后,從節(jié)點(diǎn)變?yōu)橹鞴?jié)點(diǎn),之前的主節(jié)點(diǎn)恢復(fù)以后繼續(xù)做主節(jié)點(diǎn)。redis的主節(jié)點(diǎn)掛了以后,重新恢復(fù)以后變?yōu)閺墓?jié)點(diǎn)

    4.?keepalived高可用架構(gòu)示意圖

    Nginx keepalived?實(shí)現(xiàn)高可用,防盜鏈及動(dòng)靜分離配置

    說明:

    虛擬ip(VIP):192.168.152.200,對外提供服務(wù)的ip,也可稱作浮動(dòng)ip
    192.168.152.130:nginx keepalived master 主
    192.168.152.129:nginx keepalived backup 從
    192.168.152.129:tomcat-8080
    192.168.152.129:tomcat-8081

    5.?keepalived安裝

    環(huán)境準(zhǔn)備:centos6、jdk虛擬ip(VIP):192.168.152.200,對外提供服務(wù)的ip,也可稱作浮動(dòng)ip
    192.168.152.130:nginx keepalived master 主
    192.168.152.129:nginx keepalived backup 從
    192.168.152.129:tomcat-8080
    192.168.152.129:tomcat-8081
    5.1 安裝keepalived的步驟:
    注:192.168.152.129(keepalived從節(jié)點(diǎn)) 與 192.168.152.130(keepalived主節(jié)點(diǎn))先安裝好nginx keepalived下載壓縮包:
    wget www.keepalived.org/software/keepalived-1.3.5.tar.gz解壓縮:
    tar -zxvf keepalived-1.3.5.tar.gz進(jìn)入解壓縮以后的文件目錄:
    cd keepalived-1.3.5編譯安裝:
    ./configure --prefix=/usr/local/keepalived
    系統(tǒng)提示警告 *** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.
    yum -y install libnl libnl-devel
    再次執(zhí)行
    ./configure?--prefix=/usr/local/keepalived系統(tǒng)提示錯(cuò)誤 configure: error: libnfnetlink headers missing
    yum?install?-y?libnfnetlink-devel再次執(zhí)行
    ./configure?--prefix=/usr/local/keepalived make
  • 本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
    關(guān)閉
    關(guān)閉