1.worker_processes=8
设置 worker_processes 来更改 Nginx 的进程数量,设置数值一般与服务器逻辑cpu个数相同,目的是把不同的worker_processes进程分配到不同的cpu上运行
- 查看逻辑cpu个数方法 cat /proc/cpuinfo | grep "processor" | wc -l
- 查看物理cpu的个数 cat /proc/cpuinfo | grep "physical id" | sort | uniq |wc -l
- 查看cpu是几核 cat /proc/cpuinfo | grep "cored" | uniq
2.全局错误日志和pid文件
error_log /var/log/nginx/error.log;
pid //var/run/nginx.pid;
3.工作模式和连接数上限
events{
use epoll; #epoll是多路复用IO(I/O Multiplexing) 中的一种方式,但仅用于linux2.6内核,可以大大提高nginx的性能
worker_connections 1024; #单个后台worker process进程的最大并发链接数
调整方式 查看 ulimit -n 系统句柄配置
系统可以打开的文件句柄数是 cat /proc/sys/fs/file-max
并发链接总数是worker_processes 和 worker_connections的乘积
即max_clients=worker_processes*worker_connections
在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4 为什么
# 为什么上面反向代理要除以4,应该说是一个经验值
并发连接总输小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内
#multi_accept on;
}
4.设定http服务器
http{
include mime.types ; //设定mime类型,类型由mime.type文件定义,文件扩展名与文件类型映射表
default_type application/octet-stream; //默认文件类型
access_log /var/log/nginx/access.log; //设定日志格式
sendfile on;
#sendfile指令指定nginx是否调用sendfile函数(zero copy方式)来输出文件
#对于剖通应用,必须设为on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的uptime时间。如果图片显示不正常把这个改成off
tcp_nopush on;防止网络阻塞
tcp_nodelay on;防止网络阻塞
keepalive_timeout 120;长连接超时时间,单位是秒
server_tokens 并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,这样对于安全性是有好处的
gzip on; gzip告诉nginx采用gzip压缩的形式发送数据,这将会减少我们发送的数据量
gzip_disable 为指定的客户端禁用gzip功能
gzip_min_length 设置对数据启用压缩的最少字节数,如果一个请求小于1000,我们最好不要压缩它,因为压缩小的数据会降低处理此请求的所有进程的速度
gzip_comp_level 设置数据的压缩等级,这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的,我们设置成4,这是一个比较折中的设置
gzip_buffers 4 16k 压缩缓冲区
gzip_http_version 1.0 压缩版本 默认是1.1
gzip_type设置需要压缩的数据格式
FastCGI相关参数是为了改善网站的性能,减少资源占用,提高访问速度
}
nginx日志的指令主要有两条:
log_format , 设置日志的格式
access_log 指定日志文件的存放路径、格式和缓存大小
两条指令在nginx配置文件中的位置可以在http{ }之间,也可以在虚拟主机之间,即server{ } 两大括号之间
log_format语法如下:
log_format name format [format ...]
name表示定义的格式名称(name名称在nginx配置文件中是不能重复的)
format 表示定义的格式样式。log_format有一个默认的、无须设置的combined日志格式设置
但这个日志格式得不到客户端的真实ip
原因在客户端和web服务器之间增加了中间层(比如反向代理服务器,CDN加速), 因此web服务器无法直接拿到客户端的IP,通过$remote_addr变量拿到的将是反向代理服务器的IP地址。但是反向代理服务器在转发请求的http头信息中,可以增加X-Forwarded-For信息,用以记录原有的客户端IP地址和原来客户端请求的服务器地址。这时候就要用log_format指令来设置日志格式,让日志记录X-Forwarded-For信息中的IP地址,即客户的真实IP
log_format main '$http_x_forwarded_for $remote_port [$time_local] '
'"$request" $status $body_bytes_sent"'
'"http_referer" "$http_user_agent" "$cookie_id"';
access_log logs/logs.log main;
error_log logs/error.log warn;
access_log语法如下
access_log path [format [buffer=size | off ] ]
其中path表示日志文件的存放路径,format表示使用log_format指令设置的日志格式的名称,buffer=size表示设置内存缓冲区的大小,例如可以设置buffer=32k
1)如果不想记录日志,可以使用以下指令关闭日志记录
access_log off
2)如果想使用默认的combined格式的日志记录,可以直接写
access_log /xxx/access.log
或者access_log /xxx/access.log combined;
3)如果想使用自定义格式的日志记录,可以使用以下示例,其中的mylogformat是日志格式名称
4)在nginx 0.7.4之后的版本中,access_log 指令中的日志文件路径可包含变量 如
access_log /data/logs/$server_name.log combined;
设定虚拟主机配置
server{
listen 80;
server_name 172.16.110.3 weixin.shike001.com;
root /www/weixin.shike001.com;
index index.php index.html index.htm;
access_log logs/access.log main;
error_log /var/log/nginx/error.log warn;
定义错误提示页面
error_page 404 500 502 503 504 /404/index.htm;
#静态文件,nginx自己处理
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
#过期30天,静态文件不怎么更新,过期可以设大一点,
#如果频繁更新,则可以设置得小一点。
expires 30d;
}
#PHP脚本请求全部转发到FastCGI处理,使用FastCGI默认配置
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
#禁止访问 .htxx 文件
location ~/.ht {
deny all;
}
#设定查看Nginx状态的地址
location /NginxStatus {
stub_status on;
access_log on;
auth_basic "NginxStatus";
auth_basic_user_file conf/htpasswd;
#htpasswd文件的内容可以用apache提供的htpasswd工具来产生。
}
SSI:Server Side Include,是一种基于服务端的网页制作技术,大多数(尤其是基于Unix平台)的web服务器如Netscape Enterprise Server等均支持SSI命令。
它的工作原因是:在页面内容发送到客户端之前,使用SSI指令将文本、图片或代码信息包含到网页中。对于在多个文件中重复出现内容,使用SSI是一种简便的方法,将内容存入一个包含文件中即可,不必将其输入所有文件。通过一个非常简单的语句即可调用包含文件,此语句指示 Web 服务器将内容插入适当网页。而且,使用包含文件时,对内容的所有更改只需在一个地方就能完成。
二.如何在nginx上配置SSI
需要的选项主要是以下三个:
ssi: 默认值off,启用ssi时将其设为on
ssi_silent_errors: 默认值off,开启后在处理SSI文件出错时不输出错误提示"[an error occurred while processing the directive]"。
ssi_types: 默认是text/html,所以如果需支持html,则不需要设置这句,如果需要支持shtml则需要设置:ssi_types text/shtml
三个参数可以放在http, server或location作用域下。

}