Nginx(動靜分離、防盜鏈、LVS)

Nginx rewrite規則

Rewrite規則含義就是某個URL重寫成特定的URL,從某種意義上說爲了美觀或者對搜索引擎友好,提升收錄量及排名等。css

 

rewrite    <regex>    <replacement>      [flag];html

關鍵字      正則        替代內容          flag標記前端

 

Rewrite規則的flag標記主要有如下幾種:  java

    1) last :    至關於Apache裏的(L)標記,表示完成rewrite;nginx

    2) break:    本條規則匹配完成後,終止匹配,再也不匹配後面的規則  正則表達式

    3) redirect: 返回302臨時重定向,瀏覽器地址會顯示跳轉後的URL地址  centos

    4) permanent:返回301永久重定向,瀏覽器地址欄會顯示跳轉後的URL地址  瀏覽器

last和break用來實現URL重寫,瀏覽器地址欄URL地址不變緩存

如下是兩個例子tomcat

a) 例如用戶訪問www.james1.com,想直接跳轉到網站下面的某個頁面,www.james1.com/new.index.html如何來實現呢?   咱們可使用Nginx Rewrite 來實現這個需求,具體以下:在server中加入以下語句便可:

rewrite     ^/$    http://www.test.com/index01.html  permanent;

rewrite    <regex>    <replacement>                 [flag];

關鍵字      正則        替代內容                    flag標記

       *表明前面0或更多個字符                +表明前面1或更多個字符

      ?表明前面0或1個字符                     ^表明字符串的開始位置

      $表明字符串結束的位置                   。爲通配符,表明任何字符

b) 例如多個域名跳轉到同一個域名,nginx rewrite規則寫法以下:

server
{
    listen 80;
    server_name www.james1.com;
    if ($host != ‘www.james1.com’ ) {
            rewrite ^/(.*)$  http://www.james1.com/$1  permanent;
}

格式:

    rewrite    <regex>    <replacement>      [flag];

    關鍵字      正則        替代內容          flag標記

說明:                                      

rewrite爲固定關鍵字,表示開始進行rewrite匹配規則、

regex部分是 ^/(.*) ,這是一個正則表達式,匹配完整的域名和後面的路徑地址

replacement部分是http://www.james1.com/$1,$1是取自regex部分( )裏的內容。匹配成功後跳轉到的URL。

flag部分 permanent表示永久301重定向標記,即跳轉到新的 http://www.james1.com/$1 地址上

 

Nginx 防盜鏈

什麼是防盜鏈

好比http://www.james1.com/download/Tokyohot.rmvb 這個視頻下載地址

加上如下配置,實現防盜鏈

server {
        listen       80;
        server_name  www.james1.com *.james.com;
        location ~* \.(rmvb|jpg|png|swf|flv)$ {
                valid_referers none blocked  www.james1.com;
                root   html/b;
                if ($invalid_referer) {
                     #rewrite ^/ http://www.james1.com/403.html;
                     return 403;
                }
        }
 
    }

第一行:rmvb|jpg|png|swf|flv表示對rmvb|jpg|png|swf|flv後綴的文件實行防盜鏈

第二行:www.james1.com表示對此域名開通白名單,好比在www.test.com的index.html引用download/Tokyohot.rmvb,無效

if{$invalid_referer}裏面內容的意思是,若是請求不是從www.james.com白名單發出來的請求,直接返回403也是能夠。

若是在服務器端用  http://127.0.0.1:8080/download/Tokyohot.rmvb,  是不能夠訪問到的。

 

或者用以下設置也能夠:

location ~* \.(rmvb|jpg|png|swf|flv)${
      if ($host != 'www.james1.com') {
         return 403;
      }
}

 

動靜分離

Nginx動靜分離是讓動態網站裏的動態網頁根據必定規則把不變的資源和常常變的資源區分開來,動靜資源作好了拆分之後,咱們就能夠根據靜態資源的特色將其作緩存操做,這就是網站靜態化處理的核心思路。原理以下圖

注意事項:

1,WEB項目開發時要注意,將靜態資源儘可能放在一個static文件夾

2,將static靜態資源文件夾放到Nginx能夠取到的位置

3,頁面要創建全局變量,方便修改路徑

4,修改nginx.conf的location, 匹配靜態資源請求

Ps:   前端引用文件js或css文件時,最好路徑前加一個公共變量,以便跨服務器時一處修改多處做用。

 

Nginx+keepalived  實現高可用

Keepalived軟件起初是專爲LVS負載均衡軟件設計的,用來管理並監控LVS集羣系統中各個服務節點的狀態,後來又加入了能夠實現高可用的VRRP (Virtual Router Redundancy Protocol ,虛擬路由器冗餘協議)功能。所以,Keepalived除了可以管理LVS軟件外,還能夠做爲其餘服務(例如:Nginx、Haproxy、MySQL等)的高可用解決方案軟件

 

如何實現故障轉移?

Keepalived高可用服務對之間的故障切換轉移,是經過 VRRP 來實現的。

在 Keepalived服務正常工做時,主 Master節點會不斷地向備節點發送(多播的方式)心跳消息,用以告訴備Backup節點本身還活着,當主 Master節點發生故障時,就沒法發送心跳消息,備節點也就所以沒法繼續檢測到來自主 Master節點的心跳了,因而調用自身的接管程序,接管主Master節點的 IP資源及服務。而當主 Master節點恢復時,備Backup節點又會釋放主節點故障時自身接管的IP資源及服務,恢復到原來的備用角色。

實驗環境配置以下:同窗們根據本身機器IP來設置

  192.168.1.110:nginx + keepalived   master 主
  192.168.1.111:nginx + keepalived   backup 從
  192.168.1.111:tomcat_8080
  192.168.1.111:tomcat_8081

虛擬ip(VIP):192.168.1.200,對外提供服務的ip,也可稱做浮動ip,各個組件之間的關係圖以下:

1,下載地址:https://pan.baidu.com/s/1G7sLL-YkZGSMu8G76yz1Rw 密碼:adbw。

2.keepalived安裝步驟:192.168.1.110:nginx + keepalived   master節點:

A./configure --prefix=/data/program/keepalived --sysconf=/etc 
   ##由於keepalive啓動時候會默認讀取/etc/keepalived/keepalived.conf
B.make && make install

3,修改/etc/keepalived/keepalived.conf配置文件信息

global_defs {             #全局配置
    notification_email {
        james@qq.com  #設置報警郵件地址,能夠設置多個,每行一個。須要開啓sendmail服務。
    }
    notification_email_from sns-lvs@gmail.com
    smtp_server smtp.hysec.com   #設置SMTP Server地址
    smtp_connection_timeout 30   #設置SMTP Server的超時時間
    router_id nginx_master       #表示運行Keepalived服務器的一個標識,惟一的
}
vrrp_script chk_http_port {
    script "/usr/local/src/check_nginx_pid.sh" #心跳執行的腳本
    interval 2                          #(檢測腳本執行的間隔,單位是秒)
    weight 2
}
vrrp_instance VI_1 {        #vrrp 實例定義部分
    state MASTER            # 指定keepalived的角色,MASTER爲主,BACKUP爲備
    interface ens33         # 當前進行vrrp通信的網絡接口卡(當前centos的網卡)
    virtual_router_id 66    # 虛擬路由編號,主從要一直
    priority 100            # 優先級,數值越大,獲取處理請求的優先級越高
    advert_int 1            # 檢查間隔,默認爲1s(vrrp組播週期秒數)
    authentication {
        auth_type PASS #設置驗證類型和密碼,MASTER和BACKUP必須使用相同的密碼才能正常通訊
        auth_pass 1111
    }
    track_script {
        chk_http_port            #(調用檢測腳本)
    }
    virtual_ipaddress {
        192.168.1.200            # 定義虛擬ip(VIP),可多設,每行一個
    }
}

以上主節點的配置, 從節點backup配置和主節點同樣,只是state要改爲backup,  priority 值要比master小點便可

4,啓動keepalived

/data/program/keepalived/sbin/keepalived

5,啓動順序:

1,啓動192.168.1.111服務器上的tomcat8080和tomcat8081
2,啓動Master 192.168.1.110的Keepalived節點,sh腳本也會被執行並自動啓動Nginx
3,啓動Backup 192.168.1.111的Keepalived節點,sh腳本也會被執行並自動啓動Nginx

注:不須要手動啓動Nginx

6,查看keepalived日誌: tail -f  /var/log/messages

7,KEEPLIVED主從故障測試

1,兩組Keepalied+Nginx應用都啓動成功後,使用VIP以負載均衡方式訪問兩個Tomcat

2,中止192.168.1.110主節點的Nginx應用,觀察Nginx狀態,並訪問Tomcat;

3,中止192.168.1.110主節點的Keepalived應用,觀察日誌/var/log/messages,並訪問tomcat

4,觀察1.111從節點的日誌,角色變動狀況。

 

HTTPS與Nginx

HTTP協議以明文方式發送內容,不提供任何方式的數據加密,若是攻擊者截取了Web瀏覽器和網站服務器之間的傳輸報文,就能夠直接讀懂其中的信息,所以HTTP協議不適合傳輸一些敏感信息,好比信用卡號、密碼等。

爲了解決HTTP協議的這一缺陷,須要使用另外一種協議:安全套接字層超文本傳輸協議HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer)。爲了數據傳輸的安全,HTTPS在HTTP的基礎上加入了SSL協議,SSL依靠證書來驗證服務器的身份,併爲瀏覽器和服務器之間的通訊加密

 

Nginx 與 HTTPS操做

1.生成證書與私鑰

Ø 建立服務器私鑰

    openssl genrsa -des3 -out server.key 1024

Ø 建立簽名請求的證書(CSR)

    openssl req -new -key server.key -out server.csr

Ø 加載SSL支持的Nginx並使用私鑰時去除口令:

    cp server.key server.key.bak

    openssl rsa -in server.key.bak -out server.key

Ø 自動簽發證書:

    openssl x509 -req -days 10240 -in server.csr -signkey server.key -out server.crt

2.Nginx配置修改

把證書和私鑰加入到nginx配置裏

 server {
        listen       443 ssl;
        server_name   www.james1.com localhost;
        ssl_certificate      server.crt;
        ssl_certificate_key  server.key;
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
}

3.重啓nginx

/usr/local/nginx/sbin/nginx -s reload

相關文章
相關標籤/搜索