nginx 簡(jiǎn)介和通用配置

nginx 簡(jiǎn)介和通用配置

簡(jiǎn)介

nginx是web服務(wù)器,由C語言開發(fā),基于事件驅(qū)動(dòng)能處理百萬級(jí)別的tcp連接,高度模塊化的設(shè)計(jì)和自由的許可證使得擴(kuò)展其功能的模塊層出不窮,跨平臺(tái)梳猪,可使用當(dāng)前操作系統(tǒng)特有的一些高效API來提高自己的性能,nginx以性能為王蒸痹。選擇nginx的核心理由是處理高并發(fā)請(qǐng)求的同時(shí)保持高效的服務(wù)舔示。

優(yōu)點(diǎn)

  • 更快

單次請(qǐng)求更快,高峰期也更快

  • 高擴(kuò)展性

極具擴(kuò)展性电抚,它由多個(gè)不同功能惕稻、不同層次、不同類型且耦合度極高的模塊組成蝙叛,這種低耦合的設(shè)計(jì)俺祠,造就了它龐大的第三方模塊

  • 高可靠性

每個(gè)worker進(jìn)程相對(duì)獨(dú)立,master進(jìn)程在某個(gè)worker進(jìn)程出錯(cuò)時(shí)能迅速拉起新的worker進(jìn)程借帘,nginx的可靠性來源于其核心框架代碼的優(yōu)秀設(shè)計(jì)蜘渣、模塊設(shè)計(jì)的簡(jiǎn)單性。官方提供的常用模塊都很穩(wěn)定肺然。

  • 低內(nèi)存消耗

一般情況下10000個(gè)非活躍的keep-alive連接僅消耗2.5M的內(nèi)存

  • 單機(jī)支持10萬以上的并發(fā)連接

nginx支持的并發(fā)連接上限取決于內(nèi)存蔫缸,10萬遠(yuǎn)沒封頂

  • 熱部署

master管理進(jìn)程

worker工作進(jìn)程

  • 最自由的BSD許可協(xié)議

nginx 配置一般分為6大塊,多數(shù)http中的配置都可以配置到server和location中

1、全局塊: 配置影響nginx全局的指令际起。一般有運(yùn)行nginx服務(wù)器的用戶組拾碌,nginx進(jìn)程pid存放路徑吐葱,日志存放路徑,配置文件引入校翔,允許生成worker process數(shù)等弟跑。

2、events塊: 配置影響nginx服務(wù)器或與用戶的網(wǎng)絡(luò)連接防症。有每個(gè)進(jìn)程的最大連接數(shù)孟辑,選取哪種事件驅(qū)動(dòng)模型處理連接請(qǐng)求,是否允許同時(shí)接受多個(gè)網(wǎng)路連接蔫敲,開啟多個(gè)網(wǎng)絡(luò)連接序列化等饲嗽。

3、http塊: 可以嵌套多個(gè)server奈嘿,配置代理喝噪,緩存,日志定義等絕大多數(shù)功能和第三方模塊的配置指么。如文件引入,mime-type定義榴鼎,日志自定義伯诬,是否使用sendfile傳輸文件,連接超時(shí)時(shí)間巫财,單連接請(qǐng)求數(shù)等盗似。

4、upstream: 配置代理服務(wù)平项,在http 模塊下赫舒,通過server端調(diào)用

5、server塊: 配置虛擬主機(jī)的相關(guān)參數(shù)闽瓢,一個(gè)http中可以有多個(gè)server

6接癌、location塊: 配置請(qǐng)求的路由,以及各種頁面的處理情況

下面是一份通用的nginx配置

# nginx 使用的用戶和組
user  www www;
# worker角色的工作進(jìn)程的個(gè)數(shù)扣讼,這個(gè)數(shù)值簡(jiǎn)單一點(diǎn)可以設(shè)置為cpu的核數(shù)grep ^processor /proc/cpuinfo | wc -l缺猛,也是auto值
worker_processes  auto;
# 指定全局日志路徑和文件名,可以在下方直接使用 [ debug | info | notice | warn | error | crit ]  參數(shù)
error_log   logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
# 指定 pid 存放的路徑
pid         logs/nginx.pid;


events {
    # nginx默認(rèn)使用epoll事件模型,: use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];具體內(nèi)容查看 http://wiki.codemongers.com/事件模型
    use epoll;
    # 每一個(gè)worker進(jìn)程能并發(fā)處理(發(fā)起)的最大連接數(shù)(包含與客戶端或后端被代理服務(wù)器間等所有連接數(shù))
    worker_connections  2048;
    # 打開同時(shí)接受多個(gè)新網(wǎng)絡(luò)連接請(qǐng)求的功能椭符。 默認(rèn)為off
    # multi_accept on; 
    # 優(yōu)化同一時(shí)刻只有一個(gè)請(qǐng)求而避免多個(gè)睡眠進(jìn)程被喚醒的設(shè)置荔燎,on為防止被同時(shí)喚醒,默認(rèn)為off
    # accept_mutex on; 
}

http {
    # 文件擴(kuò)展名與文件類型映射表销钝,設(shè)定mime類型,類型由mime.type文件定義
    include               mime.types;
    # 配置默認(rèn)的mime類型
    default_type          application/octet-stream;
    # 自定義日志格式
    #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;
    # 開啟高效文件傳輸模式有咨,對(duì)于普通應(yīng)用設(shè)為 on,如果用來進(jìn)行下載等應(yīng)用磁盤IO重負(fù)載應(yīng)用蒸健,可設(shè)置為off
    sendfile             on;
    # socket包累計(jì)到一定大小后就發(fā)送
    # tcp_nopush         on;
    # 強(qiáng)制socket在它的緩沖區(qū)里0.2秒后發(fā)送數(shù)據(jù)座享,tcp_nopush 配置和 tcp_nodelay "互斥"
    # tcp_nodelay        on;
    # 長(zhǎng)連接超時(shí)時(shí)間婉商,單位是秒
    keepalive_timeout   65;
    # 【gzip壓縮功能設(shè)置】:gzip和gzip_static模塊可以搭配使用,也可獨(dú)立使用征讲,gzip內(nèi)置据某,gzip_static官方說不內(nèi)置,上下文:http,server,location诗箍,可以使用nginx -V 來查看是否安裝某個(gè)模塊
    # 是否開啟gzip, 默認(rèn)off,符合條件的都要壓縮癣籽,使用建議搭配緩存
    # gzip                  on;
    # 是否開啟 gzip_static, 默認(rèn)off,會(huì)在同路徑下先找尋同名.gz壓縮文件滤祖,找到直接返回筷狼,未找到,壓縮后返回匠童,建議手動(dòng)壓縮
    gzip_static             on;
    # 當(dāng)返回內(nèi)容大于此值時(shí)才會(huì)使用gzip進(jìn)行壓縮埂材,以K為單位,當(dāng)值為0時(shí),所有頁面都進(jìn)行壓縮汤求。根據(jù)具體情況修改
    gzip_min_length         3k;
    # 緩沖(壓縮在內(nèi)存中緩沖幾塊? 每塊多大?)俏险,32 4K| 16 8K,建議用默認(rèn)
    # gzip_buffers          4 16k;
    # 開始?jí)嚎s的http協(xié)議版本(可以不設(shè)置,目前幾乎全是1.1協(xié)議)扬绪,1.0|1.1竖独,默認(rèn)1.1,如果是反向代理挤牛,考慮使用1.0
    gzip_http_version       1.0;
    # 設(shè)置請(qǐng)求者代理服務(wù)器,該如何緩存內(nèi)容莹痢,off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any, 默認(rèn):off
    # gzip_proxied          any
    # 推薦6 壓縮級(jí)別(級(jí)別越高,壓的越小,越浪費(fèi)CPU計(jì)算資源)
    gzip_comp_level         6;
    # 對(duì)哪些類型的文件用壓縮 如txt,xml,html ,css
    # gzip_types                text/html text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
    # 增加響應(yīng)頭”Vary: Accept-Encoding”
    gzip_vary               on;

    # 【http_proxy 設(shè)置】 上下文:http,server,location
    # 限制請(qǐng)求體的大小,若超過所設(shè)定的大小墓赴,返回413錯(cuò)誤竞膳。默認(rèn)1m
    client_max_body_size           30m;
    # 分配給請(qǐng)求數(shù)據(jù)的Buffer大小,請(qǐng)求的數(shù)據(jù)小于client_body_buffer_size直接將數(shù)據(jù)先在內(nèi)存中存儲(chǔ)诫硕。如果請(qǐng)求的值大于client_body_buffer_size小于client_max_body_size坦辟,就會(huì)將數(shù)據(jù)先存儲(chǔ)到臨時(shí)文件中,臨時(shí)文件路徑為client_body_temp
    client_body_buffer_size       128k;
    # 請(qǐng)求的數(shù)據(jù)的臨時(shí)目錄,默認(rèn)/tmp ,修改必須保證nginx具有讀寫權(quán)限
    # client_body_temp          /tmp
    # 連接代理服務(wù)器的超時(shí)時(shí)間章办,單位秒
    proxy_connect_timeout       75;
    # 代理服務(wù)器處理請(qǐng)求的超時(shí)時(shí)間长窄,單位秒
    proxy_read_timeout           75;
    # 代理服務(wù)器數(shù)據(jù)回傳超時(shí)時(shí)間,單位秒
    proxy_send_timeout           75;
    # 代理服務(wù)器錯(cuò)誤是否開啟攔截
    proxy_intercept_errors      on;
    # 開啟從后端被代理服務(wù)器的響應(yīng)body緩沖, on|off, 默認(rèn)on
    # proxy_buffering           on
    # Nginx使用該大小申請(qǐng)read_buf纲菌,即大小指定了 upstream header 最大長(zhǎng)度挠日,如果響應(yīng)頭超過了這個(gè)長(zhǎng)度,Nginx會(huì)報(bào)upstream sent too big header錯(cuò)誤翰舌,然后client收到的是502嚣潜。默認(rèn)值:proxy_buffer_size 4k/8k
    proxy_buffer_size           4k;
    # 設(shè)置存儲(chǔ)被代理服務(wù)器響應(yīng)的body所占用的buffer個(gè)數(shù)和每個(gè)buffer大小。開辟4個(gè)長(zhǎng)度為32k大小的read_buf用來存儲(chǔ)body椅贱,當(dāng)然不是連接建立初始化時(shí)就開辟4個(gè)懂算,而是當(dāng)當(dāng)前buf不夠存響應(yīng)body時(shí)才會(huì)新申請(qǐng)一個(gè)只冻,最多申請(qǐng)4個(gè)buf; 默認(rèn)值:proxy_buffers 256 8k
    proxy_buffers               4 32k;
    # nginx會(huì)在沒有完全讀完后端響應(yīng)就開始向客戶端傳送數(shù)據(jù),所以它會(huì)劃出一部分busy狀態(tài)的buffer來專門向客戶端傳送數(shù)據(jù)(建議為proxy_buffers中單個(gè)緩沖區(qū)的2倍)计技,然后它繼續(xù)從后端取數(shù)據(jù)喜德。proxy_busy_buffer_size參數(shù)用來設(shè)置處于busy狀態(tài)的buffer有多大。如果完整數(shù)據(jù)大小小于busy_buffer大小垮媒,當(dāng)數(shù)據(jù)傳輸完成后舍悯,馬上傳給客戶端;如果完整數(shù)據(jù)大小不小于busy_buffer大小睡雇,則裝滿busy_buffer后萌衬,馬上傳給客戶端;
    proxy_busy_buffers_size       64k;
    # 設(shè)置臨時(shí)文件的總大小,默認(rèn)值:proxy_max_temp_file_size 1024m;
    proxy_max_temp_file_size
    # 同時(shí)寫入臨時(shí)文件的數(shù)據(jù)量的總大小它抱。通常設(shè)置為8k或者16k秕豫。
    proxy_temp_file_write_size  64k;
    # 定義proxy的臨時(shí)文件存在目錄以及目錄的層級(jí)。語法:proxy_temp_path  path [level1 level2 level3]观蓄,默認(rèn)值proxy_temp_path proxy_temp
    # proxy_temp_path               /usr/local/nginx/proxy_temp 1 2;
  
    # 設(shè)定負(fù)載均衡后臺(tái)服務(wù)器列表混移,service:反向服務(wù)地址 加端口,weight:權(quán)重侮穿,max_fails:失敗多少次 認(rèn)為主機(jī)已掛掉則歌径,踢出,fail_timeout:踢出后重新探測(cè)時(shí)間撮珠,backup:備用服務(wù),max_conns:允許最大連接數(shù)金矛,slow_start:當(dāng)節(jié)點(diǎn)恢復(fù)芯急,不立即加入,down:表示單前的server暫時(shí)不參與負(fù)載.
    upstream  backend  { 
              # 負(fù)載均衡的分配策略驶俊,ip_hash;|fair;|hash $request_uri; hash_method crc32;  娶耍,默認(rèn)按照輪詢和權(quán)重(weight)
              ip_hash; 
              # 負(fù)載的服務(wù)器ip、端口和一些配置參數(shù)
              server   192.168.10.100:8080 max_fails=2 fail_timeout=30s ;  
              server   192.168.10.101:8080 max_fails=2 fail_timeout=30s ;  
              # 指定可用于長(zhǎng)連接的連接數(shù)
              # keepalive 16;
    }
  
    # 【虛擬主機(jī)配置】 也可以  include /etc/nginx/sites-enabled/*; 通過外部引入
    server {
        # 監(jiān)聽80端口
        listen           80;
        # 設(shè)置訪問的域名
        server_name      host.example.com;
        # 設(shè)置主機(jī)的根目錄
        root                /var/www/html/oaapp;
        # 設(shè)置編碼格式
        charset         utf-8;
        # 設(shè)定本虛擬主機(jī)的訪問日志
        access_log      /tmp/host.access.log  main;
        # 設(shè)定本虛擬主機(jī)的錯(cuò)誤日志
        error_log       /tmp/host.error.log error;
        
        #對(duì) /proxy 所有做負(fù)載均衡+反向代理
        location /proxy{
            # 匹配路 由根目錄
            root                   /var/www/html/oaapp;
            # 入口文件
            index                 index index.php index.jsp index.html index.htm;
            # 請(qǐng)求轉(zhuǎn)向backend定義的服務(wù)器列表饼酿,即反向代理
            proxy_pass            http://backend;  
            # 語法:proxy_redirect [ default|off|redirect replacement ] 默認(rèn)值:proxy_redirect default 使用字段:http, server, location
            # proxy_redirect         off;
            # 后端的Web服務(wù)器可以通過X-Forwarded-For獲取用戶真實(shí)IP
            proxy_set_header      Host  $host:$server_port;
            proxy_set_header      X-Real-IP  $remote_addr;  
            proxy_set_header      X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        }
        
        # 這.php文件的處理交給php-fpm
        location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    
    
            fastcgi_intercept_errors on;
            fastcgi_buffer_size 16k;
            fastcgi_buffers 4 16k;
            fastcgi_connect_timeout 300;
            fastcgi_send_timeout 300;
            fastcgi_read_timeout 300;
        }

        
        location ~ /\.ht {
            deny all;
        }
        # 設(shè)置404狀態(tài)的重定向頁面榕酒,可以指定本地也可以是遠(yuǎn)程url
        error_page   404  /404.html;
        location = /404.html {
            access_log logs/access.log maintry;
            proxy_pass http://192.168.10.100:8080/error404.php;
        }
        # 設(shè)置50x錯(cuò)誤的重定向頁面,可以指定本地也可以是遠(yuǎn)程url
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root           /var/www/html;
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末故俐,一起剝皮案震驚了整個(gè)濱河市想鹰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌药版,老刑警劉巖辑舷,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異槽片,居然都是意外死亡何缓,警方通過查閱死者的電腦和手機(jī)肢础,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碌廓,“玉大人传轰,你說我怎么就攤上這事」绕牛” “怎么了慨蛙?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)波材。 經(jīng)常有香客問我股淡,道長(zhǎng),這世上最難降的妖魔是什么廷区? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任唯灵,我火速辦了婚禮,結(jié)果婚禮上隙轻,老公的妹妹穿的比我還像新娘埠帕。我一直安慰自己,他們只是感情好玖绿,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布敛瓷。 她就那樣靜靜地躺著,像睡著了一般斑匪。 火紅的嫁衣襯著肌膚如雪呐籽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天蚀瘸,我揣著相機(jī)與錄音狡蝶,去河邊找鬼。 笑死贮勃,一個(gè)胖子當(dāng)著我的面吹牛贪惹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播寂嘉,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼奏瞬,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了泉孩?” 一聲冷哼從身側(cè)響起硼端,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎寓搬,沒想到半個(gè)月后显蝌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年曼尊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了酬诀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡骆撇,死狀恐怖瞒御,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情神郊,我是刑警寧澤肴裙,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站涌乳,受9級(jí)特大地震影響蜻懦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜夕晓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一宛乃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蒸辆,春花似錦征炼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至拂玻,卻和暖如春酸些,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背檐蚜。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工魄懂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人熬甚。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓逢渔,卻偏偏與公主長(zhǎng)得像肋坚,于是被迫代替她去往敵國(guó)和親乡括。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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

  • 大多數(shù) Nginx 新手都會(huì)頻繁遇到這樣一個(gè)困惑智厌,那就是當(dāng)同一個(gè)location配置塊使用了多個(gè) Nginx 模塊...
    SkTj閱讀 7,584評(píng)論 0 12
  • I/O模型: 阻塞型诲泌、非阻塞型、復(fù)用型铣鹏、信號(hào)驅(qū)動(dòng)型敷扫、異步 同步/異步:關(guān)注消息通知機(jī)制 消息通知:同步:等待對(duì)方返...
    Net夜風(fēng)閱讀 1,997評(píng)論 0 1
  • Nginx簡(jiǎn)介 解決基于進(jìn)程模型產(chǎn)生的C10K問題,請(qǐng)求時(shí)即使無狀態(tài)連接如web服務(wù)都無法達(dá)到并發(fā)響應(yīng)量級(jí)一萬的現(xiàn)...
    魏鎮(zhèn)坪閱讀 1,991評(píng)論 0 9
  • 1.簡(jiǎn)介: ? Nginx:engine X ,2002年,開源葵第,商業(yè)版? http協(xié)議:web服務(wù)器(類似于ht...
    尛尛大尹閱讀 1,860評(píng)論 0 3
  • I/O模型Nginx介紹Nginx的安裝和目錄結(jié)構(gòu)Nginx的配置Nginx的編譯安裝 一绘迁、I/O模型 (一)I/...
    哈嘍別樣閱讀 889評(píng)論 0 4