Nginx學習筆記2之nginx反向代理和負載均衡模塊

一、ngx_http_proxy_module模塊

The ngx_http_proxy_module module allows passing requests to another server险污;允許將請求報文傳遞給另外一臺服務器痹愚。

1. proxy_pass URL;
  • Context:location,if in location蛔糯,limit_except

配置示例1:
我們以lvs-nat模式構建的虛擬環(huán)境演示nginx的反代功能拯腮,Director上雙網卡,公網192.168.43.110蚁飒,私網192.168.128.129动壤,并安裝nginx,RS1私網地址192.168.128.111淮逻,RS2私網地址192.168.128.122配置反代服務

      [root@localhost ~]# yum -y install nginx
      [root@localhost ~]# yum -y install nginx/conf.d
      [root@localhost conf.d]# vim ilinux.conf
          #編輯如下配置內容
          server {
                listen 80;
                server_name www.ilinux.io;
                location / {
                        proxy_pass http://192.168.128.111:80;    #反代服務指向后端的RS1
                }
            }
       [root@localhost conf.d]# nginx -t
       [root@localhost conf.d]# systemctl start nginx.service
       #反代服務已經配置好琼懊,使用外部主機訪問本機測試
       [root@localhost ~]# curl http://www.ilinux.io
        <h1>RS1,192.168.1.111</h1>

配置第二臺后端主機,使其能顯示圖片:

#在RS2:
[root@rs2 ~]# find /usr/share -iname "*.jpg" -exec cp {} /var/www/html/ \;    #在httpd默認目錄下面復制幾張圖片以便測試
#在Director上編輯nginx配置文件
[root@localhost nginx]# vim /etc/nginx/conf.d/ilinux.conf
    location ~* \.(jpg|png|peng)$ {
            proxy_pass http://192.168.128.122:80;
    }

訪問測試:


default.png
  • 注意:
    • <1> proxy_pass 后面的路徑不帶uri時爬早,其會將location的url傳遞給后端主機

    • <2> proxy_pass 后面的路徑是個uri時肩碟,其會將location的uri替換為proxy_pass 的uri替換為proxy_pass的uri

    • <3> 如果location 定義uri時使用了正則表達式的模式,或在if語句或limt_execept中使用proxy_pass指令凸椿,則proxy_pass之后必須不能使用uri,用戶請求時傳遞的uri將直接附加代理到的服務的之后翅溺;

      示例2:

        #在Director上編輯nginx配置文件
        [root@localhost nginx]# vim /etc/nginx/conf.d/ilinux.conf
            server {
                listen 80;
                server_name www.ilinux.io;
                location / {
                        root /web/nginx/html;
                }
                location /admin/ {
                        proxy_pass http://192.168.128.111:80脑漫;
                }
                location ~* \.(jpg|png|peng)$ {
                        proxy_pass http://192.168.128.122:80;
                }
        }
        #在RS1上創(chuàng)建目錄admin髓抑,和index.html文件
        [root@rs1 admin]# mkdir /var/www/html/admin
        [root@rs1 admin]# vim /var/www/html/admin/index.html
                <h1>admin server1</h1>
      

訪問測試:


admin.png
    示例3:
    #將上文中配置稍微改動一下加上uri
    [root@localhost nginx]# vim /etc/nginx/conf.d/ilinux.conf
    location /admin/ {
            proxy_pass http://192.168.128.111:80/;
            }

訪問測試:


admin2.png
2. proxy_set_header field value;

設定發(fā)往后端主機的請求報文的請求首部的值优幸;

  • Context:http吨拍、server、location
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  • X-Real-IP $remote_addr: client address;
  • X-Forwarded-For $proxy_add _x_forwarded_for;約定俗稱的使用方式

示例4:

#在上文的示例1中l(wèi)ocation上下文中添加
location /admin/ {
            proxy_pass http://192.168.128.111:80;
            proxy_set_header X-Real-IP $remote_addr;
    }
[root@localhost nginx]# nginx -s reload
#修改RS1上http服務日志格式后觀察:
[root@rs1 logs]# vim /etc/httpd/conf/httpd.conf
#修改編輯內容
 LogFormat "%{X-Real-IP}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
 [root@rs1 logs]# httpd -t
 Syntax OK
 [root@rs1 logs]# systemctl restart httpd
 #外部主機強刷訪問查看訪問日志
 [root@rs1 logs]# tail -1 /etc/httpd/logs/access_log 
     \192.168.1.106 - - [18/Aug/2018:22:47:27 +0800] "GET /admin/ HTTP/1.0" 200 23 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"

#X-Forwarded-For示例:
#將上文的配置修改:
[root@localhost ~]# vim /etc/nginx/conf.d/ilinux.conf
location /admin/ {
            proxy_pass http://192.168.128.111:80;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            }
[root@localhost ~]# nginx -s reload
#RS1上修改日志格式
[root@rs1 conf]# vim httpd.conf
 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{X-Forwarded-For}i\"" combined
 [root@rs1 conf]# httpd -t
  Syntax OK
 [root@rs1 conf]# systemctl restart httpd
#重新訪問后查看日志
[root@rs1 conf]# tail -1 /var/log/httpd/access_log 
192.168.128.129 - - [18/Aug/2018:23:22:18 +0800] "GET /admin/ HTTP/1.0" 200 23 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" "192.168.1.106"
3. ngx_http_headers_module模塊

The ngx_http_headers_module module allows adding the “Expires” and “Cache-Control” header fields, and arbitrary fields, to a response header.
向由代理服務器響應給客戶端的響應報文添加自定義首部网杆,或修改指定首部的值羹饰;

  • Context: http, server, location, if in location
  • add_header name value [always]; 添加自定義首部
    • add_header X-Via $server_addr;
    • add_header X-Accel $server_name;
  • expires [modified] time; 用于定義Expire或Cache-Control首部的值
    • expires epoch | max | off;

示例5:

[root@localhost ~]# vim /etc/nginx/conf.d/ilinux.conf 
server {
    listen 80;
    server_name www.ilinux.io;
    location / {
            root /web/nginx/html;
    }
    location /admin/ {
            proxy_pass http://192.168.128.111:80;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            add_header X-Via $server_addr;
            add_header X-Accel $server_name;

    }
    location ~* \.(jpg|png|peng)$ {
            proxy_pass http://192.168.128.122:80;
    }
}
[root@localhost ~]# nginx -s reload

訪問測試:


header.png
4. proxy_cache_path

定義可用于proxy功能的緩存;

  • Context: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=levels] 定義緩存空間有幾層目錄碳却,每層目錄有多少個文件队秩;
      • 例:level=1:2:2表示緩存空間有3層目錄,第一層為1個字母(16進制共16個)昼浦,第二層和第三層為2個字母(共256個)馍资;
      • use_temp_path:指明臨時文件存放;默認on关噪,表示臨時文件目錄是use_temp_path參數設置鸟蟹,如果為off則表示臨時文件直接放在緩存目錄中;
      • keys_zone=named:size : name是給這個緩存取的名字使兔,size是指緩存空間大薪ㄔ俊;
      • inactive=time:指數據存放多久沒被訪問將被刪除虐沥;
      • max_size=size:設置最大緩存大小熊经,當超過此大小時,會刪除最近最少使用的數據置蜀;
5. proxy_cache zone | off;

指明要調用的緩存奈搜,或關閉緩存機制;

  • Context:http盯荤、server馋吗、location
6.proxy_cache_key string

緩存中用于“鍵”的內容

  • 默認值:proxy_cache_key $scheme$proxy_host$request_uri;
7. proxy_cache_valid [code ...] time

定義對特定響應碼的響應內如的緩存時長;

注意:緩存空間要先定義后使用

示例6:

#在nginx.conf配置文件中的http段中添加如下內容秋秤,定義緩存空間
proxy_cache_path /data/nginx/cache level=1:2:2 keys_zone=one:10m;
#在ilinux.conf的配置文件中的location段中添加調用緩存的功能
server {
listen 80;
server_name www.ilinux.io;
location / {
    proxy_pass http://192.168.128.111:80;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    add_header X-Via $server_addr;
    add_header X-Accel $server_name;
    }
location ~* \.(jpg|png|peng)$ {
    proxy_pass http://192.168.128.122:80;
    proxy_cache pcache;
    proxy_cache_key $request_uri;
    proxy_cache_valid 200 302 301 1h;
    proxy_cache_valid any 1m;
    }
} 
#使用外部主機訪問www.ilinux.io/day.jpg后查看緩存目錄
[root@localhost ef]# ls /data/nginx/cache
3
[root@localhost ef]# ls /data/nginx/cache/3
4b
[root@localhost ef]# ls /data/nginx/cache/3/4b
ef
[root@localhost ef]# ls /data/nginx/cache/3/4b/ef
a4893a06ce3e93c8819d30481e6ef4b3
8. proxy_cache_use_stale

proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ...;
Determines in which cases a stale cached response can be used when an error occurs during communication with the proxied server.
確定當與代理服務器通信期間發(fā)生錯誤時宏粤,在哪些情況下可以使用過時的緩存響應。

9.proxy_cache_methods GET | HEAD | POST ...;

If the client request method is listed in this directive then the response will be cached. “GET” and “HEAD” methods are always added to the list, though it is recommended to specify them explicitly.
如果這個指令中列出了客戶機請求方法灼卢,那么響應將被緩存绍哎。“GET”和“HEAD”方法總是添加到列表中鞋真,不過建議顯式地指定它們崇堰。

10. proxy_hide_header field;

By default, nginx does not pass the header fields “Date”, “Server”, “X-Pad”, and “X-Accel-...” from the response of a proxied server to a client. The proxy_hide_header directive sets additional fields that will not be passed.
默認情況下,nginx不會傳遞頭字段“Date”、“Server”海诲、“X-Pad”和“X-Accel-…”從代理服務器到客戶端的響應繁莹。proxy_hide_header指令設置不會傳遞的其他字段。

11.proxy_connect_timeout time;

Defines a timeout for establishing a connection with a proxied server. It should be noted that this timeout cannot usually exceed 75 seconds.
定義與代理服務器建立連接的超時特幔。應該注意的是咨演,這個超時通常不能超過75秒。

  • 默認為60s蚯斯;最長為75s薄风;
12. proxy_read_timeout time;

Defines a timeout for reading a response from the proxied server. The timeout is set only between two successive read operations, not for the transmission of the whole response.
定義從代理服務器讀取響應的超時。超時只設置在兩個連續(xù)的讀操作之間拍嵌,而不是整個響應的傳輸遭赂。

13. proxy_send_timeout time;

Sets a timeout for transmitting a request to the proxied server. he timeout is set only between two successive write operations, not for the transmission of the whole request. If the proxied server does not receive anything within this time, the connection is closed.
設置向代理服務器發(fā)送請求的超時。僅在兩個連續(xù)的寫操作之間設置超時撰茎,而不為整個請求的傳輸設置超時嵌牺。如果代理服務器在此期間沒有接收到任何信息,則連接將關閉龄糊。

二逆粹、 ngx_http_fastcgi_module模塊(反代php的后端服務器)

The ngx_http_fastcgi_module module allows passing requests to a FastCGI server.
ngx_http_fastcgi_module模塊允許將請求傳遞給FastCGI服務器。

  1. fastcgi_pass address;
  • address為fastcgi server的地址炫惩;
  • Context:location僻弹、if in loaction
  1. fastcgi_index name;
    fastcgi默認的主頁資源

  2. fastcgi_param parameter value [if_not_empty];
    設置一個應該傳遞給FastCGI服務器的參數。值可以包含文本他嚷、變量及其組合蹋绽。
    配置示例7:

    前提:配置好fpm server和mariadb-server服務;
    #在nginx端配置反代服務
    server {
        listen 80;
       server_name www.ilinux.io;
        location / {
             root /data/nginx/html;
     }
     location ~* \.php$ {
             fastcgi_pass 192.168.128.122:9000;
             fastcgi_index index.php;
             fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
             include fastcgi_params;
       }
     }
     #在后端php主機上提供一個index.php
     [root@rs2 html]# vim /usr/share/nginx/html/index.php
     <?php
     phpinfo()
     ?>
    

外部主機訪問測試:


php1.png
  1. fastcgi_cache_path
    astcgi_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];
    定義fastcgi的緩存筋蓖;緩存位置為磁盤上的文件系統(tǒng)卸耘,由path所指定的路徑來定義
  • levels=levels:緩存目錄的層級數量,以及每一級的目錄數量粘咖;levels=ONE:TWO:THREE
  • keys_zone=name:size;k/v映射的內存空間的名稱及大小
  • inactive=time;非活動時長
  • max_size=size;磁盤上用于緩存數據的緩存空間上限
  1. fastcgi_cache zone | off;
    調用指定的緩存空間來緩存數據蚣抗;
  • Context:http、server瓮下、location
  1. fastcgi_cache_key string
    定義用作緩存項的key的字符串翰铡;

  2. fastcgi_cache_methods GET | HEAD | POST ...;
    為哪些請求方法使用緩存;

  3. fastcgi_cache_min_uses number;
    緩存空間中的緩存項在inactive定義的非活動時間內至少要被訪問到此處所指定的次數方可被認作活動項讽坏;

  4. fastcgi_cache_valid [code ...] time;
    不同的響應碼各自的緩存時長

     示例:
     http {
         ...
         fastcgi_cache_path /var/cache/nginx/fastcgi_cache levels=1:2:1 keys_zone=fcgi:20m inactive=120s;
         ...
         server {
             ...
             location ~* \.php$ {
                         ...
                         fastcgi_cache fcgi;
                         fastcgi_cache_key $request_uri;
                         fastcgi_cache_valid 200 302 10m;
                         fastcgi_cache_valid 301 1h;
                         fastcgi_cache_valid any 1m; 
                         ...
                         }
                         ...
                     }
                     ...
                 }
    
  5. fastcgi_keep_conn on | off
    By default, a FastCGI server will close a connection right after sending the response. However, when this directive is set to the value on, nginx will instruct a FastCGI server to keep connections open.
    默認情況下锭魔,FastCGI服務器會在發(fā)送響應后立即關閉連接。然而路呜,當這個指令被設置為on時迷捧,nginx會指示FastCGI服務器保持連接打開织咧。

三、ngx_http_upstream_module模塊(7層負載均衡)

The ngx_http_upstream_module module is used to define groups of servers that can be referenced by the proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, and memcached_pass directives.

  1. upstream name { ... }
    定義后端服務器組漠秋,會引入一個新的上下文烦感;
  • Context:htttp

    配置:

          upstream httpdsrvs {
                  server ...
                  server...
                  ...
         }
    
  1. server address [parameters];
    在upstream上下文中server成員,以及相關的參數膛堤;
  • Context:upstream
  • address的表示格式:
    - unix:/PATH/TO/SOME_COCK_FILE
    - IP[:PORT]
    - HOSTNAME[:PORT]
  • parameters:
    - weight=number:權重,默認為1
    - max_fails=number:失敗嘗試最大次數晌该,超出此處指定的次數時肥荔,server將被標記為不可用
    - fail_timeout=time:設置將服務器標記為不可用狀態(tài)的超時時長
    - max_conns:當前的服務器的最大并發(fā)連接數
    - backup:將服務器標記為“備用”,即所有服務器均不可用時此武器才啟用朝群;
    - down :標記為“不可用”燕耿;
  1. least_conn;
    最少連接調度算法姜胖,當server擁有不同的權重時其為wlc誉帅;
  2. ip_hash
    源地址hash調度方法
  3. hash key [consistent];
    基于指定的key的hash表來實現對請求的調度,此處的keykey直接文本右莱、變量或二者的組合蚜锨;
  • 作用:將請求分類,同一類請求將發(fā)往同一個upstream server

  • 示例:

          hash $request_uri consistent;
          hash $remote_addr;(=ip_hash)
    
  1. keepalive connections;
    為每個worker進程保留的空閑的長連接數量慢蜓;

配置示例:

  #先配置2臺后端的httpd服務主機亚再,并編輯index.html訪問主頁
     [root@rs1 ~]# yum -y install httpd 
          <VirtualHost 192.168.1.111:80>
                         servername "192.168.1.111"
                         DocumentRoot "/data/web/ilinux"
                         <Directory "/data/web/ilinux">
                                    options None
                                    allowoverride None
                                    Require all granted
                         </Directory>
                         Customlog "logs/ilinux_access_log" combined
          </VirtualHost>
      [root@rs1 ~]# mkdir /data/web/ilinux -pv
      [root@rs1 ~]# vim /data/web/ilinux/index.html
            <h1>httpd server 1 192.168.1.111</h1>

    #第二個httpd服務器節(jié)點同樣配置,server_name 改為192.168.1.122即可
    #使用nginx主機訪問測試
      [root@localhost nginx]# curl http://192.168.1.111
      <h1>httpd server 1 192.168.1.111</h1>
      [root@localhost nginx]# curl http://192.168.1.122
      <h1>httpd server 2 192.168.1.122</h1>
    #配置nginx服務晨抡,實現7層負載均衡
    #在nginx.conf配置中的http段中定義upstream的name
         [root@localhost ~]# vim /etc/nginx/nginx.conf
             upstream websrvs {
                  server 192.168.1.111:80 weight=2;
                  server 192.168.1.122:80 max_fails=3     fail_timeout=5s;
                  server 127.0.0.1:80 backup;
              }
    #在ilinux.conf配置中配置反代服務
    [root@localhost ~]# vim /etc/nginx/conf.d/ilinux.conf
        server {
              listen 80;
              server_name www.ilinux.io;
              index index.html index.php;
              location / {                   
                    proxy_pass http://websrvs;
                }
            }
      [root@localhost ~]# nginx -t
      [root@localhost ~]# nginx -s reload
      #使用外部主機訪問測試
      [root@localhost ~]# for i in {1..10};do curl         http://www.ilinux.io; done
      <h1>httpd server 1 192.168.1.111</h1>
      <h1>httpd server 2 192.168.1.122</h1>
      <h1>httpd server 1 192.168.1.111</h1>
      <h1>httpd server 1 192.168.1.111</h1>
      <h1>httpd server 2 192.168.1.122</h1>
      <h1>httpd server 1 192.168.1.111</h1>
      <h1>httpd server 1 192.168.1.111</h1>
      <h1>httpd server 2 192.168.1.122</h1>
      <h1>httpd server 1 192.168.1.111</h1>
      <h1>httpd server 1 192.168.1.111</h1>
  #使用hash key [consistent] 后可以實現dh算法氛悬,目標地址綁定 
    [root@localhost ~]# vim /etc/nginx/nginx.conf
             upstream websrvs {
                  hash $ request_uri consistent;
                  server 192.168.1.111:80 weight=2;
                  server 192.168.1.122:80 max_fails=3     fail_timeout=5s;
              }
     [root@localhost ~]# for i in {1..5};do curl http://www.ilinux.io;done
              <h1>httpd server 1 192.168.1.111</h1>
              <h1>httpd server 1 192.168.1.111</h1>
              <h1>httpd server 1 192.168.1.111</h1>
              <h1>httpd server 1 192.168.1.111</h1>
              <h1>httpd server 1 192.168.1.111</h1>

四、ngx_stream_core_module模塊(偽四層負載均衡)

模擬反代基于tcp或udp的服務連接耘柱,即工作于傳輸層的反代或調度器如捅;

  1. ngx_stream_core_module

ngx_stream_core_module模塊從1.9.0版本開始就可用了。這個模塊不是默認構建的调煎,它應該使用-with-stream配置參數啟用镜遣。

          [root@localhost ~]# rpm -qa | grep nginx
          nginx-mod-stream-1.12.2-2.el7.x86_64   #只要有次模塊,即可直接使用stream的模塊
          [root@localhost ~]# rpm -ql nginx-mod-stream-1.12.2-2.el7.x86_64
            /usr/lib64/nginx/modules/ngx_stream_module.so
            /usr/share/nginx/modules/mod-stream.conf
          [root@localhost ~]# cat /usr/share/nginx/modules/mod-stream.conf
            load_module "/usr/lib64/nginx/modules/ngx_stream_module.so";
  • Syntax:listen address:port [ssl] [udp] [backlog=number] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
  • 監(jiān)聽的端口:默認為tcp協議汛蝙;udp:監(jiān)聽udp協議的端口
  • Context: server
  1. ngx_stream_proxy_module
    ngx_stream_proxy_module模塊(1.9.0)允許通過TCP烈涮、UDP(1.9.13)和unix域套接字代理數據流。
  • (1) proxy_pass address;
    Sets the address of a proxied server. The address can be specified as a domain name or IP address, and a port or as a UNIX-domain socket path.
  • (2) proxy_timeout timeout;
    Sets the timeout between two successive read or write operations on client or proxied server connections. If no data is transmitted within this time, the connection is closed. 默認為10m;
  • (3) proxy_connect_timeout time;
    設置nginx與被代理的服務器嘗試建立連接的超時時長窖剑;默認為60s坚洽;
  • nginx偽四層負載均衡用法和nginx7層負載均衡基本一樣,只是引入一個新的stream { ... }上下文西土;定義stream相關的服務讶舰;
    • Context:main

配置示例:

[root@localhost ~]# cd /etc/nginx   
[root@localhost nginx]# vim nginx.conf
    #將配置文件http段之后全部刪除,添加stream{...}段內容
      stream {
                 server {
                        listen 22922;
                        proxy_pass sshsrvs;
                        }
                upstream sshsrvs {
                        server 192.168.1.111:22;
                        server 192.168.1.122:22;
                       }
             }
  [root@localhost nginx]# nginx -t
  [root@localhost nginx]# nginx -s reload
 #使用循環(huán)方法登錄測試
  [root@localhost ~]# for i in {1..5};do ssh -p 22922 root@192.168.1.110 "hostname";done
  The authenticity of host '[192.168.1.110]:22922     ([192.168.1.110]:22922)' can't be established.
  ECDSA key fingerprint is       SHA256:poc/T3yYQlr8AGSlEmKjlTPvyIYMyAQdSAva8FJcRPo.
  ECDSA key fingerprint is   MD5:10:9c:00:03:d9:34:be:bd:67:fd:c3:68:7c:58:24:47.
  Are you sure you want to continue connecting (yes/no)? yes
  Warning: Permanently added '[192.168.1.110]:22922'     (ECDSA) to the list of known hosts.
  root@192.168.1.110's password: 
  rs1.ilinux.com
  root@192.168.1.110's password: 
  rs2.ilinux.com
  root@192.168.1.110's password: 
  rs1.ilinux.com
  root@192.168.1.110's password: 
  rs2.ilinux.com
  root@192.168.1.110's password: 
  rs1.ilinux.com
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市跳昼,隨后出現的幾起案子般甲,更是在濱河造成了極大的恐慌,老刑警劉巖鹅颊,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件敷存,死亡現場離奇詭異,居然都是意外死亡堪伍,警方通過查閱死者的電腦和手機锚烦,發(fā)現死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來帝雇,“玉大人涮俄,你說我怎么就攤上這事∈ⅲ” “怎么了彻亲?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長吮廉。 經常有香客問我苞尝,道長,這世上最難降的妖魔是什么茧痕? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任野来,我火速辦了婚禮,結果婚禮上踪旷,老公的妹妹穿的比我還像新娘曼氛。我一直安慰自己,他們只是感情好令野,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布舀患。 她就那樣靜靜地躺著,像睡著了一般气破。 火紅的嫁衣襯著肌膚如雪聊浅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天现使,我揣著相機與錄音低匙,去河邊找鬼。 笑死碳锈,一個胖子當著我的面吹牛顽冶,可吹牛的內容都是我干的。 我是一名探鬼主播售碳,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼强重,長吁一口氣:“原來是場噩夢啊……” “哼绞呈!你這毒婦竟也來了?” 一聲冷哼從身側響起间景,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤佃声,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后倘要,有當地人在樹林里發(fā)現了一具尸體圾亏,經...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年封拧,在試婚紗的時候發(fā)現自己被綠了召嘶。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡哮缺,死狀恐怖,靈堂內的尸體忽然破棺而出甲喝,到底是詐尸還是另有隱情尝苇,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布埠胖,位于F島的核電站糠溜,受9級特大地震影響,放射性物質發(fā)生泄漏直撤。R本人自食惡果不足惜非竿,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谋竖。 院中可真熱鬧红柱,春花似錦、人聲如沸蓖乘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嘉抒。三九已至零聚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間些侍,已是汗流浹背隶症。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留岗宣,地道東北人蚂会。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像狈定,于是被迫代替她去往敵國和親颂龙。 傳聞我的和親對象是個殘疾皇子习蓬,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內容