NGINX常用功能和配置

Nginx常用功能

1朗兵、Http代理,正向/反向代理:作為web服務(wù)器最常用的功能之一顶滩,尤其是反向代理余掖。
image

正向代理是一個位于客戶端和目標(biāo)服務(wù)器之間的代理服務(wù)器(中間服務(wù)器)。為了從原始服務(wù)器取得內(nèi)容礁鲁,客戶端向代理服務(wù)器發(fā)送一個請求盐欺,并且指定目標(biāo)服務(wù)器,之后代理向目標(biāo)服務(wù)器轉(zhuǎn)交并且將獲得的內(nèi)容返回給客戶端仅醇。正向代理的情況下客戶端必須要進(jìn)行一些特別的設(shè)置才能使用冗美。

反向代理正好相反。對于客戶端來說析二,反向代理就好像目標(biāo)服務(wù)器粉洼。并且客戶端不需要進(jìn)行任何設(shè)置∫渡悖客戶端向反向代理發(fā)送請求属韧,接著反向代理判斷請求走向何處,并將請求轉(zhuǎn)交給客戶端蛤吓,使得這些內(nèi)容就好似他自己一樣宵喂,一次客戶端并不會感知到反向代理后面的服務(wù)。

2会傲、負(fù)載均衡

Nginx提供的負(fù)載均衡策略有2種:內(nèi)置策略和擴(kuò)展策略锅棕。
以下介紹內(nèi)置策略: 輪詢,加權(quán)輪詢淌山,Ip hash哲戚。

image

Ip hash算法,對客戶端請求的ip進(jìn)行hash操作艾岂,然后根據(jù)hash結(jié)果將同一個客戶端ip的請求分發(fā)給同一臺服務(wù)器進(jìn)行處理顺少,可以解決session不共享的問題。


image
3、動靜分離

Nginx提供的動靜分離是指把動態(tài)請求和靜態(tài)請求分離開脆炎,合適的服務(wù)器處理相應(yīng)的請求梅猿,使整個服務(wù)器系統(tǒng)的性能、效率更高秒裕。

Nginx可以根據(jù)配置對不同的請求做不同轉(zhuǎn)發(fā)袱蚓,這是動態(tài)分離的基礎(chǔ)。靜態(tài)請求對應(yīng)的靜態(tài)資源可以直接放在Nginx上做緩沖几蜻,更好的做法是放在相應(yīng)的緩沖服務(wù)器上喇潘。動態(tài)請求由相應(yīng)的后端服務(wù)器處理。


配置結(jié)構(gòu)

nginx.conf由以下結(jié)構(gòu)塊構(gòu)成梭稚。


圖片.png

大致的nginx.conf文件如上颖低,而下面講解各塊的作用。

圖片.png

配置實(shí)例:

#運(yùn)行用戶
user nobody;
#啟動進(jìn)程,通常設(shè)置成和cpu的數(shù)量相等
worker_processes  1;

#全局錯誤日志及PID文件
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

#工作模式及連接數(shù)上限
events {
    #epoll是多路復(fù)用IO(I/O Multiplexing)中的一種方式,
    #僅用于linux2.6以上內(nèi)核,可以大大提高nginx的性能
    use   epoll; 

    #單個后臺worker process進(jìn)程的最大并發(fā)鏈接數(shù)    
    worker_connections  1024;

    # 并發(fā)總數(shù)是 worker_processes 和 worker_connections 的乘積
    # 即 max_clients = worker_processes * worker_connections
    # 在設(shè)置了反向代理的情況下弧烤,max_clients = worker_processes * worker_connections / 4  為什么
    # 為什么上面反向代理要除以4忱屑,應(yīng)該說是一個經(jīng)驗(yàn)值
    # 根據(jù)以上條件,正常情況下的Nginx Server可以應(yīng)付的最大連接數(shù)為:4 * 8000 = 32000
    # worker_connections 值的設(shè)置跟物理內(nèi)存大小有關(guān)
    # 因?yàn)椴l(fā)受IO約束暇昂,max_clients的值須小于系統(tǒng)可以打開的最大文件數(shù)
    # 而系統(tǒng)可以打開的最大文件數(shù)和內(nèi)存大小成正比莺戒,一般1GB內(nèi)存的機(jī)器上可以打開的文件數(shù)大約是10萬左右
    # 我們來看看360M內(nèi)存的VPS可以打開的文件句柄數(shù)是多少:
    # $ cat /proc/sys/fs/file-max
    # 輸出 34336
    # 32000 < 34336,即并發(fā)連接總數(shù)小于系統(tǒng)可以打開的文件句柄總數(shù)急波,這樣就在操作系統(tǒng)可以承受的范圍之內(nèi)
    # 所以从铲,worker_connections 的值需根據(jù) worker_processes 進(jìn)程數(shù)目和系統(tǒng)可以打開的最大文件總數(shù)進(jìn)行適當(dāng)?shù)剡M(jìn)行設(shè)置
    # 使得并發(fā)總數(shù)小于操作系統(tǒng)可以打開的最大文件數(shù)目
    # 其實(shí)質(zhì)也就是根據(jù)主機(jī)的物理CPU和內(nèi)存進(jìn)行配置
    # 當(dāng)然,理論上的并發(fā)總數(shù)可能會和實(shí)際有所偏差澄暮,因?yàn)橹鳈C(jī)還有其他的工作進(jìn)程需要消耗系統(tǒng)資源名段。
    # ulimit -SHn 65535

}


http {
    #設(shè)定mime類型,類型由mime.type文件定義
    include    mime.types;
    default_type  application/octet-stream;
    #設(shè)定日志格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    #sendfile 指令指定 nginx 是否調(diào)用 sendfile 函數(shù)(zero copy 方式)來輸出文件,
    #對于普通應(yīng)用赏寇,必須設(shè)為 on,
    #如果用來進(jìn)行下載等應(yīng)用磁盤IO重負(fù)載應(yīng)用吉嫩,可設(shè)置為 off价认,
    #以平衡磁盤與網(wǎng)絡(luò)I/O處理速度嗅定,降低系統(tǒng)的uptime.
    sendfile     on;
    #tcp_nopush     on;

    #連接超時時間
    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay     on;

    #開啟gzip壓縮
    gzip  on;
    gzip_disable "MSIE [1-6].";

    #設(shè)定請求緩沖
    client_header_buffer_size    128k;
    large_client_header_buffers  4 128k;


    #設(shè)定虛擬主機(jī)配置
    server {
        #偵聽80端口
        listen    80;
        #定義使用 www.nginx.cn訪問
        server_name  www.nginx.cn;

        #定義服務(wù)器的默認(rèn)網(wǎng)站根目錄位置
        root html;

        #設(shè)定本虛擬主機(jī)的訪問日志
        access_log  logs/nginx.access.log  main;

        #默認(rèn)請求
        location / {
            
            #定義首頁索引文件的名稱
            index index.php index.html index.htm;   

        }

        # 定義錯誤提示頁面
        error_page   500 502 503 504 /50x.html;
        location = /50x.html {
        }

        #靜態(tài)文件,nginx自己處理
        location ~ ^/(images|javascript|js|css|flash|media|static)/ {
            
            #過期30天用踩,靜態(tài)文件不怎么更新渠退,過期可以設(shè)大一點(diǎn),
            #如果頻繁更新脐彩,則可以設(shè)置得小一點(diǎn)碎乃。
            expires 30d;
        }

        #PHP 腳本請求全部轉(zhuǎn)發(fā)到 FastCGI處理. 使用FastCGI默認(rèn)配置.
        location ~ .php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include fastcgi_params;
        }

        #禁止訪問 .htxxx 文件
            location ~ /.ht {
            deny all;
        }

    }
}

反向代理配置

代理轉(zhuǎn)發(fā)是在server下面的location進(jìn)行配置, 首先定義一個server監(jiān)聽某個端口

# 全匹配代理轉(zhuǎn)發(fā)
 location / {
         proxy_pass http://www.example.com/;
}

# proxy_pass參數(shù)中如果不包含url的路徑,則會將location的pattern識別的路徑作為絕對路徑
# 匹配符如果末尾攜帶/則url中剩余內(nèi)容也會轉(zhuǎn)發(fā)
 location ^~/japan/ {
      proxy_pass http://japanapi.example.com/;
     proxy_set_header Host japanapi.example.com;
 }

location ^~/japan {
    proxy_pass http://japanapi.example.com;
   proxy_set_header Host japanapi.example.com;
}

SSL證書配置

1惠奸、配置SSL證書到Nginx中

linux系統(tǒng)梅誓,推薦將證書文件放到/etc/ssl/目錄下

2、添加一個server節(jié)點(diǎn)
http{
    #http節(jié)點(diǎn)中可以添加多個server節(jié)點(diǎn)
    server{
        #監(jiān)聽443端口
        listen 443;
        #對應(yīng)的域名,把baofeidyz.com改成你們自己的域名就可以了
        server_name example.com;
        ssl on;
        #從騰訊云獲取到的第一個文件的全路徑
        ssl_certificate /etc/ssl/1_baofeidyz.com_bundle.crt;
        #從騰訊云獲取到的第二個文件的全路徑
        ssl_certificate_key /etc/ssl/2_baofeidyz.com.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
        #這是我的主頁訪問地址梗掰,因?yàn)槭褂玫氖庆o態(tài)的html網(wǎng)頁嵌言,所以直接使用location就可以完成了。
        location / {
                #文件夾
                root /usr/local/service/ROOT;
                #主頁文件
                index index.html;
        }
    }

}
3及穗、http 80端口重定向
 server{
        listen 80;
        server_name baofeidyz.com;
        rewrite ^/(.*)$ https://example.com:443/$1 permanent;
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末摧茴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子埂陆,更是在濱河造成了極大的恐慌苛白,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件焚虱,死亡現(xiàn)場離奇詭異购裙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)著摔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進(jìn)店門缓窜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谍咆,你說我怎么就攤上這事禾锤。” “怎么了摹察?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵恩掷,是天一觀的道長。 經(jīng)常有香客問我供嚎,道長黄娘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任克滴,我火速辦了婚禮逼争,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘劝赔。我一直安慰自己誓焦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布着帽。 她就那樣靜靜地躺著杂伟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪仍翰。 梳的紋絲不亂的頭發(fā)上赫粥,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天,我揣著相機(jī)與錄音予借,去河邊找鬼越平。 笑死频蛔,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的秦叛。 我是一名探鬼主播帽驯,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼书闸!你這毒婦竟也來了尼变?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤浆劲,失蹤者是張志新(化名)和其女友劉穎嫌术,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體牌借,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡度气,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了膨报。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片磷籍。...
    茶點(diǎn)故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖现柠,靈堂內(nèi)的尸體忽然破棺而出院领,到底是詐尸還是另有隱情,我是刑警寧澤够吩,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布比然,位于F島的核電站,受9級特大地震影響周循,放射性物質(zhì)發(fā)生泄漏强法。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一湾笛、第九天 我趴在偏房一處隱蔽的房頂上張望饮怯。 院中可真熱鬧,春花似錦嚎研、人聲如沸蓖墅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽置媳。三九已至于樟,卻和暖如春公条,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背迂曲。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工靶橱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓关霸,卻偏偏與公主長得像传黄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子队寇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 參考:https://www.cnblogs.com/zhouxinfei/p/7862285.html 侵刪 n...
    會飛的魚_500閱讀 1,229評論 0 1
  • nginx概述 nginx是一款自由的膘掰、開源的、高性能的HTTP服務(wù)器和反向代理服務(wù)器佳遣;同時也是一個IMAP识埋、PO...
    逝者如斯灬閱讀 3,420評論 0 16
  • Nginx簡介 解決基于進(jìn)程模型產(chǎn)生的C10K問題,請求時即使無狀態(tài)連接如web服務(wù)都無法達(dá)到并發(fā)響應(yīng)量級一萬的現(xiàn)...
    魏鎮(zhèn)坪閱讀 2,005評論 0 9
  • Nginx 常用的功能: 1、Http正向代理零渐、反向代理 正向代理和反向代理的區(qū)別:1窒舟、正向代理:類似我們想要訪問...
    不拘繩墨閱讀 169評論 1 0
  • 1.簡介: ? Nginx:engine X ,2002年诵盼,開源惠豺,商業(yè)版? http協(xié)議:web服務(wù)器(類似于ht...
    尛尛大尹閱讀 1,867評論 0 3