一,什麼是正向代理或者反向代理
在服務器前端,加一臺代理服務器,代理服務器也監聽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 : 設置配置文件外的全局指令