Nginxbug多,更新版本速度快,所以版本号暴露出去,很容易遭到攻击
Server_tokens off;
在http大模块中修改,不在serve中,也不是location
第二种方式修改:修改源码包,重新编译安装
Vim nginx.h
改完之后重新编译安装,一下
将server_tokens on; 打开
Nginx没有自带的日志分割功能:靠运维人员实现日志分割,只能靠脚本实现。
脚本:
别忘了设置定时任务:
http_gzip_static_module
可以对文件内容和图片进行压缩的功能,节约宽带,提升用户的访问速度
格式:
gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss image/jpg image/jpeg image/png image/gif application/x-httpd-php application/javascript application/json;
查看连接状态:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
可以在日后访问时,不需要经常的后台请求数据,加快访问速度
一般是以静态页面设置,动态页面不与设置缓存时间
在高并发的场景下,需要Nginx启动更多的进程来保护快速响应
根据CPU核心数可以调整Nginx的进程数,生产中给4个足够了
别忘了修改limit.conf,否则没有任何效果
查看CPU核数
为什么8个以上性能会降低:
CPU多了频繁切换,效率会降低
绑定CPU,让其单独处理服务
练习题:
TAME_WAIT大量出现,该如何优化
Time_wait是tcp连接状态的一种,不是报错,出现在四次挥手之后
在time_wait状态下,tcp处于连接等待状态,等待有一个持续时间http1.1会话保持
作用:
1.确保可靠的关闭连接
2.避免连接复用
3.在关闭连接正常之后,一段时间之后,自动消失,而且占用的资源很少,对服务器的性能影响有限
修改内核文件:
vim /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1
#表示开SYN cookies
当出现SYN等待队列溢出时,启用cookies处理syn队列,默认是0 ,1开启。
net.ipv4.tcp_tw_reuse = 1
#time_wait状态可以重用,一个连接就要占用一个端口,time_wait把所有的端口全部占满了,新的连接请求也不会拒绝。
net.ipv4.tcp_tw_recycle = 1
#让time_wait尽快回收。
net.ipv4.tcp_fin_timeout = 60
# 所有time_wait 最大的生命周期60秒。
$remote_addr 客户端的ip地址
以文本形式展示
显示客户端的端口号$remote_port
$uri:显示请求的uri
$host:显示请求的主机名
$request_method显示请求的方法
重要的变量:
Proxy_set_header X-Forwarded $remote_addr
代理服务器设置这个变量,客户端的真实ip要发送给后端,否则代理服务器地址会被拉入黑名单
Proxy_set_header X-Real-IP $remote_addr
客户端的真实ip,发送给后端,现在所有的网站都会要求客户端请求时,加上真实ip
防止其他的网站盗用本站图片
valid_referers none blocked *.kgc.com kgc.com;
if ( $invalid_referer ) {
rewrite ^/ http://www.kgc.com/error.png;
}
valid_referers :设置信任的网站
kgc.com
kgc.com www.kgc.com
None:允许没有http_refer的请求访问资源,请求uri里面可以不包含refer,不带URL
www.kgc.com/ls.jpg
www.kgc.com=www.kgc.com/ls.jpg
Blockd:请求网站时,前面可以不带协议
例如:
不带协议:www.baidu.com
带协议: http://www.baidu.com
if ( $invalid_referer ) {
rewrite ^/ http://www.kgc.com/error.png;
}
如果连接资源是来自上面valid_referers定义的信任列表,$valid_referer变为true,执行重定向
如何设置:
准备两个主机: