Nginx是一个高效、稳定、功能丰富的Web服务器,可以通过简单的配置实现各种需求。
本文以Nginx作为静态网站使用时的配置为例进行记录。
# 指定nginx worker进程运行用户以及用户组,默认由nobody账号运行
user nobody nobody;
# nginx要开启的进程数:每个Nginx进程平均耗费10M~12M内存。根据经验,一般指定一个进程足够了,如果是多核CPU,建议指定和CPU的数量一样的进程数即可
worker_processes 4;
# nginx的进程ID
pid logs/nginx.pid;
# 一个nginx进程进程打开的最多文件描述符(句柄)数目,理论值是最多打开文件数(ulimit -n,ulimit -a看全部限制)与nginx 进程数相除: 修改 /etc/security/limits.conf,设置:root soft nofile 65535 root hard nofile 65535
worker_rlimit_nofile 65535;
events {
# 设定nginx的工作模式及连接数上限
use epoll;
# 每个进程允许的最多连接数, 理论上每台nginx 服务器的最大连接数为worker_processes*worker_connections
worker_connections 65535;
}
http {
include mime.types;
# 设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置PHP环境时,nginx是不予解析的,此时,用浏览器访问PHP文件就会出现下载窗口
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"';
# 客户端请求头的headerbuffer大小。对于大多数请求,1k的缓冲区大小已经足够,如果自定义了消息头或有更大的Cookie,可以增加缓冲区大小。该值必须设置为“系统分页大小”的整倍数,分页大小可以用命令getconf PAGESIZE 取得,这里设置为2k
client_header_buffer_size 2k;
# 客户端请求中较大的消息头的缓存最大数量和大小, 4为个数,32K为大小,最大缓存量为128K
large_client_header_buffers 4 32k;
# 允许客户端请求的最大的单个文件字节数,默认上传文件的大小是1m
client_max_body_size 20m;
# 允许头部参数名称包含下划线
underscores_in_headers on;
# 用于开启高效文件传输模式。将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞
sendfile on;
tcp_nopush on;
tcp_nodelay on;
# 设置客户端连接保持活动的超时时间(秒),服务器将会在这个时间后关闭连接
keepalive_timeout 60;
# 读取客户端请求头超时时间(秒)。如果超过这个时间(指一个请求头没有进入读取步骤),客户端还没有发送任何数据,nginx将返回“Request time out(408)”错误
client_header_timeout 60;
# 读取客户端请求主体超时时间(秒)。如果超过这个时间(指一个请求实体没有进入读取步骤),客户端还没有发送任何数据,nginx将返回“Request time out(408)”错误,默认值是60
client_body_timeout 60;
# 响应客户端的超时时间(秒)。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,nginx将会关闭连接,timeout是指没有进入完整established状态,只完成了两次握手(TCP需要三次握手),如果超过这个时间客户端没有任何响应,nginx将关闭连接
send_timeout 10;
# 设置开启或者关闭gzip模块,on表示开启GZIP压缩,实时压缩输出数据流,编译时带参数:--with-http_gzip_static_module,可以使用nginx -V看编译时带了哪些模块
gzip on;
# 设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认值是0,不管页面多大都进行压缩。建议设置成大于1K的字节数,小于1K可能会越压越大
gzip_min_length 1k;
# 申请4个单位为16K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果
gzip_buffers 4 16k;
# 设置识别HTTP协议版本[1.0 | 1.1],默认是1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可
gzip_http_version 1.1;
# 压缩比:1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu)
gzip_comp_level 2;
# 压缩的类型:无论是否指定,text/html类型总是会被压缩的
gzip_types text/plain application/javascript text/css application/xml;
# 让前端的缓存服务器缓存经过GZIP压缩的页面,例如用Squid缓存经过Nginx压缩的数据
gzip_vary on;
# 设置开启服务器端SSI命令
ssi on;
# SSI命令执行出现错误时静默错误
ssi_silent_errors on;
# 指定文件类型中插入SSI命令
ssi_types text/html,text/shtml;
# 静态网站
}
完整文章:http://www.laobingbiji.com/note/detail.html?note_id=202311171723380000000010187639