nginx 基礎

一. 安裝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;


}

相關文章
相關標籤/搜索