1. 程式人生 > 實用技巧 >servlet關於HttpServletRequest 物件

servlet關於HttpServletRequest 物件

Nginx

介紹

  1. Nginx:

    Nginx (engine x) 是一個高效能的HTTP和反向代理web伺服器,同時也提供了IMAP/POP3/SMTP服務。

  2. 代理:增強目標物件功能

    • 正向代理:是一個位於客戶端和原始伺服器(origin server)之間的伺服器,為了從原始伺服器取得內容,客戶端向代理髮送一個請求並指定目標(原始伺服器),然後代理向原始伺服器轉交請求並將獲得的內容返回給客戶端。客戶端才能使用正向代理。(翻牆)

    • 反向代理:反向代理伺服器位於使用者與目標伺服器之間,但是對於使用者而言,反向代理伺服器就相當於目標伺服器,即使用者直接訪問反向代理伺服器就可以獲得目標伺服器的資源。同時,使用者不需要知道目標伺服器的地址,也無須在使用者端作任何設定。反向代理伺服器通常可用來作為Web加速,即使用反向代理作為Web伺服器的前置機來降低網路和伺服器的負載,提高訪問效率。

優點:

  1. 可以高併發連線

    • 官方測試Nginx能夠支撐5萬併發連線,實際生產環境中可以支撐2~4萬併發連線數。

  2. 記憶體消耗少

  3. 成本低廉

  4. 配置檔案非常簡單

  5. 支援Rewrite重寫

    • 能夠根據域名、URL的不同,將http請求分到不同的後端伺服器群組。

  6. 內建的健康檢查功能

    • 如果NginxProxy後端的某臺Web伺服器宕機了,不會影響前端的訪問。

  7. 節省頻寬

  8. 穩定性高

    • 用於反向代理,宕機的概率微乎其微。

  9. 支援熱部署

工作原理

  • Nginx是由核心和模組組成的。其中,核心的設計非常的微小和簡潔,完成的工作也非常的簡單,僅僅通過查詢配置檔案將客戶端的請求對映到location block(location是Nginx配置中的一個指令,用於URL匹配)而在這個location中配置的每個指令將會啟動不同的模組完成相應的工作。

  • 核心模組:HTTP模組、Event模組、Mail模組

  • 基礎模組:HTTP Access模組、HTTP FastCGl模組、HTTP Proxy模組、HTTP Rewrite模組

  • 第三方模組:HTTP Request Hash模組、Notice模組、HTTP Access Key模組

  • Nginx的高併發優勢得益於採用epoll模型,於傳統的伺服器型別不一致(程式的架構不同)

  • epoll模型是在linux核心2.6以後才有的,非同步非阻塞

  • 而Apache伺服器採用的是select模型

  • epoll模型原理:對於事件控制代碼的選擇不是遍歷所有事物通知而是事件響應的,就是控制代碼事件上來立馬選擇出來,不需要遍歷整個事件控制代碼連結串列,因此效率特別高

  • select模型原理:select選擇控制代碼的時候,是遍歷所有的控制代碼,也就是說控制代碼有事件響應時,select需要遍歷所有的控制代碼才能獲得哪些控制代碼上有事件通知,因此效率非常低。

安裝配置(linux版)

  1. 下載Nginx :wget http://nginx.org/download/nginx-1.13.0.tar.gz

  2. 解壓

  3. 編譯:切換nginx安裝目錄,編譯指令./configure

  4. 解決編譯器找不到問題:

    1. yum install gcc gcc-c++ ncurses-dev perl

    2. yum install pcre pcre-devel

    3. yum install zlib gzip zlib-devel

  5. 重新編譯

  6. 安裝Nginx服務:make & make install

  7. 啟動Nginx服務:進入sbin裡,./nginx

  8. 檢視是否啟動成功:ps -ef | grep nginx

常用命令

  1. 重啟nginx:./nginx -s reload

  2. 關閉nginx:./nginx -s stop

Nginx管理虛擬機器

  1. 三大配置

    1. 基於域名的虛擬機器配置

      1. 進入配置檔案 vi /usr/local/nginx/conf/nginx.conf

      2. server {
        listen 80;
        server_name zhiyou100.com;
        location / {
        root view;
        index login.html;
        #在Nginx的安裝目錄下 建個view目錄,在裡面存個login.html檔案
        }
  2. 重啟Nginx

    1. 進入sbin目錄:./nginx -s reload

  3. 配置本地域名對映

    1. 進入微軟的C:\Windows\System32\drivers\etc目錄

      1. 編輯hosts檔案 新增192.168.75.128 zhiyou100.com

  4. 基於埠號的虛擬機器配置

  5. 基於IP的虛擬機器配置

    1. server_name 欄位 同樣可以存放IP地址(虛擬機器的IP地址)

負載均衡

  1. 企業中在解決高併發問題,一般有兩種方向的處理策略:軟體和硬體

  2. 從硬體上面來說,公司會新增負載均衡器來分發大量請求

  3. 從軟體方面來說,公司解決高併發瓶頸處:資料庫+web伺服器兩處新增解決方案

  4. 其中web伺服器是最常用的一種解決方案,新增負載均衡就是使用Nginx實現負載均衡

負載均衡的作用

  1. 轉發功能

    • 按照一定的演算法(輪詢、權重)將客戶端請求轉發到不同的應用伺服器上面,減輕單個伺服器的壓力,提高系統的併發質量。

  2. 故障排除

    • 通過心跳檢測的方式,判斷應用伺服器當前是否可以正常工作,如果伺服器宕機了,自動的將請求轉發到其他的應用伺服器上面

  3. 恢復新增

    • 如果檢測到發生故障的應用伺服器恢復工作,那麼它會自動把恢復的應用伺服器新增進去。

搭載負載均衡

  1. 克隆虛擬機器

    1. 開啟虛擬機器,確保虛擬機器處於關機狀態

    2. 點選拍攝快照,定義名字

    3. 點選克隆

    4. 點選下一步後,選擇建立完整克隆-->指定克隆虛擬機器的映象位置

    5. 修改虛擬機器名稱:

      hostnamectl set-hostname slave1(虛擬機器名稱)

    6. 檢視名稱是否修改成功:hostname

    7. 重新啟動虛擬機器:reboot

  2. 搭建tomcat叢集開發步驟

    1. 開啟三個tomcat,每個虛擬機器都啟動

      1. 檢視tomcat是否啟動成功,輸入jps,出現bootstrap就說明啟動成功

  3. 配置Nginx的核心配置檔案

    1. #配置多個tomcat所在的伺服器IP
      upstream tomcatServer1{
      server 192.168.75.129:8080 weight=3; #ip和埠號 權重 red
      server 192.168.75.128:8080; #yellow
      server 192.168.75.130:8080 weight=5;
      }
      server{
      listen 80;
      server_name zhiyou200.com;
      location / {
      proxy_pass http://tomcatServer1; #代理
      }
      }
    2. 配置web伺服器叢集的時候,在nginx中可以設定幾個變數或者引數

      1. weight (權重) :值越大,承擔負載均衡的壓力就越大(訪問次數增多)

        • 按照配置文件中設定就是 1+3+5 =9,訪問zhiyou200.com網頁9次中,其中背景為紅色的頁面一共出現三次,黃色頁面為一次,白色頁面為五次

      2. max_fails :允許失敗的最大請求次數

      3. backup (閒置,備用機): 其他所有的非backup伺服器宕機或者忙機狀態的時候,請求backup指定的伺服器

      4. fail_timeout : 失敗超時時間

  4. 部署專案

    1. 第一步

      • 修改tomcat的配置檔案server.xml /usr/local/tomcat/conf/server.xml

      • 修改tomcat預設的訪問專案名稱和專案的釋出路徑,docBase就是war包名稱(虛擬目錄/專案名稱)

        <Context path="" docBase="video" reloadable="true"/>

    2. 第二步

      • 修改springmvc配置檔案,指定預設的訪問路徑

      • <mvc:view-controller path="/" view-name="forward:/front/user/index.do"/>

      • 然後重新打成war包

    3. 第三步

      • 修改nginx的配置檔案 nginx.conf

      • #配置多個tomcat所在的伺服器IP
        upstream tomcatServer1{
        server 192.168.75.129:8080 weight=3; #ip和埠號 權重
        server 192.168.75.128:8080;
        server 192.168.75.130:8080 weight=5;
        ip_hash;#可以解決session共享
        }
        server{
        listen 80;
        server_name zhiyou200.com;

        location /{
        proxy_pass http://tomcatServer1; #代理
        index /;#新增上該行
        }
        }
    4. 第四步

      1. 解決樣式找不到問題

        1. 如果把tomcat的埠號改為80,樣式就可以顯示出來,但是這會和nginx的埠號產生衝突,所以一般不把開啟nginx的那臺伺服器去開啟tomcat

        2. 然後把tomcat的配置檔案的埠號改為80,上面的server路徑的埠號也改為80