Nginx基礎(chǔ)配置

一.I/O介紹

httpdMPM

  1. perfork:一個(gè)master進(jìn)程開(kāi)啟多個(gè)子進(jìn)程,master只負(fù)責(zé)讀取配置文件和生成子進(jìn)程萧恕,子進(jìn)程只負(fù)責(zé)處理每一個(gè)進(jìn)程

  2. worker:一個(gè)master進(jìn)程開(kāi)啟多個(gè)子進(jìn)程矿卑,每一個(gè)子進(jìn)程復(fù)制開(kāi)啟多個(gè)線程夷陋,每一個(gè)線程負(fù)責(zé)相應(yīng)一個(gè)請(qǐng)求

  3. event:事件驅(qū)動(dòng)竞慢,一個(gè)進(jìn)程可以處理多個(gè)請(qǐng)求

??網(wǎng)絡(luò)IO:本質(zhì)是socket讀取,數(shù)據(jù)收到請(qǐng)求织狐,進(jìn)入網(wǎng)卡暂幼,應(yīng)用程序就要讀取數(shù)據(jù)就是I,用戶準(zhǔn)備好數(shù)據(jù)移迫,相應(yīng)數(shù)據(jù)就是O旺嬉,都是從socket中IO

??硬盤(pán)IO:用戶空間給內(nèi)核發(fā)送指令,讓內(nèi)核從磁盤(pán)讀取數(shù)據(jù)起意,內(nèi)核將數(shù)據(jù)存入內(nèi)核空間鹰服,然后賦值給用戶空間病瞳,這個(gè)過(guò)程就發(fā)生了一次硬盤(pán)IO

同步和異步:關(guān)心的是消息的通訊機(jī)制

同步:調(diào)用者自動(dòng)等待被調(diào)用返回消息揽咕,才能繼續(xù)執(zhí)行悲酷。

異步:被調(diào)用者通過(guò)狀態(tài),通知回調(diào)機(jī)制亲善,回調(diào)機(jī)制主動(dòng)通知調(diào)用者被調(diào)用者的狀態(tài)设易。

阻塞和非阻塞:關(guān)心的是用戶是否等待

阻塞:指IO操作需要徹底完成才返回到用戶空間,調(diào)用結(jié)果返回前蛹头,調(diào)用者被掛起

非阻塞:指IO操作需要徹底完成后才返回到用戶空間顿肺,調(diào)用結(jié)果返回前,調(diào)用者不會(huì)被掛起

同步阻塞IO模型:

??用戶發(fā)送請(qǐng)求訪問(wèn)頁(yè)面渣蜗,內(nèi)核解開(kāi)封裝屠尊,然后內(nèi)核將數(shù)據(jù)包發(fā)送給Nginx進(jìn)程,Nginx查看MIME類型耕拷,然后發(fā)送指令讓內(nèi)核訪問(wèn)硬盤(pán)讀取數(shù)據(jù)讼昆,然后內(nèi)核將數(shù)據(jù)放在緩沖區(qū),將數(shù)據(jù)復(fù)制給進(jìn)程空間骚烧,Ninx在將數(shù)據(jù)發(fā)送給用戶浸赫。缺點(diǎn):CPU利用不高

PIO:CPU全程參與

DMA:只是發(fā)送指令,不直接參與


image.png

同步非阻塞IO模型

??進(jìn)程發(fā)送請(qǐng)求赃绊,請(qǐng)求發(fā)送給內(nèi)核既峡,內(nèi)核去磁盤(pán)中訪問(wèn)數(shù)據(jù),將數(shù)據(jù)存放在緩沖區(qū)碧查,然后在復(fù)制到進(jìn)程的內(nèi)存空間运敢,在這個(gè)過(guò)程中,進(jìn)程不會(huì)等待么夫,但是需要一次 一次來(lái)詢問(wèn)者冤,從另外一個(gè)角度看,進(jìn)程來(lái)詢問(wèn)請(qǐng)求是否完成也是一個(gè)CPU資源的浪費(fèi)


image.png

IO多路復(fù)用模型

??在接受請(qǐng)求之前增加了一個(gè)系統(tǒng)條用(select只是其中一個(gè))档痪,有系統(tǒng)調(diào)用來(lái)幫進(jìn)程處理后面的事涉枫,系統(tǒng)調(diào)用程序可以同時(shí)接受多個(gè)進(jìn)程訪問(wèn),但是該模型也是會(huì)阻塞腐螟,子select開(kāi)始時(shí)會(huì)阻塞

應(yīng)用場(chǎng)景:

  1. 當(dāng)客戶端處理多個(gè)描述符時(shí)愿汰,一般是交互式輸入和網(wǎng)絡(luò)套接字

  2. 一個(gè)客戶端同時(shí)處理多個(gè)套接字

  3. 當(dāng)一個(gè)TCP服務(wù)器既要處理監(jiān)聽(tīng)套接字,又要處理已經(jīng)連接的套接字

  4. 當(dāng)一個(gè)服務(wù)器既要處理TCP乐纸,又要處理UDP

  5. 當(dāng)一個(gè)服務(wù)器要處理多個(gè)服務(wù)或多個(gè)協(xié)議


    image.png

    信號(hào)驅(qū)動(dòng)IO模型:

??阻塞在內(nèi)核到進(jìn)程空間拷貝數(shù)據(jù)階段衬廷,前面的階段可以繼續(xù)執(zhí)行其他操作,用戶進(jìn)程通過(guò)sigaction系統(tǒng)注冊(cè)一個(gè)信號(hào)處理程序


image.png

異步IO模型:

??整個(gè)過(guò)程都不會(huì)阻塞汽绢,但是該模型內(nèi)核比較繁忙吗跋,進(jìn)程比較輕松,但是進(jìn)程可以處理更多的用戶請(qǐng)求,所以每一個(gè)進(jìn)程可以支持更多的并發(fā)鏈接


image.png

主要使用IO復(fù)用和信號(hào)驅(qū)動(dòng)IO模型

主要實(shí)現(xiàn):

select:Linux實(shí)現(xiàn)跌宛,IO復(fù)用模型酗宋,支持各種操作系統(tǒng),Apache使用疆拘。

poll:Linux實(shí)現(xiàn)蜕猫,IO復(fù)用模型,system V哎迄。

epoll:Linux實(shí)現(xiàn)回右,IO復(fù)用模型,具有信號(hào)驅(qū)動(dòng)IO模型的某些特性漱挚,Nginx能夠?qū)崿F(xiàn)高并發(fā)就是因?yàn)槭褂胑poll翔烁。


image.png

水平觸發(fā):如果報(bào)告進(jìn)程后沒(méi)有被處理,那么下次poll還會(huì)再次報(bào)告旨涝。

邊緣觸發(fā):只通知一次租漂,epoll支持。

epoll:支持水平觸發(fā)和邊緣觸發(fā)颊糜,只會(huì)告訴一次哩治,沒(méi)有并發(fā)連接限制,能打開(kāi)1024(1G的內(nèi)存能監(jiān)聽(tīng)10萬(wàn)個(gè)端口)
不會(huì)隨著fd數(shù)目的增加而效率下降衬鱼。

mmap():直接內(nèi)存讀取业筏,文件映射,就是將磁盤(pán)的文件直接映射到內(nèi)存中來(lái)提高訪問(wèn)速度鸟赫。

二蒜胖、Nginx基礎(chǔ)

Nginx主要功能:

  1. WEB服務(wù)器
  2. 反向代理
  3. 郵件服務(wù)器反向代理
  4. 基于TCP協(xié)議代理,偽4層調(diào)度器

反向代理作用:

  1. 負(fù)載均衡抛蚤,Nginx可以通過(guò)upstream模塊實(shí)現(xiàn)負(fù)載均衡台谢。
  2. 安全性,真正的服務(wù)器不會(huì)暴露在外網(wǎng)岁经,客戶端不會(huì)直接接觸WEB服務(wù)器朋沮。
  3. 動(dòng)靜分離,將文件直接分開(kāi)調(diào)度到不同的服務(wù)器缀壤,也可以通過(guò)客戶端調(diào)度到不同的服務(wù)器樊拓。
  4. 檢查后端服務(wù)器的健康狀態(tài)。
  5. 可以在反向代理服務(wù)器上增加緩存塘慕。
  6. 支持模塊化筋夏。
  7. 支持fastCGI和uWCGI。

sedfile:直接在內(nèi)核空間相應(yīng)用戶图呢,加快訪問(wèn)速度条篷。

Nginx框架

  1. 虛擬機(jī)
  2. 支持長(zhǎng)連接和管道連接
  3. 支持日志
  4. URL rewirte:地址重寫(xiě)
  5. 路徑別名
  6. 基于IP及用戶的訪問(wèn)
  7. 平滑升級(jí)骗随,可以不斷業(yè)務(wù)的升級(jí),舊的子進(jìn)程還會(huì)繼續(xù)訪問(wèn)正在連接的用戶請(qǐng)求赴叹,等待完成后才會(huì)將舊進(jìn)程停止
  8. 支持速率及并發(fā)數(shù)限制
  9. 支持Memcached的GET接口
    image.png

    Nginx服務(wù)的主要功能:
    1.WEB服務(wù)器
    2.反向代理服務(wù)器
    3.負(fù)載均衡
    4.fastCGI
    5.動(dòng)靜分離蚊锹,根據(jù)需求調(diào)度服務(wù)器
    6.安全,外網(wǎng)不會(huì)直接接觸
    7.支持緩存稚瘾,可以加速訪問(wèn)

Nginx程序結(jié)構(gòu)

master/worker結(jié)構(gòu),一個(gè)master進(jìn)程至負(fù)責(zé)加載和分析配置文件姚炕,管理worker進(jìn)程摊欠,平滑升級(jí),一個(gè)或多個(gè)worker進(jìn)程處理相應(yīng)用戶請(qǐng)求

核心模塊:

http模塊柱宦、mail模塊些椒、TCP的stream模塊

第三方模塊

Nginx軟件包文件說(shuō)明

軟件包:Nginx,需要epel源

配置文件

/etc/nginx/nginx.conf:主配置文件

/etc/nginx/nginx.conf.default:默認(rèn)配置文件

/usr/sbin/nginx:主程序

/var/log/nginx:日志文件

/usr/lib64/nginx/modules:模塊目錄

/etc/nginx/conf.d/*.conf:擴(kuò)展配置文件

相關(guān)命令:

nginx:?jiǎn)?dòng)服務(wù)掸刊,測(cè)試使用
nginx -s reload或stop:用來(lái)重讀配置文件或停止服務(wù)
      -T:測(cè)試并且打印到屏幕
      -h:命令幫助
      -c:用來(lái)檢測(cè)指定配置文件

三免糕、常用配置參數(shù)

配置文件格式

main
envents {

}
http {
    server {
        listen 80;
        root 主目錄;
        index 主頁(yè);
        alias
        location / {
             rewrite 
        }
    }
    include ;
    server{
        listen 443;    
    }
}
mail {
    mail協(xié)議相關(guān)配置段;
}
stream {
    stream,tcp調(diào)度服務(wù)器相關(guān)配置段;
}

main常見(jiàn)配置
1.user:指定提供服務(wù)的用戶忧侧,默認(rèn)指定哪個(gè)用戶石窑,就用同用戶名的組

user nginx;

2.pid /PATH:定義pid文件路徑及文件名

pid /run/nginx.pid;

3.include:定義其他的擴(kuò)展配置

include /usr/share/nginx/modules/*.conf;

4.load_module file:調(diào)用模塊路徑

include /usr/share/nginx/modules/*.conf;  #定義模塊路徑

性能相關(guān)配置
1.worker_processes:定義worker進(jìn)程打開(kāi)數(shù)量,通常應(yīng)該為主機(jī)CPU的物理核心數(shù)

worker_processes auto;

2.worker_cpu_affinity:將每個(gè)CPU綁定到某個(gè)CPU蚓炬,提高緩存命中率松逊,默認(rèn)不存在,CPU核心數(shù)使用二進(jìn)制使用

worker_cpu_affinity 0001 0010 0100 1000;

3.worker_priority:指定worker進(jìn)程的nice值肯夏,優(yōu)先級(jí)-20~19经宏,默認(rèn)不存在

worker_priority 0:默認(rèn)為0
ps axo pid,cmd驯击,psr烁兰,ni |grep nginx #查看進(jìn)程工作在那個(gè)cpu上

4.worker_rlimit_nofile:worker進(jìn)程所能夠打開(kāi)的文件數(shù)量上限,默認(rèn)不存在

worker_rlimit_nofiler nuber

事件驅(qū)動(dòng)相關(guān)的配置

events {
    worker_connetions 1024;
}

1.worker_connetions:每個(gè)worker進(jìn)程所能打開(kāi)的最大并發(fā)連接數(shù)徊都,總的最大并發(fā)數(shù)=worker_processes*worker_connetions

worker_connetions 1024;

2.use:指明并發(fā)連接請(qǐng)求的處理方法沪斟,默認(rèn)自動(dòng)選擇最優(yōu)方法epoll,無(wú)需修改

use epoll;

3.accept_mutex:互斥暇矫,處理新的連接請(qǐng)求的方法币喧,on指由各個(gè)worker輪流處理請(qǐng)求,off指每個(gè)新請(qǐng)求到達(dá)時(shí)袱耽,都會(huì)通知所有的worker進(jìn)程杀餐,只有一個(gè)進(jìn)程可獲得連接,造成驚群朱巨,影響性能史翘,默認(rèn)on;

accept_mutex on|off;

調(diào)試和定位
1.daemon:是否以守護(hù)進(jìn)程方式運(yùn)行nginx,默認(rèn)為守護(hù)進(jìn)程的方式琼讽,若關(guān)閉則表示占用終端的方式運(yùn)行服務(wù)

daemon on|off

2.master_process:是否以master/worker模型運(yùn)行nginx必峰,默認(rèn)為on,off則不會(huì)在開(kāi)啟worker進(jìn)程钻蹬,若關(guān)閉吼蚁,則master直接提供服務(wù)

master_process on|off

3.error_log file或error_log level:定義錯(cuò)誤日志路徑,或定義日志的級(jí)別

level:debug|info|notice|warn|error|crit|alter|emerg
error_log /var/log/nginx/error.log;

server配置段
ngx_http_core_module:模塊名
1.server {}:虛擬主機(jī)

server{
    listen 80问欠;
    root /path;
    index index.html;
    ......
}

2.listen:指定監(jiān)聽(tīng)端口或IP地址

listen 80肝匆;
listen IP地址:port;
listen hostname;

3.server_name:虛擬主機(jī)的名稱,表示只要可以解析顺献,那么就是在網(wǎng)頁(yè)中輸入的RUL
匹配優(yōu)先級(jí)機(jī)制從高到低:

  • 字符精確匹配
  • 左側(cè)*通配符
  • 右側(cè)*通配符
  • 正則表達(dá)式
  • default_server
server_name www.lin.com web.lin.com;
server_name *.lin.com
server_name www.lin.com
server_name ~^.*\.lin\.$

4.tcp_nodelay:在長(zhǎng)連接狀態(tài)下旗国,是否啟用tcp_nodelay選項(xiàng),當(dāng)為off時(shí)注整,將延遲發(fā)送能曾,將不夠一個(gè)數(shù)據(jù)包的數(shù)據(jù)等待后面的數(shù)據(jù)一塊發(fā)送,會(huì)影響速度肿轨,默認(rèn)為ON寿冕,不延遲發(fā)送

tcp_nodelay on|off

5.sendfile:是否開(kāi)啟在內(nèi)核中封裝報(bào)文直接發(fā)送,默認(rèn)off

sendfile on|off

6.server_tokens:是否在相應(yīng)文本server首部顯示nginx的版本椒袍,商業(yè)版或自己編譯源碼可以定制顯示版本

server_tokens on|off|build|string

7.root:指定訪問(wèn)網(wǎng)站的路徑

root /var/www/html;

8.location:在server配置段為特定的路徑進(jìn)行其他的配置
在location中可以對(duì)URI進(jìn)行精確匹配或模糊匹配
=:對(duì)URI做精確匹配
^~:對(duì)URI最左側(cè)部分做匹配檢查蚂斤,不區(qū)分字符大小寫(xiě)
~:對(duì)URI做正則表達(dá)式模式匹配,區(qū)分大小寫(xiě)
~:對(duì)URI做正則表達(dá)式模式匹配槐沼,不區(qū)分字符大小寫(xiě)
不帶符號(hào):匹配起始于URL的所有的URI
匹配優(yōu)先級(jí)從高到低:
=,^~ /
,不帶符號(hào)

server{
    root /path;
    location / {
        root /path/path;
    }
}
location ~ / {
    alias /web/webser1;   #在訪問(wèn)網(wǎng)站的根時(shí)曙蒸,相當(dāng)于訪問(wèn)/web/webser1目錄下的網(wǎng)站
}

9.alias:路徑別名,文檔映射的另一種機(jī)制岗钩,僅能夠使用在location上下文
location中的alias和root的指令意義不同
root:給定的路徑對(duì)應(yīng)于location中的uri左側(cè)的/
alias:給定的路徑對(duì)應(yīng)于location中的url右側(cè)的/

location / {
    alias /web;  #在訪問(wèn)網(wǎng)站的/目錄時(shí)纽窟,實(shí)際上就是訪問(wèn)/web目錄下的資源
}

10.index:定義網(wǎng)站的主頁(yè),可以定義多個(gè),若定義多個(gè)主頁(yè)格式兼吓,則誰(shuí)在前誰(shuí)優(yōu)先

index index.html index.php;

11.error_page:錯(cuò)誤頁(yè)面臂港,若輸入的頁(yè)面不存在,則可以指定錯(cuò)誤頁(yè)面

error_page 404 /錯(cuò)誤頁(yè)面;
error_page 404 =200 /錯(cuò)誤頁(yè)面;  #有些瀏覽器看到錯(cuò)誤頁(yè)面會(huì)顯示瀏覽器自定義錯(cuò)誤頁(yè)面视搏,可以顯示正確代碼來(lái)確定顯示自己指定的錯(cuò)誤頁(yè)面

12.try_files:按順序檢查文件是否存在审孽,最后一個(gè)頁(yè)面必須存在,否則返回網(wǎng)頁(yè)錯(cuò)誤代碼

try_files $uri /app/$uri uri =錯(cuò)誤代碼;
server{
        listen 80;
        server_name www.lin.com;
        root /app/web/webser1/;
        index index.html;
        location / {
                try_files $uri  /test/$uri =404;  #該參數(shù)在后面指定文件不存在浑娜,則尋找后面的目錄中是否有該文件佑力,一直找到最后,若都沒(méi)有則顯示后面指定的錯(cuò)誤代碼筋遭,若沒(méi)有指定打颤,則顯示500服務(wù)器錯(cuò)誤代碼
        }
}

定義客戶端請(qǐng)求相關(guān)配置
13.keepalive_timeout:設(shè)定保持連接超時(shí)時(shí)長(zhǎng)暴拄,0表示禁止長(zhǎng)連接,默認(rèn)為75s

keepalive_timeout 0;

14.keepalive_requests:設(shè)置一次長(zhǎng)連接上所允許請(qǐng)求資源的最大數(shù)量

keepalive_requests 100;

15.keepalive_diable:對(duì)那種瀏覽器禁用長(zhǎng)連接

keepalive_disble none|browser;

16.send_timeout time:兩次寫(xiě)操作之間的間隔時(shí)長(zhǎng)编饺,不是整個(gè)相應(yīng)過(guò)程的輸出時(shí)長(zhǎng)

send_timeout 10;

17.client_bady_buffer_size:用于接受每個(gè)客戶端請(qǐng)求報(bào)文的body部分緩沖區(qū)的大小乖篷,默認(rèn)16k,超出的部分將被暫存到磁盤(pán)上有client_body_temp_path參數(shù)來(lái)控制

client_bady_buffer_size 16k;

18.client_body_temp_path: 指定超過(guò)緩存區(qū)大小的部分存放位置透且,并且根據(jù)hash值32中取幾位創(chuàng)建目錄來(lái)加速訪問(wèn)撕蔼,根據(jù)16進(jìn)制數(shù)來(lái)創(chuàng)建,其中數(shù)字代表去16進(jìn)制的幾位

client_bady_temp_path path 1 2; #表示第一級(jí)目錄取1位16進(jìn)制數(shù)秽誊,第二級(jí)目錄取2位  0-f

19.limit_rate:限制相應(yīng)給客戶端的傳輸速率鲸沮,0表示不限速

limit_rate 0;

20.limit_except method {}:僅用于location,限制除了指定請(qǐng)求方法之外的其他方法
GET, HEAD, POST, PUT, DELETE养距,MKCOL, COPY, MOVE, OPTIONS, PROPFIND,PROPPATCH, LOCK, UNLOCK, PATCH

limit_except GET{  #除了GET之外的其他方法允許還有拒絕
    allow 192.168.1.0/24; 
    deny all;
}

文件操作優(yōu)化的配置
21.aio:是否開(kāi)啟aio功能
22.directio:是否同步寫(xiě)磁盤(pán)

aio on;
directio size|off;

23.open_file_cache:是否允許緩存數(shù)據(jù)的元數(shù)據(jù)日熬,若超過(guò)則按照LRU算法管理棍厌,將最久的刪除

open_file_cache off;
open_file_cache max=N [inactive=time];
nginx可以緩存以下三種數(shù)據(jù)
1.文件元數(shù)據(jù):文件的描述符,文件大小和最近一次的修改時(shí)間
2.打開(kāi)的目錄結(jié)構(gòu)
3.沒(méi)有找到的或沒(méi)有訪問(wèn)的文件相關(guān)信息
max=N:可緩存的上限竖席,達(dá)到上限后會(huì)使用LRU算法實(shí)現(xiàn)管理
inactive=time:緩存項(xiàng)的非活動(dòng)時(shí)長(zhǎng)耘纱,在此處指定的時(shí)長(zhǎng)內(nèi)未被命中的或命中次數(shù)少于open_file_cache_min_uses指令所指定的次數(shù)的緩存項(xiàng)及非活動(dòng)項(xiàng),將被刪除

24.open_file_cache_errors:是否緩存查找時(shí)發(fā)生的文件一類的信息默認(rèn)值為off

open_file_cache_errors on|off;

25.open_file_cache_min_uses:open_file_cache指令的inactive參數(shù)指定的時(shí)長(zhǎng)內(nèi)毕荐,至少命中此處指定的次數(shù)才能被歸類為活動(dòng)項(xiàng)束析,默認(rèn)1

open_file_cache_min_uses 1;

26.open_file_cache_vaid:緩存項(xiàng)有效性的檢查頻率,默認(rèn)60

open_file_cache_valid 60;

基于IP地址的訪問(wèn)控制
ngx_http_access_module模塊
1.allow:允許訪問(wèn)

allow all|IP地址|網(wǎng)段;

2.deny:拒絕訪問(wèn)

deny all|IP地址|網(wǎng)段;

例如

location /admin {  #僅允許一個(gè)IP地址進(jìn)入該目錄下憎亚,其他用戶不允許進(jìn)入
    allow 192.168.1.1;
    deny all;
}

基于用戶的訪問(wèn)控制员寇,使用basic機(jī)制進(jìn)行用戶認(rèn)證
ngx_http_auth_basic_module模塊
1.auth_basic定義顯示字符串

auth_basic string|off;

2.auth_basic_user_file:指定用戶認(rèn)證文件,nginx沒(méi)有專門(mén)生成賬戶密碼的命令需要使用htpasswd來(lái)實(shí)現(xiàn)

location /admin/ {
    auth_basic "admin page";
    auth_basic_user_file /etc/nginx/.ngxpasswd;
}

nginx基本狀態(tài)信息網(wǎng)頁(yè)
ngx_http_stub_status_module模塊

location /status {
    stub_status;  #必須添加第美,若需要訪問(wèn)控制蝶锋,可以根據(jù)allow和deny來(lái)控制,也可以根據(jù)用戶來(lái)控制
    allow 172.16.0.1;
    deny all;
}

日志格式記錄請(qǐng)求
ngx_http_log_module模塊
1.log_format:定義日志格式什往,該命令需要在http代碼段中指定扳缕,不可以在server中指定

log_format compression '$remote_addr-$remote_user [$time_local] '
'"$request" $status $bytes_sent'
'"$http_referer" "$http_user_agent" "$gzip_ratio"';

2.access_log:指定日志路徑 緩存大小 緩存時(shí)間 壓縮比

access_log /var/log/nginx/www.lin.com.access_log buffer=32k gzip=6;

3.open_log_file_cache:緩存各日志文件相關(guān)的元數(shù)據(jù)信息
用gzip方法壓縮相應(yīng)數(shù)據(jù),節(jié)約帶寬
1.gzip:關(guān)閉或關(guān)閉gzip壓縮

gzip on|off;

2.gzip_comp_level:定義壓縮級(jí)別1-9

gzip_comp_level 9;

3.gzip_disable:匹配到的客戶端瀏覽器不執(zhí)行壓縮

gzip_disable regex;#匹配條件可以使用正則表達(dá)式

4.gzip_min_length:?jiǎn)⒂脡嚎s功能的相應(yīng)報(bào)文大小閾值

gzip_min_length 100K;

5.gzip_http_version:設(shè)置啟用壓縮功能别威,協(xié)議最小版本躯舔,默認(rèn)為1.1

gzip_http_version 1.1;

6.gzip_buffers:指定支持實(shí)現(xiàn)壓縮功能緩沖區(qū)數(shù)量及每個(gè)緩沖區(qū)大小

gzip_buffers 32 4k;指定幾個(gè)搂橙,指定大小

7.gzip_types :指定僅對(duì)那些類型的資源執(zhí)行壓縮髓迎,默認(rèn)包含有text/html,不用顯示指定叛买,否則就會(huì)出錯(cuò)豺妓,可以根據(jù) /etc/mime.types或者根據(jù)nginx軟件包自帶的類型/etc/nginx/mime.types

gzip_types mime-type飒赃; #設(shè)置類型利花,不用添加text/html類型

8.gzip_vary:如果啟用壓縮,是否在相應(yīng)報(bào)文首部插入"vary:Accept-Encoding"

gzip_vary on|off;

9.gzip_proxied:nginx對(duì)于代理服務(wù)器請(qǐng)求的相應(yīng)報(bào)文载佳,在任何條件下啟用壓縮功能

gzip_proxixd off|expired|no-cache|no-store|prvate|no_last_modified|no_etag|auth|any;
off:對(duì)代理的請(qǐng)求不啟用壓縮
expired,no-cache,no-store,private:對(duì)代理服務(wù)器請(qǐng)求的相應(yīng)報(bào)文首部cache-control值任何一個(gè)炒事,啟用壓縮功能

例如

server{
        listen 80;
        server_name www.lin.com;
        root /app/web/webser1/;
        gzip on;
        gzip_comp_level 9;
        gzip_min_length 100k;
        gzip_buffers 32 4k;
        gzip_types  text/plain;
}

ssl加密
ngx_http_ssl_module模塊
1.ssl:是否開(kāi)啟https功能

ssl on|off;

2.ssl_certificate:指定當(dāng)前虛擬主機(jī)使用的公鑰文件

ssl_certificate /path;  #公鑰文件

3.ssl_certificate_key:指定當(dāng)前虛擬主機(jī)使用的私鑰文件

ssl_certificate_key /path; #私鑰文件

4.ssl_protocols:定義支持協(xié)議版本

ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];  #定義支持協(xié)議版本,默認(rèn)支持后三個(gè)版本

5.ssl_session_cache:定義worker進(jìn)程是否有緩存蔫慧,緩存時(shí)每一個(gè)worker都有單獨(dú)的緩存空間挠乳,也可以多個(gè)worker公用一個(gè)共享空間
off:關(guān)閉
none:實(shí)際沒(méi)有緩存,但是會(huì)告訴客戶端可以緩存
builtin:為每個(gè)worker進(jìn)程創(chuàng)建緩存空間
shared:在各個(gè)worker之間使用一個(gè)共享的緩存

ssl_session_cache off|none|builtin:size|shared:name:size;

6.ssl_session_timeout:客戶端連接可以復(fù)用ssl_session_cache中緩存的sll參數(shù)的有效時(shí)長(zhǎng)姑躲,默認(rèn)5m

ssl_session_timeout 5m;

例如
1.生成公鑰和私鑰文件睡扬,這里使用的時(shí)自簽名證書(shū)文件

[root@vs webser1]# cd /etc/pki/tls/certs/
[root@vs certs]# make nginx.key  #這里需要輸入私鑰密碼
[root@vs certs]# openssl rsa -in nginx.key -out nginx.key  #解開(kāi)私鑰密碼,不然在每此啟動(dòng)服務(wù)都需要輸入密碼
[root@vs certs]# make nginx.crt #生成自簽名證書(shū)文件
[root@vs certs]# cp nginx.* /etc/nginx/conf.d/ #將證書(shū)文件復(fù)制到指定目錄下
[root@vs conf.d]# vim test.conf 
server{
        listen 443 ssl;
        server_name www.lin.com;
        root /app/web/webser1/;
        index index.html;
        ssl_certificate /etc/nginx/conf.d/nginx.crt;
        ssl_certificate_key /etc/nginx/conf.d/nginx.key;
        ssl_session_cache builtin:1000 shared:SSL:10m;
        ssl_session_timeout 5m;
}

rewrite:將用戶請(qǐng)求的URI基于條件匹配所描述的模式進(jìn)行檢查黍析,而后完成重定向替換
ngx_http_rewrite_module:模塊

1.rewrite:將一個(gè)URI路徑轉(zhuǎn)換成另外一個(gè)路徑
rewrite 匹配路徑 改變路徑 last|break|redirect|permanent卖怜;
last:重寫(xiě)完成后停止對(duì)當(dāng)前URI在當(dāng)前l(fā)ocation中后續(xù)的其他重寫(xiě)操作,而后對(duì)新的URI啟動(dòng)新一輪重寫(xiě)檢查阐枣,提前重啟新一輪循環(huán)
break:重寫(xiě)完成后停止對(duì)當(dāng)前URI在當(dāng)前l(fā)ocation中后續(xù)的其他重寫(xiě)操作马靠,而后直接跳轉(zhuǎn)至重寫(xiě)規(guī)則匹配塊之后的其他配置,結(jié)束循環(huán)蔼两,建議在location中使用
redirect:臨時(shí)重定向甩鳄,重寫(xiě)完成后以臨時(shí)重定向方式直接返回重寫(xiě)后新生成的新URI給客戶端,由客戶端重新發(fā)起請(qǐng)求额划,不能以http://或https://開(kāi)頭妙啃,使用相對(duì)路徑,狀態(tài)碼302
permanent:重寫(xiě)完成后以永久重定向直接返回重寫(xiě)生成的新URI給客戶端俊戳,由客戶端重新發(fā)起請(qǐng)求揖赴,狀態(tài)碼301

例如,該參數(shù)不可以重新定義root目錄

server{
        listen 80;
        server_name www.lin.com;
        root /app/web/;
        index index.html;
        location /webser1 {
                rewrite ^/webser1/(.*)$ /webser2/$1 break;
        }
}

2.return:停止處理抑胎,并返回給客戶端指定的響應(yīng)嗎

return 500储笑;
return URL;
return 301|302 URL; #不可以寫(xiě)錯(cuò)誤代碼,錯(cuò)誤代碼則顯示后面RUL地址圆恤,不會(huì)跳轉(zhuǎn)

3.rewrite_log:是否開(kāi)啟重寫(xiě)日志突倍,發(fā)送至err_log

rewrite_log on|off;

4.set $variable value:
5.if (條件) {}: 引入新的上下文,條件滿足時(shí)盆昙,執(zhí)行配置塊中的配置指令羽历,server,location淡喜,conditi on
比較操作符
==:相等
!=:不同
~:模式匹配秕磷,區(qū)分字符大小寫(xiě)
~:模式匹配,不區(qū)分字符大小寫(xiě)
!~:模式不匹配炼团,區(qū)分大小寫(xiě)
!~
:模式不匹配澎嚣,不區(qū)分字符大小寫(xiě)
文件及目錄存在性判斷:
-e疏尿,!-e:存在,包括文件易桃,目錄褥琐,軟連接
-f,!-f:文件
-d晤郑,!-d:目錄
-x敌呈,!-x:執(zhí)行

if ($http_user_agent ~ MSIE) {
    rewrite ^(.*)$ /msie/$1 break;
}
if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
    set $id $1;
}
if ($request_method = POST) {
    return 405;
}
if ($slow) {
    limit_rate 10k;
}
if ($invalid_referer) {
    return 403;
}

防盜鏈技術(shù)
1.valid_referers:定義referer首部的合法可用值,不能匹配的將時(shí)非法值
none:請(qǐng)求報(bào)文沒(méi)有referer首部
blocked:請(qǐng)求報(bào)文有referer首部造寝,但無(wú)有效值
server_names:參數(shù)磕洪,其可以有值作為主機(jī)名或主機(jī)模式
arbitrary_string:任意字符串,但可使用作通配符
regular:被指定的正則表達(dá)式模式匹配到的字符串诫龙,要使用開(kāi)頭析显,例如:
.magedu.com

valid_referers none block server_names *.magedu.com *.mageedu.com magedu.* mageedu.* ~\.magedu\.; #定義不被拒絕的referers首部合法
if ($invalid_referer) {  #表示只要不包括上面指定的,全部都拒絕
    return 403;
}

ngx_http_proxy_module代理模塊:
1.proxy_pass:匹配指定的路徑签赃,若匹配則重新定義到某個(gè)服務(wù)器谷异,可以放到location,if中

server {
...
server_name HOSTNAME;
location ~|~* /uri/ {
    proxy_pass http://host; #不能加/,加上/則表示置換姊舵,相當(dāng)于alias
}
...
}

2.proxy_set_header:詳情求報(bào)文中增加內(nèi)容晰绎,因?yàn)樘砑哟碇笤⒙洌诤蠖朔?wù)器上顯示訪問(wèn)網(wǎng)站的來(lái)源全部都是代理服務(wù)器括丁,所以需要增加該內(nèi)容
1.在代理服務(wù)配置文件中設(shè)置

proxy_set_header 字段名  $remote_addr(表示客戶端地址)

2.在真是服務(wù)器上將日志格式修改
在日志格式出增增加

%{字段名}i  #在日志logformat定義格式中增加即可,若需要重新定義伶选,則需要重新引用
$remote_addr #當(dāng)前面只有一個(gè)代理時(shí)
$X-Forwarded-For #當(dāng)前面不止一個(gè)代理服務(wù)器時(shí)史飞,使用該服務(wù)器

3.proxy_cache_path:定義緩存路徑,將特定數(shù)據(jù)分成兩部分仰税,數(shù)據(jù)本身放到磁盤(pán)上构资,數(shù)據(jù)名字做hash做運(yùn)算,放入內(nèi)存的表中陨簇,將hash值分成若干個(gè)段吐绵,然后根據(jù)hash的位數(shù)來(lái)分層創(chuàng)建目錄
該命令是定義,只能存放到http中

proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size[inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
path :路徑
levels:級(jí)別
use_temp_path=on|off:是否開(kāi)啟臨時(shí)目錄                                                               
keys:指定誰(shuí)做hash值河绽,起個(gè)名稱

調(diào)用定義好的緩存
4.proxy_cache:指明調(diào)用的緩存己单,或關(guān)閉緩存功能

proxy_cache keys_zone指定的name |off            

5.proxy_cache_key $request_uri :緩存中用于的鍵的內(nèi)容 ```bash
proxy_cache_key $request_uri;

6.proxy_cache_valid:定義對(duì)特定響應(yīng)碼的響應(yīng)內(nèi)容的緩存時(shí)長(zhǎng)
```bash
proxy_cache_valid 200 302 301 1h;
proxy_cache_valid any 1m;

7.proxy_cache_use_stale:在被代理的后端服務(wù)器出現(xiàn)那種情況下,可以直接使用過(guò)期相應(yīng)客戶端

proxy_cache_use_stale error|timeout|invalid_header|updating|http_500|http_502|http_503|http_504|http_403|http_404|off;

8.proxy_cache_methods:定義那些HEAD方法可以緩存默認(rèn)之后GET耙饰,HEAD

proxy_cache_methods GET HEAD;

9.proxy_hide_header:隱藏后端的一些信息纹笼,默認(rèn)隱藏

proxy_hide_header Server; #定義隱藏后端服務(wù)器特定的相應(yīng)首部

10.prixy_connect_timeout time:定義后端服務(wù)器建立連接的時(shí)長(zhǎng),不要設(shè)置太長(zhǎng)苟跪,默認(rèn)60廷痘,一般不建議超過(guò)75s

prixy_connect_timeout 60; #默認(rèn)定義與后端服務(wù)器建立連接的時(shí)長(zhǎng)蔓涧,默認(rèn)60s

11:proxy_send_timeout:把請(qǐng)求發(fā)送給后端服務(wù)器對(duì)的超時(shí)時(shí)間,默認(rèn)60s

proxy_send_timeout 60笋额;

12:proxy_read_timeout:等待后端服務(wù)器發(fā)送相應(yīng)報(bào)文的超時(shí)時(shí)長(zhǎng)元暴,默認(rèn)60s

proxy_read_timeout 60;

實(shí)例
1.定義配置文件中的緩存定義
http代碼段

proxy_cache_path /app/cache levels=1:2:2 keys_zone=cache:20m inactive=120s max_size=1g;

2.擴(kuò)展配置文件鳞陨,可以在server也可以在location昨寞,if中定義

server{
        listen 80;
        server_name www.lin.com;
        root /app/web/webser1/;
        index index.html;
        location / {
                proxy_pass http://192.168.1.142;
                proxy_cache cache;
                proxy_cache_key $request_uri;
                proxy_cache_valid 200 301 302 1h;
                proxy_cache_valid any 1m;
        }
}

修改數(shù)據(jù)包的首部信息和尾部信息
ngx_http_headers_module模塊
1.add_header name value:首部信息

add_header server test;

2.add_trailer name value:尾部信息

add_header server test;

fastcgi模塊
Nginx默認(rèn)不支持php請(qǐng)求,需要fastcgi來(lái)發(fā)送到能處理到服務(wù)器上
代理功能可以是同構(gòu)協(xié)議厦滤,也可以是異構(gòu)協(xié)議
ngx_http_fastcgi_module模塊援岩,不支持php模塊模式的fpm,只能是單獨(dú)的php-fpm
1.fastcgi_pass address:后端fastcgi server的地址掏导,放到location if中
2.fastcgi_index name :指定默認(rèn)主頁(yè)資源
3.fastcgi_param:文件路徑
1.在后端安裝單獨(dú)的php-fpm軟件享怀,來(lái)處理php類型的網(wǎng)頁(yè)

[root@cip ~]# yum install -y php-fpm.x86_64
vim /etc/php-fpm.d/www.conf  #至少修改兩處,
listen = 9000
listen.allowed_clients = 127.0.0.1,192.168.1.137

2.設(shè)置代理服務(wù)器

server{
        listen 80 default_server;
        server_name www.lin.com;
        root /app/web/webser1/;
        index index.html;
        location ~ \.php {
                fastcgi_pass 192.168.1.142:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME /app/php$fastcgi_script_name;
                include fastcgi_params;
        }
}

1.在后端安裝單獨(dú)的php-fpm軟件趟咆,來(lái)處理php類型的網(wǎng)頁(yè)

[root@cip ~]# yum install -y php-fpm.x86_64
vim /etc/php-fpm.d/www.conf  #至少修改兩處添瓷,
listen = 9000
listen.allowed_clients = 127.0.0.1,192.168.1.137
pm.status_path = /status
ping.path = /ping

2.設(shè)置代理服務(wù)器

server{
        listen 80 default_server;
        server_name www.lin.com;
        root /app/web/webser1/;
        index index.php index.html;
        location ~ / {
                fastcgi_pass 192.168.1.142:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME /app/php$fastcgi_script_name;
                include fastcgi_params;
        }
        location ~ ^/(status|ping)$ {
                fastcgi_pass 192.168.1.142:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME /app/php$fastcgi_script_name;
                include fastcgi_params;
        }
}

4.fastcgi_cache_path:定義緩存,需要在http代碼代碼段中定義

fastcgi_cache_pathpath [levels=levels] [use_temp_path=on|off] keys_zone=name:size[inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
path:緩存位置為磁盤(pán)上的文件系統(tǒng)
max_size:磁盤(pán)path路徑中用于緩存數(shù)據(jù)的緩存空間上限
levels=leves:緩存目錄的層級(jí)數(shù)量值纱,以及每一集的目錄數(shù)量
keys_zone=name:size:定義映射在內(nèi)存中的名稱以及大小
inactive=time:非活動(dòng)時(shí)長(zhǎng)

5.fastcgi_cache:調(diào)用緩存空間來(lái)緩存數(shù)據(jù)

fastcgi_cache zone|off;

6.fastcgi_cache_key:定義用作緩存項(xiàng)的key的字符串

fastcgi_cache_key $requost_uri;

7.fastcgi_cache_methods:那些請(qǐng)求方法使用緩存

fastcgi_cache_methods GET|HEAD|POST;

8.fastcgi_cache_min_uses:緩存空間的緩存項(xiàng)存在inactive定義的非活動(dòng)時(shí)間內(nèi)至少要訪問(wèn)到此處指定的次數(shù)方可被認(rèn)作活動(dòng)項(xiàng)

fastcgi_cache_min_uses number;

9.fastcgi_keep_conn:收到后端服務(wù)器相應(yīng)后鳞贷,fastcgi服務(wù)器是否關(guān)閉連接,建議啟用長(zhǎng)連接

fastcgi_keep_conn on|off;

10.fastcgi_cache_valid:不同響應(yīng)碼各自的緩存時(shí)長(zhǎng)

fastcgi_cache_valid time;

實(shí)驗(yàn):利用上面已經(jīng)搭建好的環(huán)境虐唠,來(lái)添加加速
1.在http代碼段定義fastcgi

fastcgi_cache_path /app/fastcgi levels=1:2:2 keys_zone=fastcgi:20m inactive=120s max_size=1g;

2.在server中調(diào)用定義好的fastcgi

server{
        listen 80 default_server;
        server_name www.lin.com;
        root /app/web/webser1/;
        index index.php index.html;
        location ~ / {
                fastcgi_pass 192.168.1.142:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME /app/php$fastcgi_script_name;
                include fastcgi_params;
                fastcgi_cache fastcgi; #若需要關(guān)閉緩存則搀愧,直接off即可
                fastcgi_cache_key $request_uri;
                fastcgi_cache_min_uses 1;
                fastcgi_cache_valid 200 301 302 10m;
                fastcgi_cache_valid any 1m;
        }
        location ~ ^/(status|ping)$ {
                fastcgi_pass 192.168.1.142:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME /app/php$fastcgi_script_name;
                include fastcgi_params;
        }
}

實(shí)現(xiàn)調(diào)度功能
ngx_http_upstream_module模塊
1.upstream name {server ;server ;}:指定調(diào)度主機(jī),定義在http中

upstream name {
    server IP地址 ;
    server IP地址:port疆偿;
    server IP地址:prot weight=2 max_conns=最大連接數(shù)咱筛,1.11.5版本之后才支持 max_fails=1(默認(rèn)選項(xiàng)為1)bakup;#增加權(quán)重
}

2.server:指定后端服務(wù)端的主機(jī)IP地址:port

upstream name {
    server IP地址:port weight=1;
    server IP地址:port;
}
weight=number:權(quán)重,默認(rèn)為1
max_conns:連接后端服務(wù)器最大并發(fā)活動(dòng)鏈接數(shù)杆故,1.11.5后支持
max_fails=number:失敗嘗試最大連接次數(shù)
fail_timeout=time:后端服務(wù)器標(biāo)記位不可用狀態(tài)的連接超時(shí)時(shí)長(zhǎng)迅箩,默認(rèn)10s
backup:將服務(wù)器標(biāo)記為備用,即所有服務(wù)器均不可用時(shí)才啟用
down:標(biāo)記為不可用处铛,配合ip_hash使用饲趋,實(shí)現(xiàn)灰度發(fā)布

3.ip_hash:原地址hash調(diào)度方法,根據(jù)客戶端訪問(wèn)服務(wù)器的IP地址來(lái)調(diào)度到同一臺(tái)服務(wù)器上
4.least_conn:最少連接調(diào)度算法撤蟆,當(dāng)server擁有不同的權(quán)重時(shí)奕塑,其為wlc,當(dāng)所有后端主機(jī)連接數(shù)相同時(shí)枫疆,則使用wrr爵川,適用于長(zhǎng)連接
5.hash key consistent:基于指定的key的hash表來(lái)實(shí)現(xiàn)對(duì)請(qǐng)求的調(diào)度,此處key可以直接文本息楔,變量或二者組合
作用:將請(qǐng)求分類寝贡,同一類請(qǐng)求將發(fā)布同一個(gè)upstream server扒披,使用consistent參數(shù),將使用ketama一致性hash算法圃泡,適用于后端時(shí)cache服務(wù)器碟案,比如varnish時(shí)使用

hash $request_uri consistent;
hash $remote_addr;

6.keepalive:為每一個(gè)worker進(jìn)程保留的空閑的長(zhǎng)連接數(shù)量,可節(jié)約nginx端口颇蜡,并減少連接管理的消耗

keepalive 10;

7价说、health_check[parameters];
健康狀態(tài)檢測(cè)機(jī)制;只能用于location上下文
常用參數(shù):

interval=time檢測(cè)的頻率风秤,默認(rèn)為5秒
fails=number:判定服務(wù)器不可用的失敗檢測(cè)次數(shù)鳖目;默認(rèn)為1次
passes=number:判定服務(wù)器可用的失敗檢測(cè)次數(shù);默認(rèn)為1次
uri=uri:做健康狀態(tài)檢測(cè)測(cè)試的目標(biāo)uri缤弦;默認(rèn)為/
match=NAME:健康狀態(tài)檢測(cè)的結(jié)果評(píng)估調(diào)用此處指定的match配置塊
注意:僅對(duì)nginxplus有效

8 match name { ... }
對(duì)backend server做健康狀態(tài)檢測(cè)時(shí)领迈,定義其結(jié)果判斷機(jī)制;只能用于http上下文
常用的參數(shù):

status code[ code ...]: 期望的響應(yīng)狀態(tài)碼
header HEADER[operator value]:期望存在響應(yīng)首部碍沐,也可對(duì)期望的響應(yīng)首部的值基于比較操作符和值進(jìn)行比較
body:期望響應(yīng)報(bào)文的主體部分應(yīng)該有的內(nèi)容
注意:僅對(duì)nginxplus有效
upstream backend {
    server backend1.example.com route=a;
    server backend2.example.com route=b;
    sticky cookie srv_id expires=1h domain=.example.com path=/;
}

stream:模擬反向代理狸捅,基于tcp或udp的服務(wù)連接
ngx_stream_core_module模塊

1.stream{}:定義stream相關(guān)服務(wù),必須放到main中累提,和http同級(jí)
stream {
       upstream mysqldb{
           server 192.168
       }
       server{
           listen
           
       }
}

編譯安裝
1.獲取安裝包

2.創(chuàng)建用戶

[root@localhost ~]#  useradd -r -s /sbin/nologin nginx

3.準(zhǔn)備編譯所需要的軟件包

[root@localhost nginx-1.12.2]# yum groupinstall -y "Development Tools"
[root@localhost nginx-1.12.2]# yum install -y pcre-devel openssl-devel

4.編譯

./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --user=nginx--group=nginx--with-http_ssl_module --with-http_v2_module --with-http_dav_module --with-http_stub_status_module --with-threads --with-file-aio
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末尘喝,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子斋陪,更是在濱河造成了極大的恐慌朽褪,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鳍贾,死亡現(xiàn)場(chǎng)離奇詭異鞍匾,居然都是意外死亡交洗,警方通過(guò)查閱死者的電腦和手機(jī)骑科,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)构拳,“玉大人咆爽,你說(shuō)我怎么就攤上這事≈蒙” “怎么了斗埂?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)凫海。 經(jīng)常有香客問(wèn)我呛凶,道長(zhǎng),這世上最難降的妖魔是什么行贪? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任漾稀,我火速辦了婚禮模闲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘崭捍。我一直安慰自己尸折,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布殷蛇。 她就那樣靜靜地躺著实夹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪粒梦。 梳的紋絲不亂的頭發(fā)上亮航,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音匀们,去河邊找鬼塞赂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛昼蛀,可吹牛的內(nèi)容都是我干的宴猾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼叼旋,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼仇哆!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起夫植,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤讹剔,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后详民,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體延欠,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年沈跨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了由捎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡饿凛,死狀恐怖狞玛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情涧窒,我是刑警寧澤心肪,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站纠吴,受9級(jí)特大地震影響硬鞍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一固该、第九天 我趴在偏房一處隱蔽的房頂上張望碑隆。 院中可真熱鬧,春花似錦蹬音、人聲如沸上煤。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)劫狠。三九已至,卻和暖如春永部,著一層夾襖步出監(jiān)牢的瞬間独泞,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工苔埋, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留懦砂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓组橄,卻偏偏與公主長(zhǎng)得像荞膘,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子玉工,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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

  • 1. Nginx的模塊與工作原理 Nginx由內(nèi)核和模塊組成羽资,其中,內(nèi)核的設(shè)計(jì)非常微小和簡(jiǎn)潔遵班,完成的工作也非常簡(jiǎn)單...
    rosekissyou閱讀 10,214評(píng)論 5 124
  • 第一章 Nginx簡(jiǎn)介 Nginx是什么 沒(méi)有聽(tīng)過(guò)Nginx屠升?那么一定聽(tīng)過(guò)它的“同行”Apache吧!Ngi...
    JokerW閱讀 32,672評(píng)論 24 1,002
  • Nginx簡(jiǎn)介 解決基于進(jìn)程模型產(chǎn)生的C10K問(wèn)題,請(qǐng)求時(shí)即使無(wú)狀態(tài)連接如web服務(wù)都無(wú)法達(dá)到并發(fā)響應(yīng)量級(jí)一萬(wàn)的現(xiàn)...
    魏鎮(zhèn)坪閱讀 2,003評(píng)論 0 9
  • 上一篇《WEB請(qǐng)求處理一:瀏覽器請(qǐng)求發(fā)起處理》狭郑,我們講述了瀏覽器端請(qǐng)求發(fā)起過(guò)程腹暖,通過(guò)DNS域名解析服務(wù)器IP,并建...
    七寸知架構(gòu)閱讀 81,002評(píng)論 21 356
  • 1.簡(jiǎn)介: ? Nginx:engine X 翰萨,2002年脏答,開(kāi)源,商業(yè)版? http協(xié)議:web服務(wù)器(類似于ht...
    尛尛大尹閱讀 1,867評(píng)論 0 3