nginx知識

一 反向代理

反向代理(Reverse Proxy)方式是指以代理服務器接收internet上的鏈接請求,而後將請求轉發給內部網絡上的服務器,並將從服務器上獲得的結果返回給internet上請求鏈接的客戶端,此時代理服務器對外就表現爲一個服務器html

從上圖能夠看出:反向代理 服務器位於網站機房,代理網站Web服務器接收http請求,對請求進行轉發.前端

 

 

 

二 反向代理的做用

(1) 保護網站安全:任何來自Internet的請求都必須先通過代理服務器mysql

(2) 經過配置緩存功能加速Web請求:能夠緩存真實Web服務器上的某些靜態資源,減輕真實Web服務器的負載壓力nginx

(3) 實現負載均衡:充當負載均衡服務器均衡地分發請求,平衡集羣中各個服務器的負載壓力sql

 

 

三  nginx的負載均衡

對於同一個連接中的數據包,負載均衡回將其進行NAT轉換後,轉發至後端固定的服務器進行處理,這是負載均衡最基本,最原始的功能。負載均衡系統內部會專門有一張表來記錄這些鏈接的情況,包括【源IP: 端口】【目的IP: 端口】【服務器IP: 端口】,空閒超時時間(Idle Timeout)等json

因爲負載均衡內部記錄鏈接狀態的這張表須要消耗系統的內部資源。所以這張表不可能無限大,全部廠家都有必定的限制。這張表的大小通常稱之爲最大併發鏈接數,也就是系統同時可以容納的鏈接數量。考慮到創建這些鏈接的客戶端或服務器會發生一些異常狀況,致使這些鏈接不能被正常終結掉,所以負載均衡的當前鏈接狀態表項中,設計了一個空閒超時時間的參數。這個參數定義爲,當該鏈接在必定時間內無流量經過時,負載均衡會自動刪除該鏈接條目,釋放系統資源。後端

 

https://kb.cnblogs.com/page/559213/  這個再好好看看瀏覽器

 

四  nginx的發展

nginx是一款輕量級的網頁服務器,反向代理器以及電子郵件代理服務器,其將源代碼以類BSD許可證的形式發佈,因它的穩定性,豐富的功能集,實例配置文件和低系統資源的消耗而聞名.緩存

說道Web服務器,Apache服務器和IIS服務器是兩大巨頭,可是運行速度更快,更靈活的對手nginx正在迎頭遇上tomcat

 

 

五 nginx的核心特色

(1)跨平臺:Nginx 能夠在大多數 Unix like OS編譯運行,並且也有Windows的移植版本;

(2)配置異常簡單:很是容易上手。配置風格跟程序開發同樣,神通常的配置;

(3)非阻塞、高併發鏈接:數據複製時,磁盤I/O的第一階段是非阻塞的。官方測試可以支撐5萬併發鏈接,在實際生產環境中跑到2~3萬併發鏈接數。(這得益於Nginx使用了最新的epoll模型);

(4)事件驅動:通訊機制採用epoll模型,支持更大的併發鏈接。(總結:經過異步非阻塞的事件處理機制,Nginx實現由進程循環處理多個準備好的事件,從而實現高併發和輕量級)

(5)Master/Worker結構:一個master進程,生成一個或多個worker進程。

(6)內存消耗小:處理大併發的請求內存消耗很是小。在3萬併發鏈接下,開啓的10個Nginx 進程才消耗150M內存(15M*10=150M)。

(7)內置的健康檢查功能:若是 Nginx 代理的後端的某臺 Web 服務器宕機了,不會影響前端訪問。

(8)節省帶寬:支持 GZIP 壓縮,能夠添加瀏覽器本地緩存的 Header 頭。

(9)穩定性高:用於反向代理,宕機的機率微乎其微。

 

 

六 實戰:構建nginix+ tomcat構築Web服務器集羣的負載均衡

-- 啓動
sudo /xxx/openresty/nginx/sbin/nginx

-- 中止
sudo /xxx/openresty/nginx/sbin/nginx -s stop

-- 從新加載配置文件
sudo /xxx/openresty/nginx/sbin/nginx -s reload




ng 負載均衡:
http {
    upstream myapp1 {
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://myapp1;
        }
    }
}
 




1 安裝不管使用何種方法,都須要安裝 pcre 庫 libpcre,這是安裝nginx必須的
2 安裝 libdrizzle 1.0
wget http://agentzh.org/misc/nginx/drizzle7-2011.07.21.tar.gz
tar zxvf drizzle7-2011.07.21.tar.gz
cd drizzle7-2011.07.21
./configure --without-server
make libdrizzle-1.0
make install-libdrizzle-1.0

3 openresty從新configure一下

./configure --prefix=/usr/local/openresty --with-luajit --with-http_drizzle_module --with-libdrizzle=/usr/local

 



#user  nobody;
worker_processes  4;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;
    #gzip  on;

   upstream mysql {
        drizzle_server 127.0.0.1:3306 dbname=nginx user=root password=root protocol=mysql;
 }

    server {
        listen       80;
        server_name  localhost;

       location = /mysql-status{
        drizzle_status;
        }

        location  /mysql {
        drizzle_pass mysql;
        drizzle_query "select id,name,age from users where id = 1";
        rds_json on;
}

       location /hello {
          default_type 'text/plain';
          content_by_lua 'ngx.say("hello, lua")';
           # root   html;
           # index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

 

 

七 單機nginx應對高併發處理

nginx是一個高效的服務器,可是若是隻是安裝沒有進行什麼配置,只能承受1024個併發請求。那麼如何可讓nginx輕鬆應對5000甚至10000的高併發呢

1 系統層面

(1) 調整同時打開文件數量
ulimit -n 20480
(2) TCP最大鏈接數(somaxconn) socat的最大鏈接數
echo 10000 > /proc/sys/net/core/somaxconn
(3) TCP鏈接當即回收、回用(recycle、reuse)
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
(4) 不作TCP洪水抵禦
echo 0 > /proc/sys/net/ipv4/tcp_syncookies
也能夠直接使用優化後的配置,在/etc/sysctl.conf中加入:
net.core.somaxconn = 20480
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 4096 16777216
net.ipv4.tcp_wmem = 4096 4096 16777216
net.ipv4.tcp_mem = 786432 2097152 3145728
net.ipv4.tcp_max_syn_backlog = 16384
net.core.netdev_max_backlog = 20000
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_max_orphans = 131072
net.ipv4.tcp_syncookies = 0
使用:sysctl -p 生效
sysctl -p

 

 

2、nginx層面

修改nginx配置文件,nginx.conf增長work_rlimit_nofile和worker_connections數量,並禁用keepalive_timeout。worker_processes  1; #nginx 進程數,建議按照cpu 數目來指定,通常爲它的倍數worker_rlimit_nofile 20000; #一個nginx 進程打開的最多文件描述符數目,理論值應該是最多打開文件數(ulimit -n)與nginx 進程數相除,可是nginx 分配請求並非那麼均勻,因此最好與ulimit -n 的值保持一致events {use epoll;#使用epoll的I/O模型worker_connections 20000;#每一個進程容許的最多鏈接數, 理論上每臺nginx 服務器的最大鏈接數爲worker_processes*worker_connectionsmulti_accept on;}http {keepalive_timeout 0;}重啓nginxservice nginx restart

相關文章
相關標籤/搜索