nginx工作原理舟铜、配置以及web服務(wù)器的資源請求過程

nginx簡介

Nginx是一個高性能的HTTP和反向代理web服務(wù)器辜伟,同時也提供了IMAP/POP3/SMTP服務(wù)。Nginx是由俄羅斯的伊戈爾·賽索耶夫開發(fā)的坚冀,第一個公開版本0.1.0于2004年10月10日济赎。

源代碼以類BSD許可證的形式發(fā)布,因其穩(wěn)定性记某、豐富的功能集司训、簡單的功能集、簡單的配置文件和低級系統(tǒng)的消耗而聞名液南。2011年6月1日壳猜,nginx1.0.4發(fā)布

Nginx是一款輕量級的web服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,在BSD-like協(xié)議下發(fā)行滑凉。其特點是內(nèi)存少统扳,并發(fā)能力強,事實上nginx的并發(fā)能力在同類型的網(wǎng)頁服務(wù)器中表現(xiàn)較好畅姊,中國大陸使用nginx網(wǎng)站用戶有:百度咒钟、騰訊、淘寶若未、京東等朱嘴。

nginx的特性與優(yōu)點

nginx的特性

nginx是一個很牛的高性能Web和反向代理服務(wù)器,它具有很多非常優(yōu)越的特性:

  • 在高連接并發(fā)的情況下陨瘩,nginx是Apache服務(wù)器不錯的替代品腕够,能夠支持高達50000個并發(fā)連接數(shù)的響應(yīng)
  • 使用epoll and kqueue作為開發(fā)模型
  • nginx作為負載均衡服務(wù)器:nginx既可在內(nèi)部直接支持和PHP程序?qū)ν膺M行服務(wù),也可支持作為HTTP代理服務(wù)器對外進行服務(wù)
  • nginx采用C進行編寫舌劳,不論系統(tǒng)資源開銷還是CPU使用效率都比Perlbal要好很多
nginx的優(yōu)點
  • 高并發(fā)連接:官方測試能夠支撐5萬并發(fā)連接帚湘,在實際生產(chǎn)環(huán)境中跑到2-3萬并發(fā)連接數(shù)

  • 內(nèi)存消耗少:在3萬并發(fā)連接下,開啟的10個nginx進程才消耗150M內(nèi)存(15M*10=150M)

  • 配置文件非常簡單:風(fēng)格跟程序一樣通俗易懂

  • 成本低廉:nginx為開源軟件甚淡,可以免費使用大诸。而購買F5 BIG-IP捅厂、NetScaler等硬件負載均衡交換機則需要十多萬至幾十萬人民幣

  • 支持Rewrite重寫規(guī)則:能夠根據(jù)域名、URL的不同资柔,將HTTP請求分到不同的后端服務(wù)器群組

  • 內(nèi)置的健康檢查功能:如果Nginx Proxy后端的某臺Web服務(wù)器宕機了焙贷,不會影響前端訪問

  • 節(jié)省帶寬:支持GZIP壓縮,可以添加瀏覽器本地緩存的Header頭

  • 穩(wěn)定性高:用于反向代理贿堰,宕機的概率微乎其微

  • 模塊化設(shè)計:模塊可以動態(tài)編譯

  • 外圍支持好:文檔全辙芍,二次開發(fā)和模塊較多

  • 支持熱部署:可以不停機重載配置文件

  • 支持事件驅(qū)動、AIO(AsyncIO羹与,異步IO)故硅、mmap(Memory Map,內(nèi)存映射)等性能優(yōu)化

nginx工作原理

Nginx是由內(nèi)核和模塊組成纵搁。
Nginx本身做的工作實際很少吃衅,當(dāng)它接受到一個HTTP請求時,它僅僅時通過查找配置文件將此次次請求映射到一個location block腾誉,而此location中所配置的各個指令則會啟動不同的模塊去完成工作徘层,因此模塊可以看做Nginx真正的勞動工作者。通常一個location中的指令會涉及一個handler模塊和多個filter模塊(當(dāng)然利职,多個location可以復(fù)用同一個模塊)趣效。handler模塊負責(zé)處理請求,完成響應(yīng)內(nèi)容的生成眼耀,而filter模塊對響應(yīng)內(nèi)容進行處理英支。
Nginx的模塊從結(jié)構(gòu)上分為核心模塊、基礎(chǔ)模塊和第三方模塊

  • 核心模塊:HTTP模塊哮伟、EVENT模塊和MAIL模塊

  • 基礎(chǔ)模塊:HTTP Access模塊干花、HTTP FastCGI模塊、HTTP Proxy模塊和HTTP Rewrite模塊楞黄。

  • 第三方模塊:HTTP Upstream Request Hash模塊池凄、Notice模塊和HTTP Access Key模塊。

Nginx的模塊從功能上分為如下三類:
  • Handlers(處理器模塊)鬼廓。此類模塊直接處理請求肿仑,并進行輸出內(nèi)容和修改headers信息操作。handlers處理器模塊一般只能有一個碎税。

  • Fiters(過濾模塊)尤慰。此類模塊主要對其他處理器模塊輸出的內(nèi)容進行修改操作,最后nginx輸出雷蹂。

  • Proxies(代理類模塊)伟端。此類模塊是nginx的HTTP Upstream之類的模塊,這些模塊主要與后端一些服務(wù)比如FastCGI等進行交互匪煌,實現(xiàn)服務(wù)代理和負載均衡等功能责蝠。

#######nginx進程架構(gòu)
nginx的進程架構(gòu)
啟動nginx時党巾,會啟動一個master進程,這個進程不處理任何客戶端的請求霜医,主要用來產(chǎn)生worker線程齿拂,一個worker線程用來處理n個request。
而worker線程的線程數(shù)可以根據(jù)自己的需求來進行配置

[root@localhost conf]# pwd
/usr/local/nginx/conf
[root@localhost conf]# vim nginx.conf
3 worker_processes  1;  //這個地方就是用來設(shè)置worker進程個數(shù)的
[root@localhost conf]# vim nginx.conf
3 worker_processes  3;

[root@localhost conf]# systemctl restart nginx.service 
[root@localhost conf]# ps -ef | grep nginx
root     119118      1  0 18:29 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx    119120 119118  0 18:29 ?        00:00:00 nginx: worker process
nginx    119121 119118  0 18:29 ?        00:00:00 nginx: worker process
nginx    119122 119118  0 18:29 ?        00:00:00 nginx: worker process

圖解:首先用戶通過http/https協(xié)議訪問nginx的主機肴敛,這時nginx會啟動一個master進程署海,這個進程,不處理客戶端的請求值朋,而是生成worker線程(這里是一個負載均衡集群)叹侄,通過worker線程來處理客戶端的請求巩搏,若用戶請求網(wǎng)站服務(wù)昨登,worker就會到web server這個服務(wù)集群提取對應(yīng)的資源給客戶端,同理贯底,這個Application server可以用來訪問應(yīng)用服務(wù)器丰辣,Memcached緩存服務(wù)器,backup是后端的意思禽捆。


web服務(wù)器請求資源的過程

1.客戶端發(fā)起請求笙什,然后與服務(wù)端建立tcp連接
2.服務(wù)器接收請求
3.進行反向代理,然后服務(wù)器處理請求
4.查看訪問資源的類型(可能是本地的資源胚想,也可能是通過NFS掛載的資源)
5.構(gòu)建響應(yīng)報文
6.通過網(wǎng)絡(luò)接口返回響應(yīng)報文給客戶端
7.服務(wù)端將本次的操作記錄到日志中

圖解:首先客戶端要與服務(wù)端建立連接(沒有連接就無法從服務(wù)端獲取想要的資源)我們訪問的時候都是通過域名去訪問服務(wù)端的琐凭,而域名是可以通過DNS將IP解析成域名去訪問的,所以實際上是訪問的服務(wù)器的IP浊服。
接收客戶端請求報文中記錄了對某資源的一次請求的過程统屈;服務(wù)器對請求報文進行解析,并獲取請求的資源及請求方法等相關(guān)信息牙躺,根據(jù)方法愁憔,資源,首部和可選的主體部分對請求進行處理孽拷;處理完成個之后就去對象存儲里去取相應(yīng)的資源吨掌,取到之后構(gòu)建一個響應(yīng)報文;然后將客戶請求的資源進行封裝脓恕,并通過網(wǎng)絡(luò)接口發(fā)送響應(yīng)報文膜宋,客戶端收到對應(yīng)的資源之后炼幔,web服務(wù)器會在日志文件中添加一個條目秋茫,來描述已執(zhí)行的事務(wù)。


單進程I/O模型:啟動一個進程處理用戶請求乘瓤,而且一次只處理一個萨咕,多個請求被串行響應(yīng)茫陆;
多進程I/O模型:并行啟動多個進程簿盅,每個進程響應(yīng)一個連接請求偎蘸;
復(fù)用I/O結(jié)構(gòu):啟動一個進程,同時響應(yīng)N個連接請求
復(fù)用的多進程I/O模型:啟動x個進程,每個進程響應(yīng)y個連接請求误澳,同時接收x*y個請求忆谓。

nginx的配置

nginx的編譯分為兩種:

  • 靜態(tài)編譯:靜態(tài)編譯就是編譯器在編譯可執(zhí)行文件的時候倡缠,將可執(zhí)行文件需要調(diào)用的對應(yīng)動態(tài)鏈接庫(so)中的部分提取出來琢唾,鏈接到可執(zhí)行文件中去,使可執(zhí)行文件在運行的時候不依賴于動態(tài)鏈接庫衔蹲,所以其優(yōu)缺點與動態(tài)編譯的可執(zhí)行文件正好互補
  • 動態(tài)編譯:動態(tài)編譯的可執(zhí)行文件需要附帶一個的動態(tài)鏈接庫猪落,在執(zhí)行時俱病,需要調(diào)用其對應(yīng)動態(tài)鏈接庫中的命令途凫。

所以其優(yōu)點一方面是縮小了執(zhí)行文件本身的體積阅畴,另一方面是加快了編譯速度焦匈,節(jié)省了系統(tǒng)資源。

缺點是:哪怕是很簡單的程序命辖,只用到了鏈接庫中的一兩條命令况毅,也需要附帶一個相對龐大的鏈接庫;二是如果其他計算機上沒有安裝對應(yīng)的運行庫尔艇,則用動態(tài)編譯的可執(zhí)行文件就不能運行尔许。

nginx的安裝與配置

下載nginx的源碼包
想要安裝不同的版本可以取官網(wǎng)下載:https://nginx.org/en/download.html

[root@localhost ~]# wget http://nginx.org/download/nginx-1.20.1.tar.gz

解決nginx的依賴

[root@localhost ~]# yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++ zlib make

解壓nginx的tar包

[root@localhost ~]# tar -xzf nginx-1.20.1.tar.gz -C /usr/local

創(chuàng)建系統(tǒng)用戶

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

創(chuàng)建日志存放目錄

[root@localhost ~]# mkdir -p /var/log/nginx
[root@localhost ~]# chown -R nginx.nginx /var/log/nginx

編譯安裝nginx

[root@localhost nginx-1.20.1]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-debug \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_image_filter_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--http-log-path=/var/log/nginx/access.log \
--error-log-path=/var/log/nginx/error.log

[root@localhost nginx-1.20.1]# make && make install

配置nginx環(huán)境變量

[root@localhost ~]# echo 'export PATH=/usr/local/nginx/sbin:$PATH' > /etc/profile.d/nginx.sh

[root@localhost ~]# source /etc/profile.d/nginx.sh

配置nginx的service文件使用systemctl控制nginx

[root@localhost system]# pwd
/usr/lib/systemd/system

[root@localhost system]# cat > nginx.service << EOF
[Unit]
Description=Nginx server daemon
After=network.target 

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx 
ExecStop=/usr/local/nginx/sbin/nginx -s quit
ExecReload=/bin/kill -HUP \$MAINPID

設(shè)置開機自啟

[root@localhost system]# systemctl enable --now nginx

nginx主目錄下各個目錄的作用

/usr/local/nginx/         #為服務(wù)安裝目錄,若你安裝在/opt目錄下則是/opt/nginx终娃,根據(jù)你安裝的不同目錄也不同
/usr/local/nginx/sbin  #為服務(wù)主程序目錄
/usr/local/nginx/sbin/nginx  #為服務(wù)程序文件
/usr/local/nginx/modules/  #為模塊目錄
/usr/local/nginx/conf/  #為服務(wù)的配置文件目錄
/usr/local/nginx/html/  # 為服務(wù)網(wǎng)頁根目錄
/usr/local/nginx/conf/nginx.conf  #為服務(wù)配置文件
/usr/local/nginx/logs/  #為服務(wù)日志文件目錄
/usr/local/nginx/logs/nginx.pid  #服務(wù)pid文件
/usr/local/nginx/logs/error.log  #服務(wù)錯誤日志文件
/usr/local/nginx/logs/access.log  #服務(wù)訪問日志文件

nginx服務(wù)命令

/usr/local/nginx/sbin/nginx 啟動nginx
/usr/local/nginx/sbin/nginx -v  #查看nginx版本
/usr/local/nginx/sbin/nginx -V  #顯示除版本信息意外的其他配置參數(shù)信息
/usr/local/nginx/sbin/nginx -t  #檢查nginx配置文件是否正確
/usr/local/nginx/sbin/nginx -s reload  #重新加載nginx
/usr/local/nginx/sbin/nginx -s quit #正常關(guān)閉nginx味廊,建議使用這種方式關(guān)閉nginx,這個是優(yōu)雅的關(guān)閉nginx
/usr/local/nginx/sbin/nginx -s stop  #快速關(guān)閉nginx
/usr/local/nginx/sbin/nginx -c //用來指定配置文件的路徑

nginx的配置文件詳解

主配置文件默認位置:/usr/local/nginx/conf/nginx.conf //在不指定安裝路徑的情況下

  • 默認啟動nginx時棠耕,使用的配置文件是:安裝路徑/conf/nginx.conf文件
  • 可以在啟動nginx時通過-c選項來指定要讀取的配置文件

nginx常見的配置文件及其作用

配置文件 作用
nginx.conf nginx的基本配置文件
mime.types MIME類型關(guān)聯(lián)的擴展文件
fastcgi.conf 與fastcgi相關(guān)的配置
proxy.conf 與proxy相關(guān)的配置
sites.conf 配置nginx提供的網(wǎng)站余佛,包括虛擬主機

nginx.conf配置詳解

nginx.conf的內(nèi)容分為以下幾段:

  • main配置段:全局配置段。其中main配置段中可能包含event配置段
  • event {}:定義event模型工作特性
  • http {}:定義http協(xié)議相關(guān)的配置

配置指令的語法格式

derective value1 [value2 ...];

支持使用變量:

  • 內(nèi)置變量:模塊會提供內(nèi)建變量定義
  • 自定義變量:set var_name value

檢查nginx配置文件的語法cuowu

[root@localhost conf]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

查看nginx的版本信息

[root@localhost conf]# nginx -v
nginx version: nginx/1.20.1

[root@localhost conf]# nginx -V   //-V不僅能看到nginx的版本信息窍荧,還能看到編譯nginx時編譯了那些功能等信息
nginx version: nginx/1.20.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-debug --with-http_ssl_module --with-http_realip_module --with-http_image_filter_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_stub_status_module --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log

使用nginx服務(wù)控制命令重啟并指定配置文件路徑

[root@localhost conf]# pwd
/usr/local/nginx/conf

[root@localhost conf]# cp nginx.conf mime.types /opt/
[root@localhost conf]# cd /opt/
[root@localhost opt]# ls
mime.types  nginx.conf  nginx.sh  packages
 
[root@localhost opt]# head -3 nginx.conf 

#user  nobody;
worker_processes  1;

[root@localhost opt]# nginx -s quit ; nginx -c /usr/local/nginx/conf/nginx.conf

[root@localhost opt]# head -3 /usr/local/nginx/conf/nginx.conf

#user  nobody;
worker_processes  3;

[root@localhost opt]# ps -ef | grep nginx
root      42776      1  0 11:00 ?        00:00:00 nginx: master process nginx -c /usr/local/nginx/conf/nginx.conf
nginx     42777  42776  0 11:00 ?        00:00:00 nginx: worker process
nginx     42778  42776  0 11:00 ?        00:00:00 nginx: worker process
nginx     42779  42776  0 11:00 ?        00:00:00 nginx: worker process
root      43003   1358  0 11:00 pts/0    00:00:00 grep --color=auto nginx

[root@localhost opt]# nginx -s quit ; nginx -c /opt/nginx.conf
[root@localhost opt]# ps -ef | grep nginx
root      45058      1  0 11:02 ?        00:00:00 nginx: master process nginx -c /opt/nginx.conf
nginx     45059  45058  0 11:02 ?        00:00:00 nginx: worker process
root      45134   1358  0 11:02 pts/0    00:00:00 grep --color=auto nginx
用于調(diào)試辉巡,定位問題的配置參數(shù)

是否以守護進程方式運行Nginx
守護進程(daemon)是脫離終端并且在后臺運行的進程。它脫離終端是為了避免進程執(zhí)行過程中的信息在任何終端上顯示蕊退,這樣一來郊楣,進程也不會被任何終端所產(chǎn)生的信息所打斷。Nginx毫無疑問是一個需要以守護進程方式運行的服務(wù)咕痛,因此痢甘,默認都是以這種方式運行的。

不過Nginx還是提供了關(guān)閉守護進程的模式茉贡,之所以提供這種模式塞栅,是為了方便跟蹤調(diào)試Nginx,畢竟用gdb調(diào)試進程時最煩瑣的就是如何繼續(xù)跟進fork出的子進程了。

daemon {on|off};    //是否以守護進程方式運行nginx放椰,調(diào)試時應(yīng)設(shè)置為off
master_process {on|off};    //是否以master/worker模型來運行nginx作烟,調(diào)試時可以設(shè)置為off
error_log 位置 級別;    //配置錯誤日志

用法:
Syntax: daemon on | off;   //語法
Default: daemon on;        //默認值
Context:    main           //可以配置在那個字段中
[root@localhost conf]# head -4 nginx.conf

#user  nobody;
worker_processes  3;
daemon off

[root@localhost conf]# systemctl restart nginx.service
// 此時nginx將不會以守護進程的方式運行,會一直占據(jù)著前臺屏幕  

master_process {on|off}; //是否以master/worker模型來運行nginx砾医,調(diào)試時可以設(shè)置為off

//用法
Syntax: master_process on | off;
Default:  master_process on;
Context:  main

// nginx默認是以master/worker模型來運行
[root@localhost opt]# head -4 nginx.conf 

#user  nobody;
worker_processes  1;
master_process off;

//重新讀取nginx配置文件
[root@localhost opt]# systemctl stop nginx.service ; nginx -c /opt/nginx.conf 
[root@localhost opt]# ps -ef | grep nginx
root      13256      1  0 11:47 ?        00:00:00 nginx -c /opt/nginx.conf
root      13466   1358  0 11:47 pts/0    00:00:00 grep --color=auto nginx

error_log 位置 級別; //配置錯誤日志

//用法拿撩,在不同的字段有不同的含義,比如在main字段寫就會對整個nginx產(chǎn)生影響如蚜,在http字段寫就會對某個網(wǎng)站產(chǎn)生影響

Syntax: error_log file [level];
Default: error_log logs/error.log error;
Context:  main, http, mail, stream, server, location

[root@localhost opt]# head -4 nginx.conf 

#user  nobody;
worker_processes  1;
error_log  logs/error.log;

重啟nginx服務(wù)讓配置文件生效
[root@localhost opt]# systemctl stop nginx; nginx -c /opt/nginx.conf

[root@localhost opt]# ls /usr/local/nginx/logs/
error.log  nginx.pid

[root@localhost opt]# ls /usr/local/nginx/logs/
error.log  nginx.pid
[root@localhost opt]# curl http://192.168.182.131/sx.txt
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.20.1</center>
</body>
</html>

[root@localhost opt]# cat /var/log/nginx/error.log 
2021/10/25 17:18:19 [error] 10117#0: *1 open() "/usr/local/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.182.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.182.131", referrer: "http://192.168.182.131/"
2021/10/25 18:29:13 [notice] 119113#0: signal process started
2021/10/25 18:33:46 [notice] 124307#0: signal process started
2021/10/25 19:29:31 [notice] 56895#0: signal process started
2021/10/26 10:53:47 [notice] 35176#0: signal process started
2021/10/26 10:53:47 [notice] 35188#0: signal process started
2021/10/26 10:57:44 [notice] 39890#0: signal process started
2021/10/26 10:57:44 [notice] 39893#0: signal process started

error_log里的位置和級別能有以下可選項:
位置 | 級別
file | 記錄到某個文件中
stdree | 記錄到標(biāo)準(zhǔn)錯誤中(不推薦)
syslog:server=address[,parameter=value] | 記錄到某臺日志服務(wù)器中
memory:size | 記錄到內(nèi)存中(不推薦)

日志級別 含義
debug 若要使用debug級別压恒,需要在編譯nginx時使用–with-debug選項
info 一般信息
notice 不影響正常功能,需要注意的消息
warn 可能影響系統(tǒng)功能错邦,需要提醒用戶的重要事件
error 錯誤信息(常用的)
cuit 緊急探赫,比較嚴重的
alert 必須馬上處理的
emerg 會導(dǎo)致系統(tǒng)不可用的

正常運行必備的配置參數(shù)

user USERNAME [GROUPNAME];    //指定運行worker進程的用戶和組
pid /path/to/pid_file;    //指定nginx守護進程的pid文件
worker_rlimit_nofile number;    //設(shè)置所有worker進程最大可以打開的文件數(shù),默認為1024
worker_rlimit_core size;    //指明所有worker進程所能夠使用的總體的最大核心文件大小撬呢,保持默認即可
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末伦吠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子魂拦,更是在濱河造成了極大的恐慌毛仪,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芯勘,死亡現(xiàn)場離奇詭異箱靴,居然都是意外死亡,警方通過查閱死者的電腦和手機借尿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門刨晴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人路翻,你說我怎么就攤上這事∏芽浚” “怎么了茂契?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長慨绳。 經(jīng)常有香客問我掉冶,道長,這世上最難降的妖魔是什么脐雪? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任厌小,我火速辦了婚禮,結(jié)果婚禮上战秋,老公的妹妹穿的比我還像新娘璧亚。我一直安慰自己,他們只是感情好脂信,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布癣蟋。 她就那樣靜靜地躺著透硝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪疯搅。 梳的紋絲不亂的頭發(fā)上濒生,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機與錄音幔欧,去河邊找鬼罪治。 笑死,一個胖子當(dāng)著我的面吹牛礁蔗,可吹牛的內(nèi)容都是我干的觉义。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼瘦麸,長吁一口氣:“原來是場噩夢啊……” “哼谁撼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起滋饲,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤厉碟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后屠缭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體箍鼓,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年呵曹,在試婚紗的時候發(fā)現(xiàn)自己被綠了款咖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡奄喂,死狀恐怖铐殃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情跨新,我是刑警寧澤富腊,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站域帐,受9級特大地震影響赘被,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜肖揣,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一民假、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧龙优,春花似錦羊异、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秽晚。三九已至,卻和暖如春筒愚,著一層夾襖步出監(jiān)牢的瞬間赴蝇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工巢掺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留句伶,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓陆淀,卻偏偏與公主長得像考余,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子轧苫,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

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