跟Coy學運維—Nginx架構、安裝、主配置文件詳解

一,什麼是正向代理或者反向代理                                                                                                                    

在服務器前端,加一臺代理服務器,代理服務器也監聽80端口上,也接收http的請求,若是容許訪問就封裝成別的樣子而後給後端的nginx

 

  正向代理是一個位於客戶端和目標服務器之間的代理服務器(中間服務器)。爲了從原始服務器取得內容,客戶端向代理服務器發送一個請求,而且指定目標服務器,以後代理向目標服務器轉交而且將得到的內容返回給客戶端。正向代理的狀況下客戶端必需要進行一些特別的設置才能使用。
  反向代理正好相反。對於客戶端來講,反向代理就好像目標服務器。而且客戶端不須要進行任何設置。客戶端向反向代理髮送請求,接着反向代理判斷請求走向何處,並將請求轉交給客戶端,使得這些內容就好似他本身同樣,一次客戶端並不會感知到反向代理後面的服務,也所以不須要客戶端作任何設置,只須要把反向代理服務器當成真正的服務器就行了。
  區別:
正向代理須要你主動設置代理服務器ip或者域名進行訪問,由設置的服務器ip或者域名去獲取訪問內容並返回;而反向代理不須要你作任何設置,直接訪問服務器真實ip或者域名,可是服務器內部會自動根據訪問內容進行跳轉及內容返回,你不知道它最終訪問的是哪些機器。
  正向代理是代理客戶端,爲客戶端收發請求,使真實客戶端對服務器不可見;而反向代理是代理服務器端,爲服務器收發請求,使真實服務器對客戶端不可見。
代理服務器能夠加速
 

二,什麼是nginx                                                                                                                                            

Nginx是一個web服務器和方向代理服務器,用於HTTP、HTTPS、SMTP、POP3和IMAP協議
nginx的一些特性
  靜態資源的web服務器,能緩存打開的文件 描述符
  http, smtp, pop3協議的反向代理服務器,緩存、負載均衡;
  支持FastCGI (fpm,LNMP)
  模塊化,非DSO機制,過濾器zip,SSI及圖像大小調整;
  支持SSL
  擴展功能:
  基於名稱和IP的虛擬主機;
  支持keepalive
  支持平滑升級
  定製訪問日誌 ,支持使用日誌緩衝區提升日誌存儲性能
  支持url rewrite
  支持路徑別名
  支持基於IP及用戶的訪問控制
  支持速率限制,支持併發數限制
 

三,nginx架構                                                                                                                                              

 

 

   nginx啓動時,會生成兩種類型的進程,一個是主進程(Master),一個或多個工做進程(Worker)。主進程並不處理網絡請求,主要負責調度工做進程,也就是圖示的三項:加載配置、啓動工做進程及非停升級。因此,nginx啓動之後,查看操做系統的進程列表,咱們就能看到至少有兩個nginx進程。事件驅動、異步及非阻塞,能夠說是nginx得以得到高併發、高性能的關鍵因素,同時也得益於對Linux、Solaris及類BSD等操做系統內核中事件通知及I/O性能加強功能的採用,如kqueue、epoll及event ports。
每個緩存都會有存活期限,cache loader是加載緩存  cache manager清理緩存
支持一些高級的io機制,
 
一個master進程,生成一個或多個worker
        事件驅動: epoll(邊緣觸發)
        消息通知:select, poll, rt signals (複用器)
        支持sendfile, sendfile64
        支持AIO
        支持mmap(內存映射)
 
nginx: 非阻塞、事件驅動、一個master生成一個或多個worker, 每一個worker響應n個請求
 
sendfile解析
一個web服務器

 

若是想要從內核內存直接發送給客戶端
 

 

那麼這種機制就叫 sendfile,這個機制httpd也支持
 

四,模塊類型及http安裝方法:                                                                                  

        核心模塊
        Standard HTTP modules(標準http協議模塊)
        Optional HTTP modules(可選的http協議模塊)
        Mail modules(郵件模塊)
        3rd party modules(第三方模塊)
 
安裝方法
yum groupinstall "Development Tools" "Server Platform Development" -y
yum -y install pcre-devel
groupadd -r nginx
useradd -g nginx -r nginx
 
./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi
 
mkdir -pv /var/tmp/nginx/{client,proxy,fastcgi,uwsgi}
 
啓動
/usr/local/nginx/sbin/nginx  
查看監聽端口
這個就是主和子進程
 
配置文件:
main配置段是全局配置
event定義event模型工做特性
http:{}:定義http協議的相關
配置指令:要以分號結尾
支持使用自定義變量,
    內置變量
    自定義變量
主配置段的指令的類別:
            用於調試、定位問題
            正常運行必備的配置
            優化性能的配置
            事件相關的配置
 
nginx官方文檔各模塊查詢方法

 

HOW-TO是編譯安裝nginx
Development是開發人員
Modules reference是模塊
 

核心模塊一些指令,可寫在配置文件中
 

 

 

五,主配置段的指令:                                                

正常運行的必備配置:

1,user USERNAME [GROUPNAME] #以哪一個用戶的身份來運行work進程的,或者某個組,注意組名和用戶名要同樣
要是編譯安裝user是註釋的
 

 

2,pid 指明pid的路徑
編譯安裝pid註釋掉的。指定nginx守護進程的pid文件
 
3,worker_rlimit_nofile 
每一個用戶最大能打開1024個文件,假設一萬的併發鏈接,須要維持一萬個套接字文件。worker可以接受更多的併發鏈接,用戶可以同時打開更多的併發連接
指定全部worker進程所可以打開最大文件句柄數

 

worker_rlimit_core
指明這個進程所使用的核心數量,或者核心文件的最大致積大小,用來核心文件的最大大小,全部的worker進程加起來可以使用整體的核心文件大小
 

 

性能優化相關的配置:

1,worker_processes
worker進程的個數,一般應該略少於cpu物理核心數:如今自動打開自動判斷
 
 
2,worker_cpu_affinity cpumask(cpu掩碼)

cpumask假設,worker_cpu_affinity 0000001 0000002 00000003
3,timer_resolution
#計時器解析度
 

 

做用
任何一個請求到達nginx的時候,nginx就響應,響應完後記錄日誌,日誌中記錄時間,一旦有用戶請求到達,咱們處理請求響應要記錄日誌的話,必需要獲取當前的系統時間,並記錄在日誌文件中,怎麼獲取系統時間,就經過 gettimeofday來獲取時間,而後把結果保存在日誌文件中,若是時間解析度過大的話帶來結果就是一秒鐘就發起1000次的調用,時間解析度越低,精準就越低,爲了要求性能,因此對時間解析度要低的
 
4,worker_priority

 

指明worker進程的優先級,worker進程的nice值:默認是0
-20,19
100,139
 
只有管理員才能調優先值,好在啓動的時候是用root用戶啓動的,只不過運行woker時候他們纔會由nginx普通用戶來運行它
 
 

事件相關的配置

1,accept_mutex
#互斥鎖
 

 

打開這個功能之後,會讓多個worker輪流的序列化的響應新請求,一個挨着一個的,不然的話隨機
 
accept_mutex_delay

 

若是某一個worker正在嘗試接收用戶請求的時候,其餘的用戶請求要延遲多長時間的等待,一個請求來了不能搶,輪到誰誰來響應
可是這個worker有可能忙不過來,延遲多長時間
 
2,lock_file

 

就是互斥鎖鎖文件路徑
 
3,use [epoll|rtsig|select|poll]

 

定義使用的事件模型的,建議讓nginx自行選擇
在 linux上,能用epoll就不用select,epoll纔是真正支持事件驅動機制
 
4, worker_connections
一個worker進程所可以接收的最大鏈接數

 worker_connections 10240;那麼總共有多少併發,是worker_processes*worker_connections前端

 

用於調試,定位問題:

./configure --with-debug
1,daemon(on|off)
是否一守護進程的方式運行nginx:調試應該設置爲off
 
2,master_process(on|off)
是否以master/worker模型來運行nginx;調試時候設爲off,  
 
3,error_log
格式:日誌記錄位置+級別,
若要使用debug級別,須要在編譯nginx時候要./configure --with-debug
 
總結:經常使用須要進行調整的參數worker_processes,worker_connections worker_cpu_affinity worker_priority
 
nginx命令
-?,-h : 打開幫助信息
-v : 顯示版本信息並退出
-V : 顯示版本和配置選項信息,而後退出
-t : 檢測配置文件是否有語法錯誤,而後退出
-q : 在檢測配置文件期間屏蔽非錯誤信息
-s signal : 給一個 nginx 主進程發送信號:stop(中止), quit(退出), reopen(重啓), reload(從新加載配置文件)
-p prefix : 設置前綴路徑(默認是:/usr/local/Cellar/nginx/1.2.6/)
-c filename : 設置配置文件(默認是:/usr/local/etc/nginx/nginx.conf)
-g directives : 設置配置文件外的全局指令
相關文章
相關標籤/搜索