nginx调优

转载别人的文章,nginx调优。链接如下:http://blog.csdn.net/xifeijian/article/details/20956605

大多数的Nginx安装指南告诉你如下基础知识——通过apt-get安装,修改这里或那里的几行配置,好了,你已经有了一个Web服务器了。而且,在大多数情况下,一个常规安装的nginx对你的网站来说已经能很好地工作了。然而,如果你真的想挤压出Nginx的性能,你必须更深入一些。在本指南中,我将解释Nginx的那些设置可以微调,以优化处理大量客户端时的性能。需要注意一点,这不是一个全面的微调指南。这是一个简单的预览——那些可以通过微调来提高性能设置的概述。你的情况可能不同。

基本的 (优化过的)配置

我们将修改的唯一文件是nginx.conf,其中包含Nginx不同模块的所有设置。你应该能够在服务器的/etc/nginx目录中找到nginx.conf。首先,我们将谈论一些全局设置,然后按文件中的模块挨个来,谈一下哪些设置能够让你在大量客户端访问时拥有良好的性能,为什么它们会提高性能。本文的结尾有一个完整的配置文件。

高层的配置

nginx.conf文件中,Nginx中有少数的几个高级配置在模块部分之上。

user www-data; 

pid /var/run/nginx.pid; 

worker_processes auto; 

worker_rlimit_nofile 100000; 

user和pid应该按默认设置 - 我们不会更改这些内容,因为更改与否没有什么不同。

worker_processes 定义了nginx对外提供web服务时的worker进程数。最优值取决于许多因素,包括(但不限于)CPU核的数量、存储数据的硬盘数量及负载模式。不能确定的时候,将其设置为可用的CPU内核数将是一个好的开始(设置为“auto”将尝试自动检测它)。

worker_rlimit_nofile 更改worker进程的最大打开文件数限制。如果没设置的话,这个值为操作系统的限制。设置后你的操作系统和Nginx可以处理比“ulimit -a”更多的文件,所以把这个值设高,这样nginx就不会有“too many open files”问题了。

Events模块

events模块中包含nginx中所有处理连接的设置。

events { 

worker_connections 2048; 

multi_accept on; 

use epoll; 

worker_connections 设置可由一个worker进程同时打开的最大连接数。如果设置了上面提到的worker_rlimit_nofile,我们可以将这个值设得很高。

记住,最大客户数也由系统的可用socket连接数限制(~ 64K),所以设置不切实际的高没什么好处。

multi_accept 告诉nginx收到一个新连接通知后接受尽可能多的连接。

use 设置用于复用客户端线程的轮询方法。如果你使用Linux 2.6+,你应该使用epoll。如果你使用*BSD,你应该使用kqueue。

(值得注意的是如果你不知道Nginx该使用哪种轮询方法的话,它会选择一个最适合你操作系统的)

HTTP 模块

HTTP模块控制着nginx http处理的所有核心特性。因为这里只有很少的配置,所以我们只节选配置的一小部分。所有这些设置都应该在http模块中,甚至你不会特别的注意到这段设置。

http { 

server_tokens off; 

sendfile on; 

tcp_nopush on; 

tcp_nodelay on; 

... 

server_tokens  并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,这样对于安全性是有好处的。

sendfile 可以让sendfile()发挥作用。sendfile()可以在磁盘和TCP socket之间互相拷贝数据(或任意两个文件描述符)。Pre-sendfile是传送数据之前在用户空间申请数据缓冲区。之后用read()将数据从文件拷贝到这个缓冲区,write()将缓冲区数据写入网络。sendfile()是立即将数据从磁盘读到OS缓存。因为这种拷贝是在内核完成的,sendfile()要比组合read()和write()以及打开关闭丢弃缓冲更加有效(更多有关于sendfile)。

tcp_nopush 告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送。

tcp_nodelay 告诉nginx不要缓存数据,而是一段一段的发送--当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。

access_log off; 

error_log /var/log/nginx/error.log crit; 

access_log 设置nginx是否将存储访问日志。关闭这个选项可以让读取磁盘IO操作更快(aka,YOLO)

error_log 告诉nginx只能记录严重的错误:

keepalive_timeout 10; 

client_header_timeout 10; 

client_body_timeout 10; 

reset_timedout_connection on; 

send_timeout 10; 

keepalive_timeout 给客户端分配keep-alive链接超时时间。服务器将在这个超时时间过后关闭链接。我们将它设置低些可以让ngnix持续工作的时间更长。

client_header_timeout 和client_body_timeout 设置请求头和请求体(各自)的超时时间。我们也可以把这个设置低些。

reset_timeout_connection 告诉nginx关闭不响应的客户端连接。这将会释放那个客户端所占有的内存空间。

send_timeout 指定客户端的响应超时时间。这个设置不会用于整个转发器,而是在两次客户端读取操作之间。如果在这段时间内,客户端没有读取任何数据,nginx就会关闭连接。

limit_conn_zone $binary_remote_addr zone=addr:5m; 

limit_conn addr 100; 

limit_conn_zone 设置用于保存各种key(比如当前连接数)的共享内存的参数。5m就是5兆字节,这个值应该被设置的足够大以存储(32K*5)32byte状态或者(16K*5)64byte状态。

limit_conn 为给定的key设置最大连接数。这里key是addr,我们设置的值是100,也就是说我们允许每一个IP地址最多同时打开有100个连接。

include /etc/nginx/mime.types; 

default_type text/html; 

charset UTF-8; 

include 只是一个在当前文件中包含另一个文件内容的指令。这里我们使用它来加载稍后会用到的一系列的MIME类型。

default_type 设置文件使用的默认的MIME-type。

charset 设置我们的头文件中的默认的字符集

gzip on; 

gzip_disable "msie6"; 

# gzip_static on; 

gzip_proxied any; 

gzip_min_length 1000; 

gzip_comp_level 4; 

gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; 

gzip 是告诉nginx采用gzip压缩的形式发送数据。这将会减少我们发送的数据量。

gzip_disable 为指定的客户端禁用gzip功能。我们设置成IE6或者更低版本以使我们的方案能够广泛兼容。

gzip_static 告诉nginx在压缩资源之前,先查找是否有预先gzip处理过的资源。这要求你预先压缩你的文件(在这个例子中被注释掉了),从而允许你使用最高压缩比,这样nginx就不用再压缩这些文件了(想要更详尽的gzip_static的信息,请点击这里)。

gzip_proxied 允许或者禁止压缩基于请求和响应的响应流。我们设置为any,意味着将会压缩所有的请求。

gzip_min_length 设置对数据启用压缩的最少字节数。如果一个请求小于1000字节,我们最好不要压缩它,因为压缩这些小的数据会降低处理此请求的所有进程的速度。

gzip_comp_level 设置数据的压缩等级。这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的。我们设置为4,这是一个比较折中的设置。

gzip_type 设置需要压缩的数据格式。上面例子中已经有一些了,你也可以再添加更多的格式。

# cache informations about file descriptors, frequently accessed files 

# can boost performance, but you need to test those values 

open_file_cachemax=100000 inactive=20s; 

open_file_cache_valid 30s; 

open_file_cache_min_uses 2; 

open_file_cache_errors on; 

## 

# Virtual Host Configs 

# aka our settings for specific servers 

## 

include /etc/nginx/conf.d/*.conf; 

include /etc/nginx/sites-enabled/*; 

open_file_cache 打开缓存的同时也指定了缓存最大数目,以及缓存的时间。我们可以设置一个相对高的最大时间,这样我们可以在它们不活动超过20秒后清除掉。

open_file_cache_valid 在open_file_cache中指定检测正确信息的间隔时间。

open_file_cache_min_uses 定义了open_file_cache中指令参数不活动时间期间里最小的文件数。

open_file_cache_errors 指定了当搜索一个文件时是否缓存错误信息,也包括再次给配置中添加文件。我们也包括了服务器模块,这些是在不同文件中定义的。如果你的服务器模块不在这些位置,你就得修改这一行来指定正确的位置。

一个完整的配置

user www-data; 

pid /var/run/nginx.pid; 

worker_processes auto; 

worker_rlimit_nofile 100000; 

events { 

worker_connections 2048; 

multi_accept on; 

use epoll; 

http { 

server_tokens off; 

sendfile on; 

tcp_nopush on; 

tcp_nodelay on; 

access_log off; 

error_log /var/log/nginx/error.log crit; 

keepalive_timeout 10; 

client_header_timeout 10; 

client_body_timeout 10; 

reset_timedout_connection on; 

send_timeout 10; 

limit_conn_zone $binary_remote_addrzone=addr:5m; 

limit_conn addr 100; 

include /etc/nginx/mime.types; 

default_type text/html; 

charset UTF-8; 

gzip on; 

gzip_disable "msie6"; 

gzip_proxied any; 

gzip_min_length 1000; 

gzip_comp_level 6; 

gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; 

open_file_cachemax=100000 inactive=20s; 

open_file_cache_valid 30s; 

open_file_cache_min_uses 2; 

open_file_cache_errors on; 

include /etc/nginx/conf.d/*.conf; 

include /etc/nginx/sites-enabled/*; 

编辑完配置后,确认重启nginx使设置生效。


下面这描述也是非常好的:http://blog.csdn.net/xyang81/article/details/51814787

Nginx的配置是以模块为单位来组织的,每一个模块包含一个或多个指令,指令是配置文件中的最小配置单元,一切配置项皆为指令。如http核心模块中的include、default_type、sendfile指令,都属于http模块。nginx所有模块中的指令见官方文档说明:http://nginx.org/en/docs/dirindex.html

注意:以下配置中的“上下文”表示指令可以配置在哪些模块中。

main:顶层配置,约束服务器的行为

1、服务器级别核心配置

指令上下文语法默认值功能描述

usermainuser nobody nobyd;nobody以哪个用户权限运行工作线程

daemonmaindaemon yes;yesnginx是否以守护进程运行

worker_processesmainworker_processes number;1配置工作进程数。传统的web服务器(如apache)都是同步阻塞模型,一请求一进(线)程模式,当进(线)程数增达到一定程度后,更多CPU时间浪费在线程和进程切换当中,性能急剧下降,所以负载率不高。Nginx是基于事件的非阻塞多路复用(epoll或kquene)模型,一个进程在短时间内就可以响应大量的请求。建议将该值设置<=cpu核心数量,一般高于cpu核心数量不会带来好处,反而可能会有进程切换开销的负面影响。

worker_connectionseventsworker_connections number;1024并发响应能力的关键配置值,表示每个进程允许的最大同时连接数。maxConnection = work_connections * worker_processes;一般一个浏览器会同时开两条连接,如果是反向代理,nginx到后服务器的连接数量也要占用2条连接数,所以,做静态服务器,一般maxConnection = work_connections * worker_processes / 2; 做反代理服务器时maxConnection = work_connections * worker_processes / 4;

useeventsuse epoll;根据不同的平台,选择最高效的连接处理方法指定处理连接请求的方法。linux内核2.6以上默认使用epoll方法,其它平台请参考:http://nginx.org/en/docs/events.html 备注:要达到超高负载下最好的网络响应能力,还有必要优化与网络相关的linux内核参数

worker_cpu_affinitymainworker_cpu_affinity cpumask …;无将工作进程绑定到特定的CPU上,减少CPU在进程之间切换的开销。用二进制bit位表示进程绑定在哪个CPU内核。如8内核4进程时的设置方法:worker_cpu_affinity 00000001 00000010 00000100 10000000

worker_rlimit_nofilemainworker_rlimit_core size;受linux内核文件描述符数量限制设置nginx最大能打开的文件描述符数量。因为Linux对每个进程所能打开的文件描述数量是有限制的,默认一般是1024个,可通过ulimit -n FILECNT或/etc/securit/limits.conf配置修改linux默认能打开的文件句柄数限制。建议值为:系统最大数量/进程数。但进程间工作量并不是平均分配的,所以可以设置在大一些。推荐值为:655350

error_logmain, http, mail, stream, server, locationerror_log 日志文件路径 日志级别;error_log logs/error.log error;配置错误日志文件的路径和日志级别。日志级别有debug, info, notice, warn, error, crit, alert和emerg几种。nginx的日志使用syslog输出,所以输出的日志格式是有规律的,系统运维人员可以根据日志规则进行查错或统计分析。更多说明请参考官方文档:http://nginx.org/en/docs/ngx_core_module.html#error_log

pidmainpid 守护进程socket文件路径;pid logs/nginx.pid配置nginx守护进程ID存储文件路径(不是工作进程)

以上是nginx的顶层配置,管理服务器级别的行为。更多配置请参考官方文档:http://nginx.org/en/docs/ngx_core_module.html#working_directory

2、HTTP模块核心配置

nginx做为一个HTTP反向代理服务器,平时接触得最多的应该是针对http请求的相关配置了,和http模块有关的所有配置都放在http { ... }配置中。

指令上下文语法功能描述

typeshttp, server, locationtypes { mime类型 文件后缀;};配置能处理的文件类型。如:text/html html htm shtml;

includeanyinclude 文件路径;将外部文件的内容做为配置拷贝到nginx.conf文件中。如:include mime.type; 将当前目录下的mime.type配置文件拷贝到nginx配置文件中。文件路径可以是相对路径或绝对路径。文件名可以用*来表示通配符。

default_typehttp, server, locationdefault_type mime类型;文件名到后缀的映射关系。配置默认的mime类型,当在types指令中找不到请求的文件类型时,就使用default_type指定的类型。默认为text/plain类型。

access_loghttp, server, location, if in location, limit_exceptaccess_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];

access_log off;

关闭或开启访问日志。默认配置为:access_log logs/access.log combined; 表示根据combined定义的日志格式,写入logs/access.log文件中,combined是http模块默认格式。如果定义了buffer和gzip其中一个参数,日志默认会先写入缓存中,当缓存满了之后,通过gzip压缩缓存中的日志并写入文件,启用了gzip压缩必须保证nginx安装的时候添加了gzip模块。缓存大小默认为64K。可以配置gzip的1~9的压缩级别,级别越高压缩效率越大,日志文件占用的空间越小,但要求系统性能也越高。默认值是1。http://nginx.org/en/docs/http/ngx_http_log_module.html#access_log

log_formathttplog_format 格式名称 日志格式;定义http访问日志的格式,在日志格式中可以访问http模块的内嵌变量,如果变存在的话,会做为日志输出。如:remoteaddr,request等,更多变量请参考:http://nginx.org/en/docs/http/ngx_http_core_module.html#variables

sendfilehttp, server, location, if in locationsendfile on | off;启用内核复制模式。作为静态服务器可以提高最大的IO访问速度。传统的文件读写采用read和write方式,流程为:硬盘 >> kernel buffer >> user buffer>> kernel socket buffer >>协议栈,采用sendfile文件读写的流程为:硬盘 >> kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈,很明显sendfile这个系统调用减少了内核到用户模式之间的切换和数据拷贝次数,直接从内核缓存的数据拷贝到协议栈,提高了很大的效率。这篇文章介绍比较详细:http://xiaorui.cc/?p=1673

tcp_nodelayhttp, server, locationoff|on;

tcp_nopushhttp, server, locationoff|on;tcp_nodelay和tcp_nopush这两个参数是配合使用的,启动这两项配置,会在数据包达到一定大小后再发送数据。这样会减少网络通信次数,降低阻塞概率,但也会影响响应及时性。比较适合于文件下载这类的大数据通信场景。

keepalive_timeouthttp, server, locationkeepalive_time 65;客户端到服务器建立连接的超时时长,超过指定的时间服务器就会断开连接。默认为75秒。降低每个连接的alive时间可在一定程度上提高可响应连接数量,所以一般可适当降低此值

gziphttp, server, location, if in locationgzip on | off;开启内容压缩,可以有效降低客户端的访问流量和网络带宽

gzip_min_lengthhttp, server, locationgzip_min_length length;单位为k,默认为20k。内容超过最少长度后才开启压缩,因为太短的内容压缩效果不佳,且压缩过程还会浪费系统资源。这个压缩长度会作为http响应头Content-Length字段返回给客户端。 建议值:1000

gzip_comp_levelhttp, server, locationgzip_comp_level 1~9;压缩级别,默认值为1。范围为1~9级,压缩级别越高压缩率越高,但对系统性能要求越高。建议值:4

gzip_typeshttp, server, locationgzip_types mime-type …;压缩内容类型,默认为text/html;。只压缩html文本,一般我们都会压缩js、css、json之类的,可以把这些常见的文本数据都配上。如:text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

open_file_cachehttp, server, locationopen_file_cache off; open_file_cache max=N [inactive=time];默认值为off; 设置最大缓存数量,及缓存文件未使用的存活期。建议值:max=655350(和worker_rlimit_nofile参数一致) inactive=20s;

open_file_

cache_min_uses

http, server, locationopen_file_cache_min_uses number;默认为1,有效期内文件最少使有的次数。建议值:2

open_file

_cache_valid

http, server, locationopen_file_cache_valid time;默认为60s,验证缓存有效期时间间隔。 表示每隔60s检查一下缓存的文件当中,有哪些文件在20s以内没有使用超过2次的,就从缓存中删除。采用lru算法。

serverserver { … }httpHTTP服务器的核心配置,用于配置HTTP服务器的虚拟主机,可以配置多个

listenlisten ip[:端口]server配置虚拟主机监听的IP地址和端口,默认监听本机IP地址和80或8000端口。如果只设置了IP没设端口,默认使用80端口。如果只设置了端口,没设置IP默认使用本机IP。详细配置请参考:http://nginx.org/en/docs/http/ngx_http_core_module.html#listen

server_nameserver_name domain_name …;server配置虚拟主机的域名,可以指定多个,用空格分隔。默认为空

charsethttp, server, location, if in locationcharset charset | off;设置请求编码,和url参数乱码问题有关。

locationserver, locationlocation [ = | ~ | ~* | ^~ ] uri { … } 

location @name { … }

http请求中的一个重要配置项,用于配置客户端请求服务器url地址的匹配规则。可以配置多个匹配规则

3、核心配置优化

# nginx不同于apache服务器,当进行了大量优化设置后会魔术般的明显性能提升效果# nginx在安装完成后,大部分参数就已经是最优化了,我们需要管理的东西并不多#user  nobody;#阻塞和非阻塞网络模型:#同步阻塞模型,一请求一进(线)程,当进(线)程增加到一定程度后#更多CPU时间浪费到切换一,性能急剧下降,所以负载率不高#Nginx基于事件的非阻塞多路复用(epoll或kquene)模型#一个进程在短时间内可以响应大量的请求#建议值 <= cpu核心数量,一般高于cpu数量不会带好处,也许还有进程切换开销的负面影响worker_processes4;#将work process绑定到特定cpu上,避免进程在cpu间切换的开销worker_cpu_affinity0001001001001000#8内核4进程时的设置方法 worker_cpu_affinity 00000001 00000010 00000100 10000000# 每进程最大可打开文件描述符数量(linux上文件描述符比较广义,网络端口、设备、磁盘文件都是)# 文件描述符用完了,新的连接会被拒绝,产生502类错误# linux最大可打开文件数可通过ulimit -n FILECNT或 /etc/security/limits.conf配置# 理论值 系统最大数量 / 进程数。但进程间工作量并不是平均分配的,所以可以设置的大一些worker_rlimit_nofile65535;#error_log  logs/error.log;#error_log  logs/error.log  notice;#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {# 并发响应能力的关键配置值# 每个进程允许的最大同时连接数,work_connectins * worker_processes = maxConnection;# 要注意maxConnections不等同于可响应的用户数量,# 因为一般一个浏览器会同时开两条连接,如果反向代理,nginx到后端服务器的连接也要占用连接数# 所以,做静态服务器时,一般 maxClient = work_connectins * worker_processes / 2# 做反向代理服务器时 maxClient = work_connectins * worker_processes / 4# 这个值理论上越大越好,但最多可承受多少请求与配件和网络相关,也可最大可打开文件,最大可用sockets数量(约64K)有关worker_connections65535;# 指明使用epoll 或 kquene (*BSD)use epoll;# 备注:要达到超高负载下最好的网络响应能力,还有必要优化与网络相关的linux内核参数}http {    include      mime.types;    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"';# 关闭此项可减少IO开销,但也无法记录访问信息,不利用业务分析,一般运维情况不建议使用access_log off# 只记录更为严重的错误日志,可减少IO压力error_log logs/error.log crit;#access_log  logs/access.log  main;# 启用内核复制模式,应该保持开启达到最快IO效率sendfile        on;# 简单说,启动如下两项配置,会在数据包达到一定大小后再发送数据# 这样会减少网络通信次数,降低阻塞概率,但也会影响响应及时性# 比较适合于文件下载这类的大数据包通信场景#tcp_nopush    on; 在 #tcp_nodelay on|off on禁用Nagle算法 #keepalive_timeout  0;# HTTP1.1支持持久连接alive# 降低每个连接的alive时间可在一定程度上提高可响应连接数量,所以一般可适当降低此值keepalive_timeout  30s;# 启动内容压缩,有效降低网络流量gzip on;# 过短的内容压缩效果不佳,压缩过程还会浪费系统资源gzip_min_length1000;# 可选值1~9,压缩级别越高压缩率越高,但对系统性能要求越高gzip_comp_level4;# 压缩的内容类别gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;# 静态文件缓存# 最大缓存数量,文件未使用存活期open_file_cache max=65535inactive=20s;# 验证缓存有效期时间间隔open_file_cache_valid 30s;# 有效期内文件最少使用次数open_file_cache_min_uses2;    server {        listen80;        server_name  localhost;        charset utf-8;#access_log  logs/host.access.log  main;location / {            root  html;            index  index.html index.htm;        }#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page500502503504/50x.html;        location = /50x.html {            root  html;        }...}...}

下面这篇文章讲解了nginx监控后端接口健康情况:

http://blog.csdn.net/moqiang02/article/details/42846221

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

推荐阅读更多精彩内容

  • 1.简介:  Nginx:engine X ,2002年,开源,商业版 http协议:web服务器(类似于ht...
    尛尛大尹阅读 1,828评论 0 3
  • I/O模型Nginx介绍Nginx的安装和目录结构Nginx的配置Nginx的编译安装 一、I/O模型 (一)I/...
    哈喽别样阅读 865评论 0 4
  • 大多数的Nginx安装指南告诉你如下基础知识——通过apt-get安装,修改这里或那里的几行配置,好了,你已经有了...
    错位的季节阅读 302评论 0 1
  • 大多数的Nginx安装指南告诉你如下基础知识——通过apt-get安装,修改这里或那里的几行配置,好了,你已经有了...
    Uzero阅读 1,032评论 0 5
  • 大多数的Nginx安装指南告诉你如下基础知识——通过apt-get安装,修改这里或那里的几行配置,好了,你已经有了...
    帅T阅读 281评论 0 2