配置文件的设置包含:
main 全局设置
server 主机设置
upstream 负载均衡服务器设置
location 部分用于匹配网页设置
关系: server继承main;
location继承server;
upstream不会继承也不会被继承
1、 user nginx1;
#运行用户和组;默认用户为nobody;
nginx1 10820 10787 0 12:28 ? 00:00:00 nginx:
2、 worker_processes 16;
#工作进程数,建议设置为等于CPU总核心数
ps -ef 时注意观察worker_processes
3、 worker_rlimit_nofile 4096;
#每个进程打开的文件句柄数=系统总数/4 不要设置成65535
4、 error_log /usr/log/nginxa1/logs/error.log warn;
#全局错误日志存放路径;级别:debug | info | notice | warn | error | crit
5、 pid logs/nginx.pid;
#pid文件;
6、 #工作模式及连接数上限
events {
#每个进程的最大连接数,不要动不动就65535;
worker_connections 4096;
#使用epoll(linux2.6的高性能方式)
use epoll;
}
#参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
#使用epoll(linux2.6的高性能方式)
7、#设定http标签,利用它的反向代理功能提供负载均衡支持
http {
#mimie.types 浏览器请求的文件媒体类型
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"‘;
$remote_addr直接客户端地址
$http_x_forwarded_for 间接客户端地址(一般前面会有代理服务器)
$remote_user 远程客户端用户名称
$time_local记录访问时间与时区
$request用户的请求,使用的HTTP协议
$status 返回状态,200,404,304等
$body_bytes_sents发送的body字节数
$http_referer 引用页(从哪个链接访问来的)
$http_user_agent客户端浏览器
#设置请求日志
access_log /usr/log/nginxa1/logs/access.log main;
#include指令,可以包含任何你想要包含的配置文件,支持文件名匹配。
#include extra/bbs.conf;[[email protected] scripts]# cat cut_log.sh
#日志切割脚本范例:
cd /application/nginx/logs
mv www_access.log www_access_$(date +%F -d -1day).log
/application/nginx/sbin/nginx -s reload
[[email protected] scripts]# crontab -l|tail -2
#cut nginx log by day by oldboy at 201409
00 00 * * * /bin/sh /server/scripts/cut_log.sh >/dev/null 2>&1
#日志分析软件:syslog、rsyslog、Awstats(svn文档)、flume、logstash、scrilbe、kafka、
8、 设定请求缓冲
#接收header的缓冲区大小
client_header_buffer_size 128k;
该指令用于设置客户端请求的Header头缓冲区大小,默认值为4KB。
large_client_header_buffers 4 256k;
#客户端包体缓冲区大小
client_body_buffer_size 1024k;
#设置客户端能够上传的文件大小,默认为1m
client_max_body_size 8m;
sendfile on;
#开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改 成off。
#开启目录列表访问,合适下载服务器,默认关闭。
autoindex on;
#防止网络阻塞
tcp_nopush on;
#防止网络阻塞
tcp_nodelay on;
#长连接超时时间,单位是秒
keepalive_timeout 120;
#默认编码
#charset GBK;
#长连接保持时间
keepalive_timeout 120;
#不显示Nginx版本号
server_tokens off;
#服务器名字的hash表大小
server_names_hash_bucket_size 64;
server_names_hash_max_size: 512
9、#开启gzip模块,要求安装gzip 在运行./config时要指定
gzip on;
#最小压缩文件大小,默认0
gzip_min_length 1100;
#压缩缓冲区
gzip_buffers 4 16k;
#压缩类型
gzip_types text/plain application/x-javascript text/css application/xml;
#压缩比率,1压缩比最小速度最快;9压缩比最大,传输快,但速度慢,比较消耗cpu资源;
gzip_comp_level 9;
#压缩通过代理的所有文件
gzip_proxied any;
#vary header支持
#前端服务缓存压缩
gzip_vary on;
#压缩版本(默认1.1,前端为squid2.5使用1.0)
gzip_http_version 1.0;
#输出缓冲区
output_buffers 4 32k;
postpone_output 1460;
#此功能同apache的mod_deflate压缩功能,依赖ngx_http_gzip_module模块,默认已安装
10、代理设置;
#代理连接超时时间
proxy_connect_timeout 120;
#代理发送超时时间
proxy_send_timeout 120;
#代理读超时时间
proxy_read_timeout 120;
#设置从后端被代理服务器的响应内容缓冲区大小
proxy_buffer_size 512k;
#开启从后端被代理服务器的响应内容缓冲.
proxy_buffering on;
#设置从被代理的后端服务器取得的响应内容缓冲区的大小和数量
proxy_buffers 32 512k;
#客户端发送header超时
client_header_timeout 3m;
#客户端发送内容超时
client_body_timeout 3m;
#发送到客户端超时
send_timeout 3m;
#proxy_buffers缓冲区,网页平均在32k以下的设置
proxy_buffers 4 32k;
#高负荷下缓冲大小(proxy_buffers*2)
proxy_busy_buffers_size 64k; #
#设定缓存文件夹大小,大于这个值,将从upstream服务器传
proxy_temp_file_write_size 64k;
负载均衡器发给web_server的优化;
参数如下:
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 50m;
client_body_buffer_size 256k;
proxy_connect_timeout 30;
proxy_send_timeout 30;
proxy_read_timeout 60;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
proxy_max_temp_file_size 128m;
proxy_store on;
proxy_store_access user:rw group:rw all:r;
#proxy_temp_path /dev/shm/nginx_proxy;
#proxy_temp_path /data2/nginx_cache;
11、根据cpu核数优化优化进程数;
查看cpu核数
grep "physical id " /proc/cpuinfo
physical id : 0
address sizes : 40 bits physical, 48 bits virtual
physical id : 0
address sizes : 40 bits physical, 48 bits virtual
调度硬件分配
不同的cpu对应配置参考如下
四核cpu服务器参数配置:
worker_cpu_affinity 0001 0010 0100 1000;
#nginx进程CPU亲和力,即把不同的进程分给不同的CPU处理。这里0001 0010 0100 1000是掩 码,分别代表第1、2、3、4颗cpu核心。
八核cpu服务器参数配置:
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
worker_cpu_affinity 0001 0010 0100 1000 0001 0010 0100 1000;
taskset 调整cpu分配
另外(taskset - retrieve or set a process’s CPU affinity)命令本身也有分配CPU的功能。
例如:taskset -c 1,2,3 /etc/init.d/mysql start
资料:http://www.cnblogs.com/edwardlost/archive/2010/10/23/1858991.html
12、fastcgi 参数调整 秒
fastcgi调优(配合PHP引擎动态服务)
fastcgi_connect_timeout 300;
#指定连接到后端FastCGI的超时时间
fastcgi_send_timeout 300;
#向FastCGI传送请求的超时时间,这个值是指已经完成两次握手后向FastCGI传送请求的超时时间。
fastcgi_read_timeout 300;
#指定接收FastCGI应答的超时时间,这个值是指已经完成两次握手后接收FastCGI应答的超时时间。
fastcgi_buffer_size 64k;
#指定读取FastCGI应答第一部分需要用多大的缓冲区,这个值表示将使用1个64KB的缓冲区读取应答的第一部分(应答头),可以设置为fastcgi_buffers选项指定的缓冲区大小。
fastcgi_buffers 4 64k;
#指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求。如果一个PHP脚本所产生的页面大小为256KB,那么会为其分配4个64KB的缓冲区来缓存;如果页面大小大于256KB,那么大于256KB的部分会缓存到fastcgi_temp指定的路径中,但是这并不是好方法,因为内存中的数据处理速度要快于硬盘。一般这个值应该为站点中PHP脚本所产生的页面大小的中间值,如果站点大部分脚本所产生的页面大小为256KB,那么可以把这个值设置为“16 16k”、“4 64k”等。
fastcgi_busy_buffers_size 128k;
#建议为fastcgi_buffers的两倍
fastcgi_temp_file_write_size 128k;
#在写入fastcgi_temp_path时将用多大的数据块,默认值是fastcgi_buffers的两倍,设置上述数值设置太小时若负载上来时可能报 502 Bad Gateway
fastcgi_cache oldboy_nginx
#表示开启FastCGI缓存并为其指定一个名称。开启缓存非常有用,可以有效降低CPU的负载,并且防止502错误的发生,但是开启缓存也可能会引起其它问题,要根据具体情况选择。
fastcgi_cache_valid 200 302 1h;
#用来指定应答代码的缓存时间,实例中的值表示将200和302应答缓存一个小时
fastcgi_cache_valid 301 1d;
#将301应答缓存1天
fastcgi_cache_valid any 1m;
#将其它应答缓存为1分钟
fastcgi_cache_min_uses 1;
#缓存在fastcgi_cache_path指令inactive参数值时间内的最少使用次数
####进程交互会产生零时文件
13、upstream的负载均衡
upstream xxxx.xx.net{
#weigth参数表示权值,权值越高被分配到的几率
#sru_id=a:index=1 ,srun_id=b:index=2, srun_id=c:index=3,srun_id=d:index=4
server 10.110.5.81:8081 max_fails=3 fail_timeout=30s srun_id=a;
server 10.110.5.82:8081 max_fails=3 fail_timeout=30s srun_id=b;
server 10.110.5.83:8084 max_fails=3 fail_timeout=30s srun_id=c;
server 10.110.5.84:8084 max_fails=3 fail_timeout=30s srun_id=d;
#保证按照seesion分发
jvm_route $cookie_JSESSIONID|sessionid;
#jvm_route $cookie_JSESSIONID|jsessionid;
}
#weight=NUMBER ——设置服务器的权重,权重数高被分配访问数越高,默认权重1.
#max_fails=NUMBER——在参数fail_timeout指定的时间内对后端服务器请求失败的次数,如果检测到后端服务器无法连接及发生服务器错误(404错误除外),则标记为失败。默认值为1.设置为0这关闭这项检查
#fail_timeout=TIME——在经历参数max_fails设置的失败次数后,暂停的时间
#down——标记服务器为永久离线状态,用于ip_hash指令
#backup——仅仅在非backup服务器全部繁忙的时候才启动
#upstream模块拥有以下变量:
# $upstream_addr:处理请求的upstream服务器地址
# $upstream_status:upstream服务器的应答状态
# $upstream_response_time:Upstream服务器响应时间(毫秒),多个响应以逗号和冒号分隔。
# $upstream_http_$HEADER:任意的HTTP协议头信息,例如:$upstream_http_host
14、第一个虚拟服务器
server {
#侦听192.168.8.x的80端口
listen 80;
#主机名地址,可以是ip,或者主机名,多个空格隔开
server_name 10.10.70.x www.xxx.com;
#定义服务器的默认网站根目录位置
root html/bbs;
#定义首页索引文件的名称
index index.php index.html index.htm;
}
15、设定查看状态标签status
server {
listen 80;
server_name status.xxx.org;
stub_status on;
access_log off;
}
16、301重定向
server {
listen 80;
server_name blog.etiantian.org;
root html/blog;
index index.html index.htm;
rewrite ^/(.*) http://www.etiantian.org/$1 permanent;
}
#访问域名下的所有内容跳转到www.etiantian.org /前为域名;
#为防止别人恶意绑定域名可以使用ip地址重定向;
#输入ip访问的是第一个域名;
#.*为内容;$接受;permanent表示永久跳转;
17、expires 缓存功能
#针对网站运营中的(不经常变化的)图片推送到客户端的浏览器进行缓存;
优势: 节省宽带 ;减少服务器压力,支持高的并发;浏览器加快,提升用户体验;
劣势: 网站跟新内容后客户端可能是旧的;测试的时候希望是新的,总是看不到;广告。统计的代码不准确。
解决劣势
根据业务需求设置expires的过期时间;
图片更改(重新上传); 时间1年-10年
广告,统计,不缓存 ;
网站改版 元素要改名js ,css ;
缓存cdn的资源 (***图片) 清理源站图片;让其清理缓存。 (接口 API 或者是web界面管理)
例 :location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 3650d;
}
location 满足条件执行。满足.执行...
范例2:
location ~ .*\.(js|css)?$
{
expires 30d;
}
#server标签里;date -s "" 修改时间 hwlock -c 写入系统时间;
18、防盗链
location
#表示对哪种类型的文件实行防盗链
~ .*\.(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv)$ {
valid_referers
none blocked *.yiibase.com yiibase.com;
#来源判断;
if($invalid_referer)
{
#rewrite
^/ http://www.xxx.com/error.html;
#返回结果,可以指定具体的图片;
return403;
}
}
19、url访问控制(文件、图片、ip都可以设置):
location ~ ^/images/.*\.(php|php5)$
#图片
{
deny all;
location ~ ^/static/.*\.(php|php5)$
}
{
deny all;
}
location ~* ^/data/(attachment|avatar)/.*\.(php|php5)$
#附件和头像
{
deny all;
}
location /admin/ { return 403; }
location /templates/ { return 403; }
#返回状态返回码;location是有顺序的,根据规则调整;
20、伪静态:
待补~~!!!
21、robot.txt 机器人设置
查看: http://www.baidu.com/robots.txt
使用:网站的收录几率降低;
不使用:降低网站的资源消耗;
范例:根据不同的浏览器访问设置:
if ($http_user_agent ~* "Firefox|MSIE")
{
return 403;
}
22、保证网站不遭受木马侵入
1、站点内所有目录和文件的用户和组都因该为root!
2、站点内所有目录权限默认为755;(不能往目录放文件)
3、站点内所有文件权限默认为644;(不能改文件)
注意 网站服务的程序使用的用户不可以使用root。
解决方案:找到上传的目录,授权nginx 可以访问;比较安全!
架构上优化:动态web集群 (架三个web服务,正常浏览、上传、下载各一个服务器)适合所有的web服务器 ;
mount 挂载优化 : mount -o nosuid,noexec,nodev