整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          JavaScript學(xué)習(xí)筆記(二十三)-服務(wù)器PHP

          HP

          • PHP 一門(mén)后端語(yǔ)言
          • 為什么要學(xué)習(xí)一個(gè)后端語(yǔ)言呢?
            • 目前市場(chǎng)上的需求,要求前端人員掌握一個(gè)后端語(yǔ)言
            • 方便和后端開(kāi)發(fā)人員進(jìn)行交互

          基本組織架構(gòu)

          • 在講后端語(yǔ)言之前,我們簡(jiǎn)單的了解一下我們基本的組織架構(gòu)
          • 我們是一個(gè) 前端開(kāi)發(fā)工程師
          • 還有一個(gè)工作叫做 后端開(kāi)發(fā)工程師
          • 我們一個(gè)網(wǎng)站的組織架構(gòu)基本上由下面的步驟完成
            • 用戶 => 前端 => 后端 => 數(shù)據(jù)庫(kù)


          • 整個(gè)過(guò)程中
            • 用戶向前端人員要一個(gè)網(wǎng)頁(yè)
            • 前端人員準(zhǔn)備一個(gè)網(wǎng)頁(yè)給用戶,但是網(wǎng)頁(yè)中的數(shù)據(jù)是找后端人員要的
            • 后端人員接受到前端人員要數(shù)據(jù)以后,去數(shù)據(jù)庫(kù)里面找到對(duì)應(yīng)的數(shù)據(jù),給到前端人員
            • 前端人員拿到數(shù)據(jù)以后渲染在頁(yè)面上
            • 最后把這個(gè)頁(yè)面給到用戶看


          • 比如: 我們?yōu)g覽一個(gè)新聞網(wǎng)站
            • 用戶輸入網(wǎng)址
            • 前端人員就要把對(duì)應(yīng)的頁(yè)面給到用戶,在頁(yè)面打開(kāi)的過(guò)程中,向后端人員索要新聞信息
            • 后端人員接收到前端人員索要新聞信息以后,就去數(shù)據(jù)庫(kù)中找到對(duì)應(yīng)的新聞信息數(shù)據(jù)給前端人員
            • 前端人員接收到后端人員給的新聞信息以后,使用我們的辦法吧新聞信息數(shù)據(jù)渲染在頁(yè)面上
            • 頁(yè)面就打開(kāi)了,用戶就可以看到一個(gè)新聞網(wǎng)站了


          • 比如: 用戶登陸一個(gè)網(wǎng)站
            • 當(dāng)用戶書(shū)寫(xiě)完表單內(nèi)容以后,點(diǎn)擊提交按鈕的時(shí)候
            • 前端人員拿到用戶填寫(xiě)的內(nèi)容,把數(shù)據(jù)整合好傳送給后端人員
            • 后端人員接收到數(shù)據(jù)以后,去數(shù)據(jù)庫(kù)中進(jìn)行比對(duì),看看有沒(méi)有對(duì)應(yīng)的數(shù)據(jù)
            • 然后告訴前端人員,你給我的用戶名和密碼是否正確
            • 前端吧信息反饋給客戶看到
              • 如果正確就是跳轉(zhuǎn)頁(yè)面
              • 如果不正確提示用戶名或者密碼有問(wèn)題

          服務(wù)器的簡(jiǎn)單理解

          • 我們不可能把數(shù)據(jù)庫(kù)丟在用戶的電腦上
          • 一個(gè)是太大,一個(gè)是不安全
          • 所以我們要把數(shù)據(jù)庫(kù)放在網(wǎng)絡(luò)的另一端(遠(yuǎn)程)
          • 所以當(dāng)前端人員向后端人員索要數(shù)據(jù)的時(shí)候需要網(wǎng)絡(luò)
          • 我們也不可能把頁(yè)面也放在用戶的電腦上
          • 所以用戶也是需要網(wǎng)絡(luò)來(lái)向前端人員所有頁(yè)面

          服務(wù)器的認(rèn)識(shí)

          • 我們現(xiàn)在的市場(chǎng)上有一些常見(jiàn)的服務(wù)器可以承載內(nèi)容
          • 我們目前比較常用的就是 Apache 和 Tomcat
          • 我們今天要學(xué)習(xí)的就是 Apache 服務(wù)器
          • 是一個(gè)和 php 語(yǔ)言合作比較緊密的一個(gè)服務(wù)器

          到底什么是服務(wù)器

          • 其實(shí)說(shuō)白了,服務(wù)器就是一個(gè)電腦,當(dāng)他跑起來(lái)一些程序的時(shí)候,就變成了一個(gè)服務(wù)器
          • 只不過(guò)會(huì)跑一些特殊的程序,需要一些特殊的環(huán)境
          • 換句話說(shuō),我們自己的電腦,跑一些特殊的程序的時(shí)候,也可以當(dāng)作一個(gè)小型的服務(wù)器來(lái)用
            • 只不過(guò)計(jì)算能力/存儲(chǔ)能力/轉(zhuǎn)存能力沒(méi)有專業(yè)的服務(wù)器電腦厲害而已

          服務(wù)器是怎么訪問(wèn)的呢

          • 涉及到我們的 url 地址中的一些內(nèi)容了
          • 比如我們的經(jīng)常訪問(wèn)的 www.baidu.com
          • 這個(gè)里面就包含很多的內(nèi)容,我們看到的這個(gè)只是一個(gè)省略后的內(nèi)容
          • 是瀏覽器幫我們省略掉了一些內(nèi)容
          • 全部的地址應(yīng)該是 https://www.baidu.com:443
          • 發(fā)現(xiàn)多了兩個(gè)東西 https:// 和 :443
          • 其實(shí)一個(gè)簡(jiǎn)單的 url 地址是由三部分組成的
            • 傳輸協(xié)議
            • 域名
            • 端口號(hào)

          傳輸協(xié)議

          • 我們常見(jiàn)的傳輸協(xié)議是 http 和 https
          • 他們是限制用戶和服務(wù)器之間交流傳輸數(shù)據(jù)的方式和規(guī)則
          • 也是我們前端和后端人員交互的規(guī)則
          • 規(guī)則
            • 建立連接通道
            • 相互通信
            • 關(guān)閉連接通道
          • 只不過(guò) http 是一種常見(jiàn)協(xié)議,不是很安全
          • https 是一種加密傳輸協(xié)議

          域名

          • 之前我們說(shuō)過(guò),服務(wù)器就是一個(gè)在 網(wǎng)絡(luò)那一頭 的一個(gè)電腦
          • 以前,沒(méi)有域名的概念,大家都是使用 IP 地址來(lái)訪問(wèn)
          • 也就是 網(wǎng)絡(luò)那一頭 的那個(gè)電腦的 IP
          • 都是一堆數(shù)字,不方便記憶
          • 后來(lái)就有了一個(gè) 萬(wàn)維網(wǎng),他把每一個(gè) IP 地址配套了一個(gè)英文的名字
          • 方便用戶記憶
          • 所以說(shuō),域名就代表著 網(wǎng)絡(luò)那一頭 那個(gè)電腦的 IP 地址
          • 其實(shí)也就是我們要訪問(wèn)哪一個(gè)服務(wù)器

          端口號(hào)

          • 人家的服務(wù)器電腦也是有很多的文件夾的
          • 不同的文件夾里面存儲(chǔ)著不同的內(nèi)容
          • 可能有個(gè) a 文件夾,里面存儲(chǔ)的是首頁(yè)
          • 可能有個(gè) b 文件夾,里面存儲(chǔ)的是一些數(shù)據(jù)
          • 所以說(shuō),你光找到服務(wù)器電腦還不行,還得找對(duì)文件夾才可以
          • 大家都把文件夾編上號(hào)存儲(chǔ)了 0 ~ 255 一共 256 個(gè)
          • 每個(gè)文件夾里面還有對(duì)應(yīng)的小文件夾 0 ~ 255 一個(gè) 256 個(gè)
          • 那么一共就有 256 * 256 個(gè)文件夾,也就是從 0 ~ 65535
          • 所以我們的端口號(hào)就有 65536 個(gè),分別對(duì)應(yīng)著 0 ~ 65535
          • 大家都把 80 端口號(hào)作為一個(gè)網(wǎng)站的默認(rèn)端口號(hào)
          • http 協(xié)議默認(rèn)是 80 端口號(hào)
          • https 協(xié)議默認(rèn)是 443 端口號(hào)

          百度

          • 到現(xiàn)在,我們?cè)诳窗俣鹊耐暾?url 地址
          • https://www.baidu.com:443
            • 以一種加密傳輸協(xié)議來(lái)通訊
            • 訪問(wèn)的是網(wǎng)絡(luò)上 IP 的值為 119.75.217.109 的那個(gè)電腦
            • 訪問(wèn)的是第 443 號(hào)文件夾
          • 這個(gè)文件夾里面存儲(chǔ)著一個(gè)百度的頁(yè)面
          • 我們就能看到這個(gè)頁(yè)面了

          PHP 基礎(chǔ)語(yǔ)法

          • 我們一定要知道,php 是另一個(gè)語(yǔ)言了,不再是我們的 html / javascript 了
          • 一個(gè)別的語(yǔ)言就有人家語(yǔ)言的規(guī)則

          php文件

          • 我們?cè)趯?xiě) javascript 的時(shí)候,是一個(gè) .js 文件
          • 我們?cè)趯?xiě) html 的時(shí)候,是一個(gè) .html 文件
          • php 的代碼寫(xiě)在一個(gè) .php 后綴的文件中

          php文件的書(shū)寫(xiě)

          • 所有的 php 代碼都要寫(xiě)在一個(gè) php 的范圍內(nèi)
          • 要求以 <?php 開(kāi)頭
          • 要求以 ?> 結(jié)尾
          <?php
           # php 的代碼寫(xiě)在這里
          ?>
          

          簡(jiǎn)單了解 php 的語(yǔ)法

          • 每個(gè)語(yǔ)言都會(huì)有自己的語(yǔ)法
          • 接下來(lái)我們就簡(jiǎn)單了解一下 php 的語(yǔ)法規(guī)則
          • php 里面有一個(gè)必須要注意的點(diǎn) 每一個(gè)語(yǔ)句后面都要有 ;

          定義變量

          • 在 php 中沒(méi)有 var 關(guān)鍵字給我們定義變量
          • 直接使用 $ 來(lái)確定一個(gè)變量
          <?php
           # 下面就是一個(gè)定義了一個(gè)變量,并且賦值為 100
           # 變量名就是 $num
           $num = 100;
           $boo = true;
           # 下面是一個(gè)字符串
           $str = "你好 php";
          ?>
          

          條件語(yǔ)句

          • 在 php 中使用條件語(yǔ)句和 js 基本一致
          <?php
            
          $boo = true;
          
          if ($boo) {
            echo '你好,歡迎觀臨!';
          } else {
            echo '您還沒(méi)有登陸';
          }  
            
          ?>
          

          循環(huán)語(yǔ)句

          • 在 php 中循環(huán)語(yǔ)句和 js 基本一致
          <?php
          
          $num = 5;
            
          for ($i = 0; $i < $num; $i++) {
            echo 'hello php';
          }
            
          ?>
          

          字符串拼接

          • 在 php 中,字符串拼接不再是使用 + 進(jìn)行拼接了,而是使用 . 進(jìn)行拼接
          $str = 'hello ';
          $str2 = 'world';
          $str3 = $str . $str2;
          echo $str3;
          # 得到的就是 hello world

          數(shù)組

          • 在 php 中的數(shù)組和 js 中特別不一樣

          認(rèn)WordPress頁(yè)面不能實(shí)現(xiàn)偽靜態(tài)鏈接,比如:https://www.themebest.com/about.html,手動(dòng)在鏈接中添加“.html”,會(huì)自動(dòng)轉(zhuǎn)碼為"-html",但萬(wàn)能的WordPress,你能想到的功能都會(huì)有相應(yīng)的插件幫你實(shí)現(xiàn)。

          既然用插件可以實(shí)現(xiàn),直接將插件中的代碼集成到主題中同樣也可以,代碼提取自.html on PAGES插件,將下面代碼添加主題functions.php中即可。

          // 頁(yè)面鏈接添加html后綴
          add_action('init', 'html_page_permalink', -1);
          function html_page_permalink() {
           global $wp_rewrite;
           if ( !strpos($wp_rewrite->get_page_permastruct(), '.html')){
           $wp_rewrite->page_structure = $wp_rewrite->page_structure . '.html';
           }
          }
          

          添加后,需要到固定鏈接設(shè)置頁(yè)面,重新保存一下固定鏈接設(shè)置,否則不會(huì)生效。此代碼適合偽靜態(tài)的固定鏈接形式使用,比如:

          /%postname%.html

          /%post_id%.html

          另外,如果同時(shí)使用了“給WordPress分類目錄和頁(yè)面添加斜杠”一文中的代碼,還需要將該文中的代碼修改為:

          // 添加斜杠
          function nice_trailingslashit($string, $type_of_url) {
           if ( $type_of_url != 'single' && $type_of_url != 'page' )
           $string = trailingslashit($string);
           return $string;
          }
          add_filter('user_trailingslashit', 'nice_trailingslashit', 10, 2);
          

          排除頁(yè)面文件,否則頁(yè)面鏈接.html后面也會(huì)自動(dòng)加上斜杠。

          者:小不點(diǎn)啊

          來(lái)源:www.cnblogs.com/leeSmall/p/9356535.html

          一、Nginx Rewrite 規(guī)則


          1. Nginx rewrite規(guī)則


          Rewrite規(guī)則含義就是某個(gè)URL重寫(xiě)成特定的URL(類似于Redirect),從某種意義上說(shuō)為了美觀或者對(duì)搜索引擎友好,提高收錄量及排名等。


          語(yǔ)法:


          rewrite <regex> <replacement> [flag]
          關(guān)鍵字 || 正則 || 替代內(nèi)容 || flag標(biāo)記


          Rewrite規(guī)則的flag標(biāo)記主要有以下幾種:


          • last :相當(dāng)于Apache里的(L)標(biāo)記,表示完成rewrite;
          • break:本條規(guī)則匹配完成后,終止匹配,不再匹配后面的規(guī)則
          • redirect:返回302臨時(shí)重定向,瀏覽器地址會(huì)顯示跳轉(zhuǎn)后的URL地址
          • permanent:返回301永久重定向,瀏覽器地址欄會(huì)顯示跳轉(zhuǎn)后的URL地址


          last和break用來(lái)實(shí)現(xiàn)URL重寫(xiě),瀏覽器地址欄URL地址不變


          2. Nginx rewrite例子


          a) 例如用戶訪問(wèn)www.dbspread.com,想直接跳轉(zhuǎn)到網(wǎng)站下面的某個(gè)頁(yè)面,www.dbspread.com/new.index.html如何來(lái)實(shí)現(xiàn)呢?我們可以使用Nginx Rewrite 來(lái)實(shí)現(xiàn)這個(gè)需求,具體如下:在server中加入如下語(yǔ)句即可:


          效果圖如下:

                          rewrite     ^/$    http://www.dbspread.com/new.index.html  permanent;
          對(duì)應(yīng)如下語(yǔ)法:
                          rewrite    <regex>    <replacement>                 [flag];
                          關(guān)鍵字      正則        替代內(nèi)容                    flag標(biāo)記

          正則表達(dá)式說(shuō)明:

          *代表前面0或更多個(gè)字符                +代表前面1或更多個(gè)字符
          ?代表前面0或1個(gè)字符                  ^代表字符串的開(kāi)始位置
          $代表字符串結(jié)束的位置                 。為通配符,代表任何字符

          b)例如多個(gè)域名跳轉(zhuǎn)到同一個(gè)域名,nginx rewrite規(guī)則寫(xiě)法如下:


          格式:

          rewrite <regex> <replacement> [flag];
          關(guān)鍵字 || 正則 || 替代內(nèi)容 || flag標(biāo)記


          說(shuō)明:


          • rewrite為固定關(guān)鍵字,表示開(kāi)始進(jìn)行rewrite匹配規(guī)則、
          • regex部分是 ^/(.*) ,這是一個(gè)正則表達(dá)式,匹配完整的域名和后面的路徑地址
          • replacement部分是http://www.dbspread.com/,是取自regex部分( )里的內(nèi)容。匹配成功后跳轉(zhuǎn)到的URL。
          • flag部分 permanent表示永久301重定向標(biāo)記,即跳轉(zhuǎn)到新的 http://www.dbspread.com/ 地址上



          二、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里面配置如下代碼


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

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

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

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

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

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

          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文件夾用來(lái)存放靜態(tài)資源button.css

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


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


          對(duì)于Nginx基礎(chǔ)配置,推薦之前的:后端實(shí)踐:Nginx日志配置(超詳細(xì))

          4.5 訪問(wèn)頁(yè)面查看效果

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

          1. keepalived是什么

          Keepalived軟件起初是專為L(zhǎng)VS負(fù)載均衡軟件設(shè)計(jì)的,用來(lái)管理并監(jiān)控LVS集群系統(tǒng)中各個(gè)服務(wù)節(jié)點(diǎn)的狀態(tài),后來(lá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)移,是通過(guò) VRRP 來(lái)實(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í),就無(wú)法發(fā)送心跳消息,備節(jié)點(diǎn)也就因此無(wú)法繼續(xù)檢測(cè)到來(lái)自主 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ù)到原來(lái)的備用角色。

          說(shuō)明: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)示意圖

          說(shuō)明:

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

          5. keepalived安裝

          環(huán)境準(zhǔn)備:

          centos6、jdk

          虛擬ip(VIP):192.168.152.200,對(duì)外提供服務(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

          nginx和tomcat的環(huán)境準(zhǔn)備請(qǐng)查看我的前一篇關(guān)于nginx的文章

          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 missingyum install -y libnfnetlink-devel再次執(zhí)行./configure --prefix=/usr/local/keepalived

          make && make install

          到此keepalived安裝完成,但是接下來(lái)還有最關(guān)鍵的一步,如果這一步?jīng)]有做后面啟動(dòng)keepalived的時(shí)候會(huì)報(bào)找不到配置文件的錯(cuò)誤

          Configuration file '/etc/keepalived/keepalived.conf' is not a regular non-executable file

          安裝完成后,進(jìn)入安裝目錄的etc目錄下,將keepalived相應(yīng)的配置文件拷貝到系統(tǒng)相應(yīng)的目錄當(dāng)中。keepalived啟動(dòng)時(shí)會(huì)從/etc/keepalived目錄下查找keepalived.conf配置文件

          mkdir /etc/keepalived

          cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived

          5.2 修改keepalived主節(jié)點(diǎn)192.168.152.130的/etc/keepalived/keepalived.conf配置文件


          5.3 修改keepalived從節(jié)點(diǎn)192.168.152.129的/etc/keepalived/keepalived.conf配置文件

          5.4 檢查nginx是否啟動(dòng)的shell腳本


          /usr/local/src/check_nginx_pid.sh

          #!/bin/bash
          #檢測(cè)nginx是否啟動(dòng)了
          A=`ps -C nginx --no-header |wc -l`        
          if [ $A -eq 0 ];then    #如果nginx沒(méi)有啟動(dòng)就啟動(dòng)nginx                        
                /usr/local/nginx/sbin/nginx                #重啟nginx
                if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then    #nginx重啟失敗,則停掉keepalived服務(wù),進(jìn)行VIP轉(zhuǎn)移
                        killall keepalived                    
                fi
          fi


          5.5 192.168.152.130(keepalived主節(jié)點(diǎn))和 192.168.152.129(keepalived從節(jié)點(diǎn))的nginx的配置文件nginx.conf

          user root root; #使用什么用戶啟動(dòng)NGINX 在運(yùn)行時(shí)使用哪個(gè)用戶哪個(gè)組
          worker_processes 4; #啟動(dòng)進(jìn)程數(shù),一般是1或8個(gè),根據(jù)你的電腦CPU數(shù),一般8個(gè)
          worker_cpu_affinity 00000001 00000010 00000100 00001000; #CPU邏輯數(shù)——把每個(gè)進(jìn)程分別綁在CPU上面,為每個(gè)進(jìn)程分配一個(gè)CPU
          #pid /usr/local/nginx/logs/nginx.pid
          worker_rlimit_nofile 102400; #一個(gè)進(jìn)程打開(kāi)的最大文件數(shù)目,與NGINX并發(fā)連接有關(guān)系
          
          #工作模式及連接數(shù)上限
          events
          {
            use epoll; #多路復(fù)用IO 基于LINUX2.6以上內(nèi)核,可以大大提高NGINX的性能 uname -a查看內(nèi)核版本號(hào)
            worker_connections 102400; #單個(gè)worker process最大連接數(shù),其中NGINX最大連接數(shù)=連接數(shù)*進(jìn)程數(shù),一般1GB內(nèi)存的機(jī)器上可以打開(kāi)的最大數(shù)大約是10萬(wàn)左右
            multi_accept on;   #盡可能多的接受請(qǐng)求,默認(rèn)是關(guān)閉狀態(tài)
          }
          
          #處理http請(qǐng)求的一個(gè)應(yīng)用配置段
          http
          {
            #引用mime.types,這個(gè)類型定義了很多,當(dāng)web服務(wù)器收到靜態(tài)的資源文件請(qǐng)求時(shí),依據(jù)請(qǐng)求文件的后綴名在服務(wù)器的MIME配置文件中找到對(duì)應(yīng)的MIME #Type,根據(jù)MIMETYPE設(shè)置并response響應(yīng)類型(Content-type)
            include       mime.types; 
            default_type  application/octet-stream; #定義的數(shù)據(jù)流,有的時(shí)候默認(rèn)類型可以指定為text,這跟我們的網(wǎng)頁(yè)發(fā)布還是資源下載是有關(guān)系的
            fastcgi_intercept_errors on; #表示接收f(shuō)astcgi輸出的http 1.0 response code
            charset utf-8;
            server_names_hash_bucket_size 128; #保存服務(wù)器名字的hash表
            #用來(lái)緩存請(qǐng)求頭信息的,容量4K,如果header頭信息請(qǐng)求超過(guò)了,nginx會(huì)直接返回400錯(cuò)誤,先根據(jù)client_header_buffer_size配置的值分配一個(gè)buffer,如果##分配的buffer無(wú)法容納request_line/request_header,那么就會(huì)##再次根據(jù)large_client_header_buffers配置的參數(shù)分配large_buffer,如果large_buffer還是無(wú)#法容納,那么就會(huì)返回414(處理request_line)/400(處理request_header)錯(cuò)誤。
            client_header_buffer_size 4k; 
            large_client_header_buffers 4 32k;
            client_max_body_size 300m; #允許客戶端請(qǐng)求的最大單文件字節(jié)數(shù) 上傳文件時(shí)根據(jù)需求設(shè)置這個(gè)參數(shù)
            #指定NGINX是否調(diào)用這個(gè)函數(shù)來(lái)輸出文件,對(duì)于普通的文件我們必須設(shè)置為ON,如果NGINX專門(mén)做為一個(gè)下載端的話可以關(guān)掉,好處是降低磁盤(pán)與網(wǎng)絡(luò)的IO處理數(shù)及#系統(tǒng)的UPTIME
            sendfile on; 
            #autoindex on;開(kāi)啟目錄列表訪問(wèn),適合下載服務(wù)器
            tcp_nopush on; #防止網(wǎng)絡(luò)阻塞
            #非常重要,根據(jù)實(shí)際情況設(shè)置值,超時(shí)時(shí)間,客戶端到服務(wù)端的連接持續(xù)有效時(shí)間,60秒內(nèi)可避免重新建立連接,時(shí)間也不能設(shè)太長(zhǎng),太長(zhǎng)的話,若請(qǐng)求數(shù)10000##,都占用連接會(huì)把服務(wù)托死
            keepalive_timeout 60;
            tcp_nodelay on; #提高數(shù)據(jù)的實(shí)時(shí)響應(yīng)性
            client_body_buffer_size 512k; #緩沖區(qū)代理緩沖用戶端請(qǐng)求的最大字節(jié)數(shù)(請(qǐng)求多)
          
            proxy_connect_timeout   5; #nginx跟后端服務(wù)器連接超時(shí)時(shí)間(代理連接超時(shí))
            proxy_read_timeout      60; #連接成功后,后端服務(wù)器響應(yīng)時(shí)間(代理接收超時(shí))
            proxy_send_timeout      5; #后端服務(wù)器數(shù)據(jù)回傳時(shí)間(代理發(fā)送超時(shí))
            proxy_buffer_size       16k; #設(shè)置代理服務(wù)器(nginx)保存用戶頭信息的緩沖區(qū)大小
            proxy_buffers           4 64k; #proxy_buffers緩沖區(qū),網(wǎng)頁(yè)平均在32k以下的話,這樣設(shè)置
            proxy_busy_buffers_size 128k; #高負(fù)荷下緩沖大小
            proxy_temp_file_write_size 128k; #設(shè)定緩存文件夾大小,大于這個(gè)值,將從upstream服務(wù)器傳
          
            gzip on; #NGINX可以壓縮靜態(tài)資源,比如我的靜態(tài)資源有10M,壓縮后只有2M,那么瀏覽器下載的就少了
            gzip_min_length  1k;
            gzip_buffers     4 16k;
            gzip_http_version 1.1;
            gzip_comp_level 2; #壓縮級(jí)別大小,最小1,最大9.值越小,壓縮后比例越小,CPU處理更快,為1時(shí),原10M壓縮完后8M,但設(shè)為9時(shí),壓縮完可能只有2M了。一般設(shè)置為2
            gzip_types       text/plain application/x-javascript text/css application/xml; #壓縮類型:text,js css xml 都會(huì)被壓縮
            gzip_vary on; #作用是在http響應(yīng)中增加一行目的是改變反向代理服務(wù)器的緩存策略
          
          #日志格式 
          log_format  main '$remote_addr - $remote_user [$time_local] "$request" ' #ip 遠(yuǎn)程用戶 當(dāng)?shù)貢r(shí)間  請(qǐng)求URL
                           '$status $body_bytes_sent "$http_referer" ' #狀態(tài)  發(fā)送的大小  響應(yīng)的頭
                   '"$http_user_agent" $request_time'; #客戶端使用的瀏覽器  頁(yè)面響應(yīng)的時(shí)間
          
          #動(dòng)態(tài)轉(zhuǎn)發(fā)         
          upstream web1 {
              #每個(gè)請(qǐng)求按訪問(wèn)ip的hash結(jié)果分配,這樣每個(gè)訪客固定訪問(wèn)一個(gè)后端服務(wù)器,可以解決session的問(wèn)題。配置了ip_hash就沒(méi)有負(fù)載均衡的效果了,每次訪問(wèn)的都是同一個(gè)tomcat
              #ip_hash; 
              #轉(zhuǎn)發(fā)的后端的tomcat服務(wù)器,weight表示轉(zhuǎn)發(fā)的權(quán)重,越大轉(zhuǎn)發(fā)的次數(shù)越多,機(jī)器性能不一樣配置的weight值不一樣     
               server   192.168.152.129:8080 weight=1 max_fails=2 fail_timeout=30s;
               server   192.168.152.129:8081 weight=1 max_fails=2 fail_timeout=30s;
          }
          upstream web2 {
               server   192.168.152.129:8090 weight=1 max_fails=2 fail_timeout=30s;
               server   192.168.152.129:8091 weight=1 max_fails=2 fail_timeout=30s;
          }
          
          server {
              listen       80; #監(jiān)聽(tīng)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表示對(duì)rmvb|jpg|png|swf|flv后綴的文件實(shí)行防盜鏈
                          valid_referers none blocked  www.dbspread.com; #表示對(duì)www.dbspread.com此域名開(kāi)通白名單,比如在www.test.com的index.html引用download/av123.rmvb,無(wú)效
                          root   html/b;
                          if ($invalid_referer) { #如果請(qǐng)求不是從www.dbspread.com白名單發(fā)出來(lái)的請(qǐng)求,直接重定向到403.html這個(gè)頁(yè)面或者返回403 
                               #rewrite ^/ http://www.dbspread.com/403.html;
                               return 403;
                          }
                  }
          
              #監(jiān)聽(tīng)完成以后通過(guò)斜桿(/)攔截請(qǐng)求轉(zhuǎn)發(fā)到后端的tomcat服務(wù)器
              location / 
                  {
                      #如果后端的服務(wù)器返回502、504、執(zhí)行超時(shí)等錯(cuò)誤,自動(dòng)將請(qǐng)求轉(zhuǎn)發(fā)到upstream負(fù)載均衡池中的另一臺(tái)服務(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;#用戶訪問(wèn)www.dbspread.com,想直接跳轉(zhuǎn)到網(wǎng)站下面的某個(gè)頁(yè)面:www.dbspread.com/new.index.html
                      proxy_pass http://web1; #跳轉(zhuǎn)到對(duì)應(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;
                  }
          
                  #日志級(jí)別有[debug|info|notice|warn|error|crit]  error_log 級(jí)別分為 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;
          
              }
          
          
          }


          到這一步環(huán)境準(zhǔn)備已完成,相關(guān)的配置也修改完成,下面我們來(lái)查看效果


          5.6 配置hosts域名映射


          192.168.152.200  www.dbspread.com

          注意:這里192.168.152.200 是keepalived里面virtual_ipaddress配置的虛擬ip

           virtual_ipaddress {
                  192.168.152.200 # 定義虛擬ip(VIP),可多設(shè),每行一個(gè)
              }


          到這一步環(huán)境準(zhǔn)備已完成,相關(guān)的配置也修改完成,下面我們來(lái)查看效果


          5.7 分別啟動(dòng)192.168.152.129的兩個(gè)tomcat


          5.8 分別啟動(dòng)192.168.152.130(keepalived主節(jié)點(diǎn))和

          192.168.152.129(keepalived從節(jié)點(diǎn))的keepalived的

          啟動(dòng)命令:


          /usr/local/keepalived/sbin/keepalived  

          可以看到keepalived和nginx都啟動(dòng)了

          在瀏覽器輸入www.dpspread.com域名訪問(wèn)

          5.9 下面我們停掉主節(jié)點(diǎn)192.168.152.130的keepalived和nginx

          可以看到從節(jié)點(diǎn)變?yōu)橹鞴?jié)點(diǎn)了

          在瀏覽器輸入地址www.dpspread.com訪問(wèn),可以看到訪問(wèn)正常

          5.10 下面我們重新啟動(dòng)主節(jié)點(diǎn)192.168.152.130

          可以看到主節(jié)點(diǎn)重新啟動(dòng)以后變?yōu)橹鞴?jié)點(diǎn)了

          之前變?yōu)橹鞴?jié)點(diǎn)的從節(jié)點(diǎn)又變回從節(jié)點(diǎn)了

          到此keepalived+nginx的高可用完美完成


          主站蜘蛛池模板: 国产日产久久高清欧美一区| 精品欧洲av无码一区二区三区| 无码视频一区二区三区在线观看 | 国产精品成人一区二区| 精品国产一区二区三区免费| 国产在线不卡一区| 蜜臀AV无码一区二区三区| 一区二区免费视频| 中文字幕精品亚洲无线码一区| 精品无码一区二区三区水蜜桃| 中文字幕乱码一区久久麻豆樱花| 亚洲国产精品无码久久一区二区| 亚洲一区精品伊人久久伊人| 精品一区二区三区AV天堂| 国模无码视频一区二区三区| 亚洲欧洲专线一区| 亚洲国产欧美一区二区三区| 亚洲一区二区电影| 亚洲电影唐人社一区二区| 无码精品人妻一区二区三区免费看 | 国产成人一区二区三区| 色一乱一伦一图一区二区精品| 国产福利精品一区二区| 伊人久久精品无码av一区| 国产麻豆精品一区二区三区v视界 国产美女精品一区二区三区 | 区三区激情福利综合中文字幕在线一区亚洲视频1 | 成人国产精品一区二区网站| 亚洲av午夜精品一区二区三区| 色一情一乱一伦一区二区三区日本| 日韩一区二区三区免费播放| 亚洲AⅤ视频一区二区三区| 精品无码人妻一区二区三区不卡| 久久国产午夜精品一区二区三区| 亚洲AV无码一区二三区| 亚洲一区二区三区在线观看蜜桃| 国产福利电影一区二区三区,免费久久久久久久精 | 熟女少妇丰满一区二区| 日韩免费视频一区二区| 久久无码人妻一区二区三区| 日韩精品一区二区三区中文| 无码精品尤物一区二区三区|