Nginx 安裝 配置 使用

 

Nginx 安裝 配置 使用

 

基本的HTTP服務器特性

  • 處理靜態文件,索引文件以及自動索引;打開文件描述符緩存(緩存元數據和文件描述符,下一次能夠直接從內存找到數據或者文件的位置);
  • 使用緩存加速反向代理;簡單負載均衡以及容錯(後端服務的健康情況檢查);
  • 遠程FastCGI,uwsgi,SCGI,和memcached服務的緩存加速支持;簡單的負載均衡以及容錯;
  • 模塊化的架構。過濾器包括gzip壓縮、ranges支持、chunked響應、XSLT,SSI以及圖像縮放。在SSI 過濾器中,一個包含多個SSI的頁面,若是經由FastCGI或反向代理處理,可被並行處理;
  • 支持SSL,TLS SNI。 
    Tengine(淘寶的nginx或叫tnginx,整合很是多的第三方插件) 
    varnish:提供緩存,有限內存緩存(使用算法使性能更好) 
    squid:它和varnish就比如httpd和nginx 
    nginx:其緩存功能保存到磁盤中 
    已經附帶了memcached,能夠直接管理memcached 
    httpd:既支持磁盤緩存,有支持內存緩存 

    其餘的HTTP服務器特性

  • 基於名字和IP的虛擬主機;
  • Keep-alive和pipelined鏈接支持;
  • 靈活的配置;
  • 從新加載配置以及在線升級時,不須要中斷正在處理的請求; 
    (新的鏈接創建是使用新的配置,老的鏈接則在在下一次請求時候使用新配置,這種方式較nginx的熱部署,平滑升級)
  • 自定義訪問日誌格式,帶緩存的日誌寫操做(先將日誌放於緩存,而後存在磁盤)以及快速日誌輪轉(日誌滾動);
  • 3xx-5xx錯誤代碼重定向;
  • 重寫(rewrite)模塊:使用正則表達式改變URI;
  • 根據客戶端地址執行不一樣的功能;(根據客戶端的類型好比手機設備返回wrap頁面)
  • 基於客戶端IP地址和HTTP基本認證機制的訪問控制;
  • 支持驗證HTTP referer;(ngx_http_referer_module模塊容許攔截「Referer」請求頭中含有非法值的請求,阻止它們訪問站點。 須要注意的是僞造一個有效的「Referer」請求頭是至關容易的, 所以這個模塊的預期目的不在於完全地阻止這些非法請求,而是爲了阻止由正常瀏覽器發出的大規模此類請求。 還有一點須要注意,即便正常瀏覽器發送的合法請求,也可能沒有「Referer」請求頭。好比你的網站A的圖片被網站B盜鏈了,當訪問B的時候會產生對A的大量的訪問,致使A訪問量過大,用此方式修改只容許站內鏈接)
  • 支持PUT、DELETE、MKCOL、COPY以及MOVE方法;
  • 支持FLV流和MP4流;
  • 速度限制;
  • 來自同一地址的同時鏈接數或請求數限制;
  • 嵌入Perl語言。 

    架構和擴展性

  • 一個主進程和多個工做進程,工做進程以非特權用戶運行;
  • 支持的事件機制:kqueue(FreeBSD 4.1+)、epoll(Linux 2.6+)、rt signals(realtime signals Linux 2.2.19+)、/dev/poll(Solaris 7 11/99+)、event ports(Solaris 10)、select以及poll;
  • 衆多支持的kqueue特性包括EV_CLEAR、EV_DISABLE(臨時禁止事件)、NOTE_LOWAT、EV_EOF,可用數據的數量,錯誤代碼;
  • 支持sendfile(FreeBSD 3.1+, Linux 2.2+, Mac OS X 10.5+)、sendfile64(Linux 2.4.21+)和sendfilev(Solaris 8 7/01+);
  • 文件AIO(FreeBSD 4.3+, Linux 2.6.22+);
  • DIRECTIO (FreeBSD 4.4+, Linux 2.4+, Solaris 2.6+, Mac OS X);
  • 支持Accept-filters(FreeBSD 4.1+, NetBSD 5.0+,能夠只接受有限的鏈接 )和 TCP_DEFER_ACCEPT(Linux 2.4+);
  • 10000個非活躍的HTTP keep-alive鏈接僅佔用約2.5M內存;
  • 儘量避免數據拷貝操做(如sendfile)。 
    上圖中master監控worker進程運行情況。master是由管理員啓用的,加載配置文件來進行全局管理,worker是使用普通用戶,由master發起,是master的子進程。nginx是高度模塊化的,向上圖中worker進程中有不少模塊,用戶發起的請求交給worker進程,而其自己交給本身的模塊進行相應的處理,這些模塊以流水線的形式進行工做的,好比第一個模塊解析請求的頭部, 第二個取得數據,第三個建立相應。 
    上面的描述: 
    從新加載配置以及在線升級時,不須要中斷正在處理的請求 
    詳細的過程是,當新的配置文件加載到nginx時,nginx創建新的worker進程(使用新的配置文件)來相應新的請求,而原來的worker進程在完成之前的請求以後被master kill掉,因而動態緩慢加載新的配置文件

完成內容

  • 主進程主要完成以下工做: 
    1. 讀取並驗正配置信息;
    2. 建立、綁定及關閉套接字;
    3. 啓動、終止及維護worker進程的個數;
    4. 無須停止服務而從新配置工做特性;
    5. 控制非中斷式程序升級,啓用新的二進制程序並在須要時回滾至老版本;(相似從新加載配置文件加載,新版本的master兼容老版本的worker)
    6. 從新打開日誌文件,實現日誌滾動;
    7. 編譯嵌入式perl腳本;
  • worker進程主要完成的任務包括: 
    1. 接收、傳入並處理來自客戶端的鏈接;
    2. 提供反向代理及過濾功能;
    3. nginx任何能完成的其它任務; 
      cache loader進程主要完成的任務包括:
    4. 檢查緩存存儲中的緩存對象;
    5. 使用緩存元數據創建內存數據庫;
  • cache manager進程的主要任務: 
    1. 緩存的失效及過時檢驗; 
      Nginx的配置有着幾個不一樣的上下文:main(對任何配置都生效,全局的)、http(包括server,upstream實現反向代理,location定義訪問相應),還有實現郵件服務反向代理的mail。配置語法的格式和定義方式遵循所謂的C風格,所以支持嵌套,還有着邏輯清晰並易於建立、閱讀和維護等優點。
  • sendfile: 
    步驟一:系統調用read致使了從用戶空間到內核空間的上下文切換。DMA模塊從磁盤中讀取文件內容,並將其存儲在內核空間的緩衝區內,完成了第1次複製。 
    步驟二:數據從內核空間緩衝區複製到用戶空間緩衝區,以後系統調用read返回,這致使了從內核空間向用戶空間的上下文切換。此時,須要的數據已存放在指定的用戶空間緩衝區內(參數tmp_buf),程序能夠繼續下面的操做。 
    步驟三:系統調用write致使從用戶空間到內核空間的上下文切換。數據從用戶空間緩衝區被再次複製到內核空間緩衝區,完成了第3次複製。不過,此次數據存放在內核空間中與使用的socket相關的特定緩衝區中,而不是步驟一中的緩衝區。 
    步驟四:系統調用返回,致使了第4次上下文切換。第4次複製在DMA模塊將數據從內核空間緩衝區傳遞至協議引擎的時候發生,這與咱們的代碼的執行是獨立且異步發生的。你可能會疑惑:「爲什麼要說是獨立、異步?難道不是在write系統調用返回前數據已經被傳送了?write系統調用的返回,並不意味着傳輸成功——它甚至沒法保證傳輸的開始。調用的返回,只是代表以太網驅動程序在其傳輸隊列中有空位,並已經接受咱們的數據用於傳輸。可能有衆多的數據排在咱們的數據以前。除非驅動程序或硬件採用優先級隊列的方法,各組數據是依照FIFO的次序被傳輸的(圖1中叉狀的DMA copy代表這最後一次複製能夠被延後)。 
    採用sendfile能夠很好地避免在將數據有DMA傳入用戶空間,再由用戶空間傳入內核空間的socket緩衝: 
    步驟一:mmap系統調用致使文件的內容經過DMA模塊被複制到內核緩衝區中,該緩衝區以後與用戶進程共享,這樣就內核緩衝區與用戶緩衝區之間的複製就不會發生。 
    步驟二:write系統調用致使內核將數據從內核緩衝區複製到與socket相關聯的內核緩衝區中。 
    步驟三:DMA模塊將數據由socket的緩衝區傳遞給協議引擎時,第3次複製發生。

nginx安裝:

>本文采用編譯安裝的方式
  1. 解決依賴關係 
    編譯安裝nginx須要事先須要安裝開發包組」Development Tools」和 「Development Libraries」。同時,還須要專門安裝pcre-devel包:nginx

    yum -y install zlib zlib-devel openssl openssl-devel pcre-devel gd-devel
  2. 添加用戶正則表達式

    groupadd -r nginx
    useradd -r -g nginx nginx
  3. 編譯安裝算法

    ./configure \
    --prefix=/usr \
    --sbin-path=/usr/sbin/nginx \
    --conf-path=/etc/nginx/nginx.conf \
    --error-log-path=/var/log/nginx/error.log \
    --http-log-path=/var/log/nginx/access.log \
    --pid-path=/var/run/nginx.pid \
    --lock-path=/var/run/nginx.lock \
    --http-client-body-temp-path=/var/cache/nginx/client_temp \
    --http-proxy-temp-path=/var/cache/nginx/proxy_temp \
    --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
    --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
    --http-scgi-temp-path=/var/cache/nginx/scgi_temp \
    --user=nginx \
    --group=nginx \
    --with-http_ssl_module \
    --with-http_realip_module \
    --with-http_addition_module \
    --with-http_sub_module \
    --with-http_dav_module \
    --with-http_flv_module \
    --with-http_mp4_module \
    --with-http_gunzip_module \
    --with-http_gzip_static_module \
    --with-http_random_index_module \
    --with-http_secure_link_module \
    --with-http_stub_status_module \
    --with-http_auth_request_module \
    --with-mail \
    --with-mail_ssl_module \
    --with-file-aio \
    --with-ipv6 \
    --with-http_v2_module \
    --with-http_image_filter_module \
    --with-pcre \
    --with-cc-opt='-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic'
    make
    make install
  4. 配置支持Centos7 systemctl服務管理數據庫

    vim /lib/systemd/system/nginx.service

    添加下面內容vim

    [Unit]
    Description=The NGINX HTTP and reverse proxy server
    After=syslog.target network.target remote-fs.target nss-lookup.target

    [Service]
    Type=forking
    PIDFile=/var/run/nginx.pid
    ExecStartPre=/usr/sbin/nginx -t
    ExecStart=/usr/sbin/nginx
    ExecReload=/bin/kill -s HUP $MAINPID
    ExecStop=/bin/kill -s QUIT $MAINPID
    PrivateTmp=true

    [Install]
    WantedBy=multi-user.target

    能夠經過systemctl status start stop來看nginx服務內容後端

  5. 配置nginx瀏覽器

    vim /etc/nginx/nginx.conf

    #在http節點下,添加upstream節點

    upstream mysite {
    server 172.20.13.229:8081;
    server 172.20.13.230:8082;
    }

    #修改server節點下的location節點

    location / {
    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_buffering off;
    proxy_pass http://mysite;
    }

    #主要內容在mysite中

完成:)緩存

相關文章
相關標籤/搜索