Nginx基础

1 nginx介绍

        nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定,所以现在很多知名的公司都在使用nginx。

2 nginx的应用场景

        1、http服务器:Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。

        2、虚拟主机:以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。

        3、反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。

反向代理/负载均衡

        反向代理:反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。

        负载均衡:就是将请求分摊到多个tomcat上进行处理,增加了请求并发量和吞吐量。

3 nginx安装(linux)

1.官网下载nginx linux 版本的安装包放到指定目录下 (cd /data/soft )。

2.解压命令 tar zxvf nginx-1.20.0.tar.gz(记住:解压后的文件夹名称不要改成nginx,不然安装的时候会报错,因为安装的时候会创建一个nginx文件夹)。

3.创建临时文件夹,不然有可能会报错 mkdir /var/temp/nginx -p。

4.进入解压后的目录 cd nginx-1.20.0 输入如下命令,目的是配置nginx。

./configure --prefix=/data/soft/nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module。

下面是配置参数的含义:

nginx配置参数

5. make 编译。

6.make install 安装。

7. cd /data/soft/nginx/sbin 下

        ./nginx    启动nginx

        ./nginx -s stop    停止nginx:

        ./nginx -s reoad    重新加载

        ./nginx -t    检查配置文件是否正确

        ./nginx -s quit    停止nginx(等处理的请求结束/生产环境停止用这个命令)

注意:在云服务器安装 记得开放nginx默认的80端口。

4 nginx的进程模型

        nginx模型有两种进程,master进程和worker进程。master进程主要用来管理worker进程,管理包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。而基本的网络事件,则是放在worker进程中来处理了。多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。worker进程的个数是可以设置的,一般我们会设置与机器cpu核数一致

nginx的进程模型

        如下图我们启动ngin后可以看一下他的进程。用命令 ps-ef | grep nginx。里面默认有两个一个msater一个worker。

        我们 vi /data/soft/nginx/conf/nginx.conf 将worker_processes 改成 2 看看。(改完记得重新加载nginx ./nginx -s reload)

修改worker数量

        接下来查看nginx进程发现有两个worker进程了。

两个worker

5 nginx如何处理实现高并发

为什么nginx可以处理这么高并发的请求呢?

先总结:得益于nginx的worker抢占机制(进程模型)和异步非阻塞式的处理方式。

平时设置worker的数量应该与cpu的核数设置一致。

5.1 同步与异步的理解:

同步与异步的重点在消息通知的方式上,也就是调用结果通知的方式。

同步:当一个同步调用发出去后,调用者要一直等待调用结果的通知后,才能进行后续的执行。

异步:当一个异步调用发出去后,调用者不能立即得到调用结果的返回。

异步调用,要想获得结果,一般有两种方式:

        1、主动轮询异步调用的结果;

        2、被调用方通过callback来通知调用方调用结果。

生活实例:

        同步取快递:小明收到快递将送达的短信,在楼下一直等到快递送达。

        异步取快递:小明收到快递将送达的短信,快递到楼下后,小明再下楼去取。

        异步取快递,小明知道快递到达楼下有两种方式:1、不停的电话问快递小哥到了没有,即主动轮询;2、快递小哥到楼下后,打电话通知小明,然后小明下楼取快递,即回调通知。

5.2 阻塞与非阻塞的理解

           阻塞与非阻塞的重点在于进/线程等待消息时候的行为,也就是在等待消息的时候,当前进/线程是挂起状态,还是非挂起状态。

           阻塞:阻塞调用在发出去后,在消息返回之前,当前进/线程会被挂起,直到有消息返回,当前进/线程才会被激活

           非阻塞:非阻塞调用在发出去后,不会阻塞当前进/线程,而会立即返回。

        生活实例:

                阻塞取快递:小明收到快递即将送达的信息后,什么事都不做,一直专门等快递。

                非阻塞取快递:小明收到快递即将送达的信息后,等快递的时候,还一边敲代码、一边刷微信。

                同步与异步,重点在于消息通知的方式;阻塞与非阻塞,重点在于等消息时候的行为。

        所以,就有了下面4种组合方式:

                1. 同步阻塞:小明收到信息后,啥都不干,等快递; 

                2. 同步非阻塞:小明收到信息后,边刷微博,边等着取快递; 

                3. 异步阻塞:小明收到信息后,啥都不干,一直等着快递员通知他取快递; 

                4. 异步非阻塞:小明收到信息后,边刷着微博,边等快递员通知他取快递。

5.3 work抢占机制

work抢占机制

        在master里面,先建立需要lfd,然后fork出多个worker进程,当用户进入nginx服务的时候,每个worker的lfd变的可读,并且这些worker会抢占一个accept_mutex的锁,一个worker得到accept_mutex这个互斥量,其他的worker就不能占有。抢到这个accept_mutex的worker就开始读取请求-解析请求-处理请求,数据彻底返回客户端之后,这个事件就算结束。

5.4 nginx事件处理

nginx事件处理

        一般服务器事件处理:同样的3个进程,如果采用一个进程负责一个request的方式,那么,同时进来3个request之后,每个进程就负责其中一个,直至会话关闭。期间,如果有第4个request进来了。就无法及时反应了,因为4个进程都没干完活呢,因此,一般有个调度进程,每当新进来了一个request,就新开个进程来处理。

        nginx事件处理:nginx每进来一个request,会有一个worker进程去处理。但不是全程的处理,处理到什么程度呢?处理到可能发生阻塞的地方,比如向上游(后端)服务器转发request,并等待请求返回。那么,这个处理的worker不会这么傻等着,他会在发送完请求后,注册一个事件:“如果upstream返回了,告诉我一声,我再接着干”。于是他就休息去了。此时,如果再有request 进来,他就可以很快再按这种方式处理。而一旦上游服务器返回了,就会触发这个事件,worker才会来接手,这个request才会接着往下走。

6 nginx.config配置结构

1. user root ;

设置worker进程的用户,指linux中的用户,涉及到一些操作文件目录的权限,默认是nobody。

2. worker_processes;

worker进程工作数的设置,一般来说cpu有几个就设置几个。

3. error_log logs/error.log info;

nginx日志级别:debug/info/warn/error

4. pid logs/nginx.pid;

nginx的进程pid

5.设置工作模式

event事件

6. http指令块,针对http网络传输的一些指令配置

http指令块

7.include  yc.config 

引入外部配置文件,避免配置文件过大 可读性差

8. 设定日志格式,main为定义的格式名称,如此access_log就可以直接使用这个变量了。

参数对照解析

9. sendfile使用高校文件传输,提升传输性能,启用后才能够使用tcp_nopush,指当前数据表积累一定大小后才能发送,提升了传输效率。

sendfile on;

tcp_nopush on;

10.keepalive_timeout 65;

设置客户端与服务器请求的超时时间,保证客户端请求的时候不会重复建立新的连接,节约资源损耗。

11. gzip on;

启用压缩,html/css压缩后传输更快。

12.server 指令块可以在http指令中设置多个模拟主机

listen:监听端口;

server_name localhost/ip/域名

location:请求路由映射,匹配拦截

root:请求位置

index:首页设置

server指令块

7 nginx配置前端静态文件访问

假如我的前端项目放置在 /data/html目录下 我们可以如下图配置静态资源访问

静态资源

8 nginx 跨域防盗链

nginx跨域server配置
nginx防盗链server配置

9 nginx 集群

9.1 搭建tomcat集群

如下图:我们搭建了反向代理,两台tomcat集群。

nginx反向代理集群

9.2 nginx负载均衡

1.负载均衡之——轮询 

搭建完集群后请求会被依次分摊到三台tomcat服务器上,按顺序依次访问。

2.负载均衡之——加权轮询

如果集群的两台tomcat服务器配置不一样,我们可以为配置高的server增加权重,使其改变访问的流量,数值越小被分配到的流量就越少。

加权

9.3 nginx upstream参数详解

参数列表

max_conns:可以根据服务的好坏来设置最大连接数,防止挂掉,比如1000,我们可以设置800

max_conns

max_fails、 fail_timeout:

max_fails:失败多少次 认为主机已挂掉则,踢出,公司资源少的话一般设置2~3次,多的话设置1次

max_fails=3 fail_timeout=30s代表在30秒内请求某一应用失败3次,认为该应用宕机,后等待30秒,这期间内不会再把新请求发送到宕机应用,而是直接发到正常的那一台,时间到后再有请求进来继续尝试连接宕机应用且仅尝试1次,如果还是失败,则继续等待30秒...以此循环,直到恢复。


max_fails、 fail_timeout

9.4 负载均衡算法

1.weight+轮询:  默认的算法,根据设置的权重去轮询。

2.ip_hash: 根据用户ip的hash来决定用户访问的是哪一台tomcat

场景:保持session 一致。(因为同一个ip他的hash一样,通过节点取余,保证他的每个请求都访问到同一台tomcat避免缓存失效)。另外注意:要是停用机器,不能直接去掉server,应该用down参数,保证节点数不变,那么ip_hash还是不变,要是节点数变了,整个hash ip 访问的机器都会变。

ip_hash原理
ip_hash 

3.url_hash:原理跟 ip_hash差不多,但是不同的是将请求的url放到hash函数中得到值然后再去跟节点数取余。

url_hash

4.least_conn : 最少链接。就是去找我们每台服务器当前链接最少的,当新的请求进来以后就会去访问链接最少的这一台。

10 Nginx + Keepalived高可用

10.1 什么是Keepalived

        Keepalived是一个免费开源的,用C编写的类似于layer3, 4 & 7交换机制软件,具备我们平时说的第3层、第4层和第7层交换机的功能。主要提供loadbalancing(负载均衡)和 high-availability(高可用)功能,负载均衡实现需要依赖Linux的虚拟服务内核模块(ipvs),而高可用是通过VRRP协议实现多台机器之间的故障转移服务。 

10.2 Keepalived双机主备原理

        首先Keepalived可以在主机上产生一个虚拟的ip, 这里叫做vip(v是virtual的意思) 。当用户访问主机时, 虚拟ip会跟这个主机ip绑定,他有心跳机制去检测主机是否宕机,若主机宕机以后虚拟ip会跟备用机绑定,然后就会通过备用机器访问。

Keepalived双机主备

10.3 Keepalived 安装(linux)

keepalived和nginx安装方式差不多,我选用安装包方式安装。

1. 上传压缩包到指定目录下。我的是(/data/soft)使用 tar -zxvf keepalived-2.0.18.tar.gz 解压压缩包。

2 . cd keepalived-2.0.18  进入解压好的文件目录下 

./configure --prefix=/data/soft/keepalived --sysconf=/etc   配置一下安装路径为/data/soft ,配置文件的路径是/etc下

执行后出现报错:*** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.

然后 yum -y install libnl libnl-devel 安装一下。

之后再重新运行  ./configure --prefix=/data/soft/keepalived --sysconf=/etc 就ok 了。

执行完以后 跟nginx一样 会出现Makefile

3. make && make install   编译和安装 里面会有警告信息,不用管就可以了。

4.将keeplived 加入操作系统

cp /data/soft/keepalived-2.0.18/keepalived/etc/init.d/keepalived /etc/init.d/

cp /data/soft/keepalived-2.0.18/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived/

10.4 keepalived.conf配置文件说明

配置文件的位置: /etc/keepalived/keepalived.conf

配置详解

10.5 Keepalived 基本命令

加为系统服务:

cp /data/soft/keepalived-2.0.18/keepalived/etc/init.d/keepalived /etc/init.d/

cp /data/soft/keepalived-2.0.18/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived/  -

启动:systemctl start keeplived.service

停止:systemctl stop keeplived.service

重启:systemctl restart keeplived.service

10.6 keepalived 演示双主备

第一步:创建两台nginx,分别安装nginx和keeplived,其ip配置如下:

虚拟ip:192.168.159.161

nginx01 ip:192.168.167.100  作为master

nginx02 ip:192.168.167.111

nginx01 master主机 安装好nginx和keeplived。并且keeplived的配置修改如下图:

主机的keeplived配置

nginx02 backup从机 安装好nginx和keeplived。并且keeplived的配置修改如下图:

备用机的keeplived配置

配置好以后分别启动nginx和keeplived

第二步:打开浏览器访问虚拟ip看看当前是哪台nginx在工作。为了方便查看我修改了nginx的index.html加上了本机ip地址。

如下图:我们发现虚拟ip访问的是主机。

master主机

然后我们在主机上执行 :systemctl stop keeplived.service  停止主机的keeplived。然后访问看看:

停止master的keeplived

之后刷新浏览器发现现在访问到的是备用机的nginx

backup从机

10.7 keeplived 实现nginx自动重启

首先我们将两台服务器的keeplived都起来,只启动从机的nginx,master主机的nginx我们停掉看看访问浏览器会使什么结果,因为在生产环境中主机的nginx也有可能宕机,那么我们就需要能访问到备用机的nginx。

如图:我们访问虚拟ip发现,无法访问了,说明虚拟ip在主机nginx挂掉后绑定的还是主机,无法访问到从机。

我们查看一下主机的 ip addr 可以看到 主机上跟虚拟IP绑定着

主机 ip addr

再看一下从机的 ip addr : 没有出现虚拟ip

从机 ip addr

如果出现上述情况,那么我们就需要对master主机nginx增加心跳检测,如果它宕机了就要自动重启,若是它起不来的话应该把keeplived停止掉,然后使备用机被启用。下面我们用keeplived实现此功能

第一步:在keeplived 配置文件的地方 增加nginx重启shell脚本check_nginx.sh

重启ngin脚本

chmod +x /etc/keepalived/check_nginx.sh     为脚本添加权限。

/data/soft/nginx/sbin/nginx -stop 先停止nginx,打开浏览器访问一下主机看nginx是否已经停止。

然后 ./chech_nginx.sh 运行脚本,打开浏览器访问主机nginx看看是否已经启动。

第二步:将nginx重启脚本添加到keeplived配置文件中实现定时运行

keepalived配置定时运行nginx检查脚本

第三步:重启keepalived然后运行测试

systemctl restart keepalived            --重启keepalived

/data/soft/nginx/sbin/nginx -s stop   --停止nginx

当我们 停止nginx后 他会自动将nginx启动起来!

10 LVS实现负载均衡

        参考原文链接:https://blog.csdn.net/weixin_40470303/article/details/80541639

        LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,其体系结构如下图所示,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实的服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的,整个集群对用户而言都是透明的。最后根据LVS工作模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到终端用户,LVS工作模式分为NAT模式、TUN模式、以及DR模式。

另外:LVS实现的是基于四层的负载均衡,基于ip和端口的请求转发。

LVS网络拓扑图

10.1 NAT模式

        NAT(Network Address Translation)即网络地址转换,其作用是通过数据报头的修改,使得位于企业内部的私有IP地址可以访问外网,以及外部用用户可以访问位于公司内部的私有IP主机。VS/NAT工作模式拓扑结构如下图所示,LVS负载调度器可以使用两块网卡配置不同的IP地址,eth0设置为私钥IP与内部网络通过交换设备相互连接,eth1设备为外网IP与外部网络联通。

       第一步,用户通过互联网DNS服务器解析到公司负载均衡设备上面的外网地址,相对于真实服务器而言,LVS外网IP又称VIP(Virtual IP Address)虚拟IP,用户通过访问虚拟IP,即可连接后端的真实服务器(Real Server),而这一切对用户而言都是透明的,用户以为自己访问的就是真实服务器,但他并不知道自己访问的VIP仅仅是一个调度器,也不清楚后端的真实服务器到底在哪里、有多少真实服务器。

   第二步,用户将请求发送至192.168.1.150,此时LVS将根据预设的算法选择后端的一台真实服务器(192.168.1.1~192.168.1.3),将数据请求包转发给真实服务器,并且在转发之前LVS会修改数据包中的目标地址以及目标端口,目标地址与目标端口将被修改为选出的真实服务器IP地址以及相应的端口。

    第三步,真实的服务器将响应数据包返回给LVS调度器,调度器在得到响应的数据包后会将源地址和源端口修改为VIP及调度器相应的端口,修改完成后,由调度器将响应数据包发送回终端用户,另外,由于LVS调度器有一个连接Hash表,该表中会记录连接请求及转发信息,当同一个连接的下一个数据包发送给调度器时,从该Hash表中可以直接找到之前的连接记录,并根据记录信息选出相同的真实服务器及端口信息。

NAT模式

10.2 TNU模式

        在LVS(NAT)模式的集群环境中,由于所有的数据请求及响应的数据包都需要经过LVS调度器转发,如果后端服务器的数量大于10台,则调度器就会成为整个集群环境的瓶颈。我们知道,数据请求包往往远小于响应数据包的大小。因为响应数据包中包含有客户需要的具体数据,所以LVS(TUN)的思路就是将请求与响应数据分离,让调度器仅处理数据请求,而让真实服务器响应数据包直接返回给客户端。VS/TUN工作模式拓扑结构如下图所示。其中,IP隧道(IP tunning)是一种数据包封装技术,它可以将原始数据包封装并添加新的包头(内容包括新的源地址及端口、目标地址及端口),从而实现将一个目标为调度器的VIP地址的数据包封装,通过隧道转发给后端的真实服务器(Real Server),通过将客户端发往调度器的原始数据包封装,并在其基础上添加新的数据包头(修改目标地址为调度器选择出来的真实服务器的IP地址及对应端口),LVS(TUN)模式要求真实服务器可以直接与外部网络连接,真实服务器在收到请求数据包后直接给客户端主机响应数据。

TNU模式

10.3 基于DR模式的LVS负载均衡

        在LVS(TUN)模式下,由于需要在LVS调度器与真实服务器之间创建隧道连接,这同样会增加服务器的负担。与LVS(TUN)类似,DR模式也叫直接路由模式,其体系结构如图4所示,该模式中LVS依然仅承担数据的入站请求以及根据算法选出合理的真实服务器,最终由后端真实服务器负责将响应数据包发送返回给客户端。与隧道模式不同的是,直接路由模式(DR模式)要求调度器与后端服务器必须在同一个局域网内,VIP地址需要在调度器与后端所有的服务器间共享,因为最终的真实服务器给客户端回应数据包时需要设置源IP为VIP地址(192.168.1.150),目标IP为客户端IP,这样客户端访问的是调度器的VIP地址,回应的源地址也依然是该VIP地址(真实服务器上的VIP),客户端是感觉不到后端服务器存在的。由于多台计算机都设置了同样一个VIP地址,所以在直接路由模式中要求调度器的VIP地址是对外可见的,客户端需要将请求数据包发送到调度器主机,而所有的真实服务器的VIP地址必须配置在Non-ARP的网络设备上,也就是该网络设备并不会向外广播自己的MAC及对应的IP地址,真实服务器的VIP对外界是不可见的,但真实服务器却可以接受目标地址VIP的网络请求,并在回应数据包时将源地址设置为该VIP地址。调度器根据算法在选出真实服务器后,在不修改数据报文的情况下,将数据帧的MAC地址修改为选出的真实服务器的MAC地址,通过交换机将该数据帧发给真实服务器。整个过程中,真实服务器的VIP不需要对外界可见。

DR模式

下面我们实现LVS DR模式的负载均衡:我们搭建三台服务器,配置约定如下。dip是真实的ip,vip是虚拟ip。

服务器信息

第一步:配置三台机器

三台机器上运行命令: systemctl stop NetworkManager     systemctl disable NetworkManager

第二步:配置LVS服务器虚拟ip

进入网卡的配置文件夹下  cd /etc/sysconfig/network-scripts/

编辑 网卡配置文件 ifcfg-ens33  添加ADDRESS2=192.168.159.150

添加虚拟IP

然后重启网卡配置:service network restart

查看网卡配置:ip addr

如图 ens33 多了虚拟ip的配置

ip addr

第三步:LVS服务器安装ipvsdam 

yum install ipvsadm

安装好以后,查看版本号 ipvsadm -Ln

查看版本号

第四步:分别配置两台 nginx 服务器虚拟ip(步骤一样)

1.进入网卡配置文件夹  cd /etc/sysconfig/network-scripts/

2.拷贝配置文件重命名 cp ifcfg-lo ifcfg-lo:1

3.编辑文件 vi ifcfg-lo:1

4.重启网卡 service network restart

5.ip addr 查看配置,出现虚拟ip信息

第四步:为两台nginx服务器配置arp。

1. vi /etc/sysctl.conf    加上如图配置

配置详情

2. sysctl -p 使配置文件生效。

3.  配置网络配置 route add -host 192.168.159.150 dev lo:1

route -n 查看  多了 192.168.159.150 的配置

配置

将 route add -host 192.168.159.150 dev lo:1 添加到 /etc/rc.local 文件末尾  开机自动执行

开机自启

第五步:LVS服务器使用ipvsadm配置集群规则

1.创建LVS节点,用户访问的集群调度者

ipvsadm -A -t 192.168.159.150:80 -s rr

-A:添加集群

-t : tcp协议

ip地址︰设定集群的访问ip,也就是LVS的虚拟ip.-s∶设置负载均衡的算法,rr表示轮询

p∶设置连接持久化的时间

2.创建两台RS真实服务器

ipvsadm -a -t 192.168.159.150:80 -r 192.168.159.111:80 -g

ipvsadm -a -t 192.168.159.150:80 -r 192.168.159.100:80 -g

-a∶添加真实服务器

-t : tcp协议

-r︰真实服务器的ip地址

-g∶设定DR模式

配置LVS集群

接下来我们访问 虚拟ip 192.168.159.150 

如下图,已经访问到 100 nginx服务器了。我们把100nginx停掉后,访问150会访问到111。说明集群配置成功了。

11 LVS+keepalived

上面我们已经学习配置keepalived 和 LVS集群。那么我们可以配置两个LVS,一个主一个备。当主keepalived LVS 宕机后就启用备用的keepalived LVS。

第一步:创建两台LVS 服务器(99(主) 和98 )

两台服务器分别 都安装keepalived 

第二步:配置主LVS keepalived配置文件

如下图:虚拟ip是192.168.159.150  添加LVS的配置如下图。

keepalived LVS的配置

然后重启 keepalived 访问虚拟ip 看是否能访问到。

第三步:配置从LVS keepalived.config

将主节点的keepalived的配置复制到从节点然后改一下 id 和 backup 还有权重就可以了

keepalived LVS的配置

然后重启 keepalived 

为了测试 备用机是否好使,我们将主keepalived 停止掉以后,我们访问虚拟ip看能访问到nginx。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342