<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ## Nginx的優勢點 * Nginx由于使用了epoll和kqueue網路I/O模型,在實際生產環境能夠支撐3萬左右并發連接。 * Nginx內存消耗低。 * Nginx跨平臺,而且配置相對來說難度較低。 * Nginx內置健康檢查功能,如果負載均衡其中一個服務器宕機了,則接受到的請求會發送給其他服務器去處理。 * 支持Gzip壓縮,可以添加瀏覽器本地緩存的Header頭。 * Nginx支持熱部署,可以在不間斷服務的情況下平滑進行配置的更改。 * Nginx異步接收用戶請求,減輕了Web服務器的壓力。 ## 如何實現高并發 這個問題出來可能懂一點Nginx的朋友們都是浮現出5個字:異步非阻塞。實際上Nginx就是異步非阻塞,使用了epoll模型并對底層代碼進行大幅度優化。之前其實有講過Nginx是采用1個master進程,多個worker進程的模式,每次接收到一個請求,master會將請求按照一定策略分發給一個worker進程去進行處理請求。worker進程數一般設置為和CPU核心數一致,異步非阻塞模式就會使得worker線程在等待請求callback的空閑時間可以接收處理新的請求,當接收到舊請求的callback時再回去繼續處理該請求,這樣就完成了少數幾個worker進程卻實現了高并發的問題。 ## Nginx為何不使用多線程? 眾所周知,沒創建一個新的線程,都需要為其分配cpu和內存。當然,創建進程也是一樣,但是由于線程過多會導致內存消耗過多。所以Nginx采用單線程異步處理用戶請求,這樣不需要不斷地為新的線程分配cpu和內存,減輕服務器內存消耗,所以使得Nginx性能方面更為高效。 ## Nginx如何處理請求? Nginx啟動后,首先進行配置文件的解析,解析成功會得到虛擬服務器的ip和端口號,在主進程master進程中創建socket,對addrreuse選項進行設置,并將socket綁定到對應的ip地址和端口并進行監聽。然后創建子進程worker進程,當客戶端和Nginx進行三次握手,則可以創建成功與Nginx的連接。當有新的請求進入時,空閑的worker進程會競爭,當某一個worker進程競爭成功,則會得到這個已經成功建立連接的socket,然后創建ngx\_connection\_t結構體,接下來設置讀寫事件處理函數并添加讀寫事件用來與客戶端進行數據交換。當請求結束Nginx或者客戶端主動關閉連接,此時一個請求處理完畢。 ## 為什么要做動靜分離? 在日常開發中,前端請求靜態文件比如圖片資源是不需要經過后端服務器的,但是調用API這些類型的就需要后端進行處理請求,所以為了提高對資源文件的響應速度,我們應該使用動靜分離的策略去做架構。我們可以將靜態文件放到Nginx中,將動態資源的請求轉發到后端服務器去進行進一步的處理。 ## Session不同步如何處理? 上面其實提過了解決方案,負載均衡方式使用ip\_hash方式,如果用戶已經訪問過某個后端器,則再次訪問時會將這個請求的ip地址進行哈希算法轉換,自動定位到該服務器。當然也可以通過redis緩存用戶session,一樣可以處理session不同步的問題。 ## Nginx常用優化配置 1. 調整worker\_processes指定Nginx需要創建的worker進程數量,剛才有提到worker進程數一般設置為和CPU核心數一致。 2. 調整worker\_connections設置Nginx最多可以同時服務的客戶端數。結合worker\_processes配置可以獲得每秒可以服務的最大客戶端數。 3. 啟動gzip壓縮,可以對文件大小進行壓縮,減少了客戶端http的傳輸帶寬,可以大幅度提高頁面的加載速度。 4. 啟用緩存,如果請求靜態資源,啟用緩存是可以大幅度提升性能的。關于啟用緩存可以觀看Nginx緩存這篇文章:Nginx緩存原理及機制
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看