一. 安裝nginx所需的包:
gcc, gcc-c++
yum install -y gcc gcc-c++
pcre庫,若是配置文件有正則表達式須要安裝這個庫。
yum install -y pcre pcre-devel
3. zlib 庫
zlib庫用於http包內容作gzip格式壓縮。
yum install -y zlib zlib-devel
4. openssl開發庫
若是服務器不僅支持http,還須要在更安全的ssl協議上傳輸http
yum install -y openssl openssl-devel
二. 一些概念
nginx 有一個master進程和多個worker進程,master不接受請求,只是管理worker進程,當一個worker進程出現故障時,master會自動起一個worker進程。worker進程的數量通常和cpu核數量相同,這正是nginx和apache不一樣之處,apache每個進程在一個時候只處理一個請求,所以,若是但願web服務器擁有併發處理數量更多, 就要吧apache的進程或線程數設置的更多,通長會達到一臺服務器擁有幾百個工做進程,這樣大的進程間切換帶來無畏的系統資源消耗。而nginx則否則,一個worker進程之間處理併發請求是幾乎沒有同步限制鎖,worker進程一般不會進入睡眠狀態,所以,當nginx上的進程數與cpu核心數相等時(最好每個worker進程都綁定特定的cpu核心),進程間切換的代價是最小的。
三. 基本命令
daemon on|off 守護進程
master_process on|off 以master和worker方式工做
error_log /path/file level 日誌設置
include /path/file 嵌入其餘配置文件
pid path/file 保存master進程ID的pid文件存放路。
worker_rlimit_nofile limit; 設置一個worker進程能夠打開的最大文件句柄數
worker_processes number; 定義worker進程的數量,每一個worker進程都是單線程的進程,他們會調用各個模塊以實現多種多樣的功能。若是這些模塊確認不會出現阻塞式的調用。那麼,有多少cpu內核就應該配置多少個進程;反之,若是有可能出現阻塞式調用,那麼須要配置多一些的worker進程。通常和cpu核數相同
worker_cpu_affinity 1000 0100 0010 0001 綁定cpu核
accept_mutext on; nginx的負載均衡的鎖。
worker_connections numner; worker的最大的鏈接數
use epoll/select; 選擇事件模型;
location:
/ 只有用戶請求是/時,纔會使用該location的配置
~表示匹配URL時是字母大小寫敏感的
~*表示匹配URl是忽略大小寫問題
^~表示匹配URl時只須要其前半部分與url參數匹配
location ^~ /images/ {
# 以/image/開始的請求都會匹配上
}
5. @表示僅用於nginx內部請求之間的重定向,不直接處理用戶請求
location ~* \. (gif|jpg|jpeg)${ 匹配 以 .jpg, .jpg, .jpeg結尾的請求
}
location是有順序的, 當一個請求有可能匹配多個location時,實際上這個請求會被第一個location處理,
通常把location / {} 這個請求放在最後。
root path
location /download/ {
root /opt/web/html/;
}
alias path; 是用來設置資源路徑的,和root類似,它與root不一樣點主要在於如何解讀緊跟location後面的url參數,這將會導致alias和root以不一樣的方式將用戶請求映射到真正的磁盤文件上。
例如 要訪問/conf/nginx.conf, 而實際這個路徑是/usr/local/nginx/conf/nginx.conf
location /conf {
alias /usr/local/nginx/conf/;
}
location /conf {
root /usr/local/nginx/:
}
使用alias時,在url向實際文件路徑的映射過程當中,已經把location後配置的/conf這部分字符串丟棄掉。而root則是全路徑,因此root能夠放在http,server,location或if中,而alias只能放咋唉location中。
alias後還能夠添加正則表達式
keepalive_disable 對某些瀏覽器禁用keepalive功能。
keepalive_timeout time; 設置tcp關閉的超時時間。
keepalive_requests 100; 一個keepalive鏈接上默認最多隻能發送100個請求。
tcp_nopush on; 在打開senfile選項時,肯定是否開啓TCP_CORK功能。打開tcp_nopush後,將會在發送響應時
把整個響應頭放到一個tcp包中發送。
allow 容許指定的IP地址或IP地址段訪問某些虛擬主機或目錄
deny 禁止指定的IP地址或IP段訪問某些虛擬主機或目錄
sendfile 系統調用,能夠啓用Linux上的sendfile系統調用來發送文件。它減小了內核態與用戶態之間的兩次內存複製
這樣就會從磁盤中讀取文件後直接在內核態發送到網卡設備,提升了發送文件的效率。
upstream模塊。
做爲代理服務器,通常都須要向上遊服務器的集羣轉發請求。這裏的負載均衡是指選擇以種策略,儘可能把請求平均地發佈到每一臺上游服務器。
upstream塊定義了一個上游服務器的集羣,便於反向代理中的proxy_pass使用。
upstream backend {
server backend1.example.com;
.....
}
server{
location / {
proxy_pass http://backend;
}
}
weight=number 設置向這臺上遊服務器轉發的權重,默認是1
down 表示所在的上游服務器永久下線,只有使用ip_ hash配置項是纔有用
ip_hash 在有些場景,咱們可能會但願某一個用戶訪問一臺服務器上,有不少緩存什麼的。
ip_hash就是解決這個問題。它會跟據用戶客戶端的ip地址算出一個key,將key按按照upstream集羣裏的上游服務器數量進行取模,把這個結果發送上游服務器中。這樣就確保同一個客戶端的請求只會轉發到指定的上游服務器中,ip_hash不能同時使用
反向代理的基本配置
proxy_pass URL; (location, if)
此配置項將當前請求反向代理到URL參數指定的服務器上,url能夠是主機, IP地址,或者負載均衡的名字
proxy_method
轉發是的協議名 proxy_method POST/GET; (http, server, loation) html
server_names_hash_bucket_size 128; nginx
client_max_body_size 50m; 限定nginx上傳文件大小。 c++
gzip 配置: web
gzip是一種壓縮技術。通過gzip壓縮後頁面大小能夠變爲原來的30%甚至更小,這樣,用戶瀏覽頁面的時候速度會快得多。它和瀏覽器中的gzip是對應的。 正則表達式
gzip on; 開啓gzip apache
gzip_min_length 1k; 瀏覽器
設置容許壓縮頁面最小字節數,頁面字節數從hesader頭頭得content-length中進行獲取。默認值是0,無論頁面多大都壓縮。建議設置成大於1k的字節數,小於1k可能會越壓越大。 緩存
gzip_buffers 4 16k;
設置系統獲取幾個單位的緩存用於存儲gzip的壓縮結果數據流。4 16k表明以16k爲單位,安裝原始數據大小以16k爲單位的4倍申請內存。 安全
gzip_http_version 1.1;
識別http的協議版本(1.0/1.1) 服務器
gzip_comp_level 2;
gzip壓縮比,1壓縮比最小處理速度最快,9壓縮比最大但處理速度最慢(傳輸快但比較消耗cpu)
gzip_vary on;
和http頭有關係,加個vary頭,給代理服務器用的,有的瀏覽器支持壓縮,有的不支持,因此避免浪費不支持的也壓縮,因此根據客戶端的HTTP頭來判斷,是否須要壓縮
gzip_disable 「MSIE [1-6].(?!.*SV1)」;#ie6不支持gzip,須要禁用掉ie6,可惡啊!!!!
valid_referers
這個指令在referer頭的基礎上爲 $invalid_referer 變量賦值,其值爲0或1。能夠使用這個指令來實現防盜鏈功能,若是valid_referers列表中沒有Referer頭的值, $invalid_referer將被設置爲1(參照前例)。
location /ff/ {
valid_referers www.baidu.com;
if ( $invalid_referer ){
# $invalid_referer 兩邊要有空格
return 403;
}