Nginx最多可以打开文件数
设置nginx最大可打开文件数
在nginx.conf文件全局配置中添加
vim /usr/local/nginx/conf/nginx.conf 添加以下
worker_rlimit_nofile 102400;
修改系统可以打开的最大文件数:
临时修改:ulimit -n 102400 ulimit -n
永久修改:修改linux的软硬件限制文件/etc/security/limits.conf
vim /etc/security/limits.conf 添加以下
- soft nofile 102400
- hard nofile 102400 重新登录生效ulimit -n Nginx事件处理模型
vim /usr/local/nginx/conf/nginx.conf
events {
use epoll;
worker_connections 65535; #单个进程允许客户端最大并发连接数
}
- nginx采用epoll事件模型,处理效率高 worker_connections是单个worker进程允许客户端最大连接数,这个数值一般根据服务器性能和内存来制定,实际最大值就是worker进程数乘以work_connections 单个进程允许客户端最大并发连接数 http主体优化 开启高效传输模式
• vim /usr/local/nginx/conf/nginx.conf
http {
include mime.types; #媒体类型
default_type application/octet-stream; #默认媒体类型足够
sendfile on;(sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。)
tcp_nopush on; #取消注释
长连接超时时间
主要目的是保护服务器资源,CPU,内存,控制连接数,因为建立连接也是需要消耗资源的
vim /usr/local/nginx/conf/nginx.conf
keepalive_timeout 65;
文件上传大小限制
nginx可以修改上传文件大小限制
vim /usr/local/nginx/conf/nginx.conf
client_max_body_size 10m; #在40行添加
location匹配
Nginx的location通过指定模式来与客户端请求的URI相匹配,location可以把网站的不同部分,定位到不同的处理方式上
= 表示做精确匹配,即要求请求的地址和匹配路径完全相同
~:正则匹配,区分大小写
~*:正则匹配”不区分大小写
^~:指令用于字符前缀匹配
这个是有顺序的
精确匹配 > 前缀匹配 > 正则匹配 > 正常匹配 > 全局匹配
面对一个location,先判断是否是正则匹配,如果是正则匹配,遇到匹配的模式,则命中。如果不是正则,则把匹配的模式放到一边,继续往下阅读配置,阅读完毕所有的匹配模式,查看哪一种的匹配模式更长,则是最终命中的模式。
同级的匹配需要注意两个关键细节,是否是正则匹配,是否是最长匹配。
nginx配置文件检测
nginx -t
检测有没有问题,如果没问题,就执行 nginx -reload 重启一下nginx
Fastcgi调优:
Cache:写入缓存区
Buffer:读取缓存区
Fastcgi是静态服务和动态服务的一个接口
fastcgi参数解释:
fastcgi_connect_timeout 300; #指定连接到后端FastCGI的超时时间。
fastcgi_send_timeout 300; #向FastCGI传送请求的超时时间。
fastcgi_read_timeout 300; #指定接收FastCGI应答的超时时间。
fastcgi_buffer_size 64k; #指定读取FastCGI应答第一部分需要用多大的缓冲区,这个值表示将使用1个64KB的缓冲区读取应答的第一部分(应答头),可以设置为fastcgi_buffers选项指定的缓冲区大小。
fastcgi_buffers 4 64k; #指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求,如果一个php脚本所产生的页面大小为256KB,那么会分配4个64KB的缓冲区来缓存,如果页面大小大于256KB,那么大于256KB的部分会缓存到fastcgi_temp_path指定的路径中,但是这并不是好方法,因为内存中的数据处理速度要快于磁盘。一般这个值应该为站点中php脚本所产生的页面大小的中间值,如果站点大部分脚本所产生的页面大小为256KB,那么可以把这个值设置为“8 32K”、“4 64k”等。
fastcgi_busy_buffers_size 128k; #建议设置为fastcgi_buffer的两倍,繁忙时候的buffer
fastcgi_temp_file_write_size 128k; #在写入fastcgi_temp_path时将用多大的数据块,默认值是fastcgi_buffers的两倍,该数值设置小时若负载上来时可能报502 Bad Gateway
fastcgi_temp_path #缓存临时目录
fastcgi_cache ngx_fcgi_cache; #表示开启FastCGI缓存并为其指定一个名称。开启缓存非常有用,可以有效降低CPU的负载,并且防止502的错误发生,但是开启缓存也可能会引起其他问题,要很据具体情况选择
fastcgi_cache_valid 200 302 1h; #用来指定应答代码的缓存时间,实例中的值表示将200和302应答缓存一小时,要和fastcgi_cache配合使用
fastcgi_cache_valid 301 1d; #将301应答缓存一天
fastcgi_cache_valid any 1m; #将其他应答缓存为1分钟
fastcgi_cache_min_uses 1; #该指令用于设置经过多少次请求的相同URL将被缓存。
fastcgi_cache_key http://request_uri; #该指令用来设置web缓存的Key值,nginx根据Key值md5哈希存储.一般根据request_uri(请求的路径)等变量组合成proxy_cache_key 。
fastcgi_pass #指定FastCGI服务器监听端口与地址。
fastcgi_cache_path #定义缓存的路径
修改nginx.conf配置文件,在http标签中添加如下内容(server{}之上)
总结:
nginx的缓存功能有:proxy_cache / fastcgi_cache
proxy_cache的作用是缓存后端服务器的内容,可能是任何内容,包括静态的和动态。
fastcgi_cache的作用是缓存fastcgi生成的内容,很多情况是php生成的动态的内容。
proxy_cache缓存减少了nginx与后端通信的次数,节省了传输时间和后端宽带。
fastcgi_cache缓存减少了nginx与php的通信的次数,更减轻了php和数据库(mysql)的压力。
在server location标签添加如下:
gzip调优
Nginx启用压缩功能需要你来ngx_http_gzip_module模块,apache使用的是mod_deflate
一般我们需要压缩的内容有:文本,js,html,css,对于图片,视频,flash不压缩,同时也要注意,我们使用gzip的功能是需要消耗CPU的!
在http{}区域中添加
拷贝测试文件
cp /etc/passwd /usr/local/nginx/html/passwd.html
cd /usr/local/nginx/html/
du -sh *
按F12然后刷新网页,在开发人员工具里可以看到,passwd.html大小为927B,在网页标头里可以看到,Accept-Encoding: gzip, deflate启用了gzip压缩。
expires缓存调优
缓存,主要针对于图片,css,js等元素更改机会比较少的情况下使用,特别是图片,占用带宽大,我们完全可以设置图片在浏览器本地缓存365d,css,js,html可以缓存个10来天,这样用户第一次打开加载慢一点,第二次,就非常快了!缓存的时候,我们需要将需要缓存的扩展名列出来!Expires缓存配置在server字段里面。
以扩展名区分
vim /usr/local/nginx/conf/nginx.conf
location ~ ..(gif|jpg|jpeg|png|bmp|swf)$
{
expires 365d;
}
location ~ ..(js|css)?$
{
expires 30d;
}
对目录及其进行判断
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
expires 360d;
}
location ~ (robots.txt) {
expires 7d;
break;
}
注:用于中断当前相同作用域中的Nginx配置,和循环语句中的break语法类似,可以在server块和location以及if块中使用。
优点:1)expires可以降低网站购买的带宽,节约成本
(2)同时提升用户访问体验
(3)减轻服务的压力,节约服务器成本,甚至可以节约人力成本,是web服务非常重要的功能。
expire功能缺点:
被缓存的页面或数据更新了,用户看到的可能还是旧的内容,反而影响用户体验。
日志切割优化
日志优化的目的,是为了一天日志一压缩,按天存放,超过10天的删除
创建日志切割脚本
cd /usr/local/nginx/logs/
vim cut_nginx_log.sh
配置任务计划
crontab -e
0 0 * * * /bin/sh /usr/local/nginx/logs/cut_nginx_log.sh >/dev/null 2>&1
添加只想权限
chmod +x cut_nginx_log.sh #添加可执行
去掉不需要的日志统计
vim /usr/local/nginx/conf/nginx.conf
location ~ .*.(js|jpg|jpeg|JPG|JPEG|css|bmp|gif|GIF)$ {
access_log off;
}
error log 关闭
关闭 error log 千万不要写 error_log off; ,这样错误日志会被写到一个叫做 off的文件中
正确关闭错误的方法:
error_log /dev/null ;
日志格式优化
Nginx软件会把每个用户访问网站的日志信息记录到指定的日志文件里,供网站提供者分析用户的浏览行为等,此功能由ngx_http_log_module模块负责。
对应的官方地址为:http://nginx.org/en/docs/http/ngx_http_log_module.html。
Nginx的访问日志主要由两个参数控制。
vim /usr/local/nginx/conf/nginx.conf #开启25-29行
log_format main '$remote_addr - time_local] “KaTeX parse error: Double superscript at position 36: … '̲status http_referer” ’
‘“http_x_forwarded_for”’;
access_log logs/access.log main;
参数配置:1.http_x_forwarded_for 用以记录客户端的ip地址;
2.time_local : 用来记录访问时间与时区;
4.status : 用来记录请求状态;成功是200,
6.http_referer :用来记录从那个页面链接访问过来的;
8.$http_user_agent :记录客户端浏览器的相关信息;
9. $http_x_forwarded_for:客户端IP地址列表(包括中间经过的代理),当前有代理服务器时,设置web站点记录客户段地址的配置,此参数生效的前提是代理服务器上也进行了相关的x_forwarded_for设置。
目录文件访问控制
主要用在禁止目录下指定文件被访问,当然也可以禁止所有文件被访问!一般什么情况下用?比如是有存储共享,这些文件本来都只是一些下载资源文件,那么这些资源文件就不允许被执行,如sh,py,pl,php等等
禁止访问images下面的php程序文件
修改配置文件
vim /usr/local/nginx/conf/nginx.conf
location ~ ^/images/..(php|php5|sh|py|pl)$ {
deny all;
}
重启服务nginx -s reload
创建测试文件
mkdir /usr/local/nginx/html/images
echo “<?php phpinfo(); ?>” > /usr/local/nginx/html/images/index.php
测试访问192.168.12.11
多个目录书写方法
vim /usr/local/nginx/conf/nginx.conf
location ~ ^/images/(attachment|avatar)/..(php|php5|sh|py|py)$ {
deny all;
}
配置nginx禁止访问*.txt文件
创建测试文件
echo Test > /usr/local/nginx/html/a.txt
测试
vim /usr/local/nginx/conf/nginx.conf
location ~* .(txt|doc)$ {
if ( -f KaTeX parse error: Expected 'EOF', got '}' at position 124: … all; }̲ 重载nginx nginx … {
if ( -f r e q u e s t f i l e n a m e ) r o o t / u s r / l o c a l / n g i n x / h t m l ; r e w r i t e / ( . ∗ ) request_filename) { root /usr/local/nginx/html; } rewrite ^/(.*)request
f
ilename)root/usr/local/nginx/html;rewrite
/
(.∗) http://www.baidu.com last;
对目录进行访问限制
这次的图片丢了,后期加上从发。