响应式网站的特点,wordpress 引入自定义 php 文件,网站怎么做用什么软件,天水网站建设博客实验一、隐藏版本号 要把nginx的版本号隐藏起来#xff0c;防止恶意攻击
方法一#xff1a;修改配置文件
在http模块中加入一个命令 server_token off#xff1b; 过程#xff1a; 备份#xff0c;改配置文件一定要备份 修改配置文件 在http模块中添加 server_tokens …实验一、隐藏版本号 要把nginx的版本号隐藏起来防止恶意攻击
方法一修改配置文件
在http模块中加入一个命令 server_token off 过程 备份改配置文件一定要备份 修改配置文件 在http模块中添加 server_tokens off; 重启一下服务 再回到网页查看版本号是否被隐藏 这时发现已经被隐藏了 方法二在源码包里修改
在nginx源码包里src/core/ 中nginx.h的文件中
修改源码包 在源码包里进行修改要想生效需要在源码包的主目录重新编译一下 在配置文件中把server_tokens打开 重启服务 回到浏览器刷新一下修改成功
总结两个方法会一个即可 实验二nginx日志分割
nginx不自带日志分割工具需要手动以脚本的形式进行日志分割 访问成功记载access.log
访问失败记录在error.log 先看一下日志的时间格式怎么写 写一个脚本 #!/bin/bash # 获取日期 d$(date %Y-%m-%d) # 定义存储目录 dir/usr/local/nginx/logs # 定义需要分割的源日志 logs_file/usr/local/nginx/logs/access.log logs_error/usr/local/nginx/logs/error.log # 定义nginx的pid文件 pid_file/usr/local/nginx/run/nginx.pid if [ ! -d $dir ] then mkdir $dir fi # 移动日志并重命名文件 mv ${logs_file} ${dir}/access_${d}.log mv ${logs_error} ${dir}/error_${d}.log # 发送kill -USR1信号给Nginx的主进程号让Nginx重新生成一个新的日志文件 kill -USR1 $(cat ${pid_file}) #日志文件清理将30天前的日志进行清除 find $logs_path -mtime 30 -exec rm -rf {} \; 赋权执行 查看一下log里面有两个新的日志文件 里面记录了8月5日的日志 实验三nginx的页面压缩
页面压缩可以节约带宽提高用户的访问速度
压缩的功能是默认自带的可以不取消注释
但是需要添加压缩细节需要把gzip打开后进行配置 修改配置文件 取消注释开启gzip的压缩功能 接着添加代码 gzip_min_length 1k; #最小压缩文件的大小 gzip_buffers 4 64k; #压缩缓冲区大小为4个64K缓冲区Nginx 会使用 4 个 64KB 大小的缓冲区来存储压缩后的数据。 gzip_http_version 1.1; #压缩版本默认为1.1 gzip_comp_level 6; #压缩比率(压缩等级为1-96是中等等级也是常用等级)Gzip 压缩级别的范围是 1 到 9 其中 1 表示压缩速度最快但压缩比最低9 表示压缩速度最慢但压缩比最高。默认值为 1。 gzip_vary on; #支持前端缓存服务器支持压缩页面 gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xmlrss image/jpg image/jpeg image/png image/gif application/x-httpd-php application/javascript application/json; #压缩的类型哪些文档启用压缩功能 重启服务使配置生效 刷新一下浏览器看gzip压缩功能是否打开 实验四图片缓存 拖一个图片到html中 可以在网页看到拖入的图片f12查看一下Cache-Controlmax-age0 表示图片没有缓存下次查看图片还需要把图片再下载一次下面设一个缓存 在location块下面直接添加 ~*正则匹配 \.就是点 (gif|jpg|jepg|bmp|ico)里面不能用png格式的会陷入死循环 获取图片的根目录为 root html expires 1d; #设置缓存时间为一天; 重启一下让配置生效 在浏览器里刷新一下并查看缓存时间已经改为1天 连接超时
连接超时在配置文件中的位置 http1.1会有一个keepalive模式主要作用是告诉web服务器他在处理完一个请求之后保持当前连接的tcp状态为打开状态也就是在请求完之后不会立刻关闭而是保持一个打开的状态。
如果当前连接有新的请求服务端就会利用这个没有关闭的连接继续给客户端响应不需要再建立一个新的连接。大大节约了资源。 keepalive在一段时间之内保持打开状态在这段时间内还是会占用资源占用过多会影响性能 图中的keepalive_timeout 65 意思是tcp连接最多可以保持65秒
设置为0就是禁用了keepalive功能。只要请求完成立刻关闭tcp连接 实验五nginx的并发设置
nginx的并发设置在高并发场景中需要启动更多的nginx进程以保证响应速度可以更快的处理用户的请求避免堵塞。
1、cpu的核心数来进行设置 cat /proc/cpuinfo |grep processor|wc -l 查看cpu核心数 2、设置worker进程绑定到指定的cpu的命令减少cpu切换带来的开销。
确保worker进程在一个独立的cpu核心上运行在工作中也用得到 修改配置文件 把1改成4 重启服务 查看一下进程worker进程变为4个 每个work进程可以处理1024个文件数总共可以处理的文件数为4*10244096个 但是还需要使用ulimit -n解除限制 面试会问 设置worker进程绑定到指定的cpu的命令减少cpu切换带来的开销。 确保worker进程在一个独立的cpu核心上运行在工作中也用得到 01表示cpu1 10表示cpu2 100表示cpu3 这个是按二进制转10进制算的
在生产中worker一般设置为4访问量不大时1也足够了如果要扩展最多8或16个
8个以上的worker进程就不会再提高性能了反而会使性能降低8个足够了
worker_cpu_affinity 单个worker进程可以不绑定cpu TIME_WAIT不是一个报错信息是tcp连接状态中的一种状态出现在tcp连接的四次挥手中
处于FIN1和ack1之间
当连接的乙方发送FIN报文而且收到了对方的ack报文之后就会进入TIME_WAIT tcp处理等待的状态是有一个持续时间65秒确保网络中的所有数据包都被完全处理完毕。
TIME_OUT有两个作用1、确保可靠的关闭连接如果立刻关闭连接旧的数据包也会被处理从而会干扰新的连接
2、避免连接复用TIME_WAIT的时间太短可能会导致旧的连接仍然在网络中误认为是新的连接导致连接复用数据传输紊乱。 而且在连接的生命周期中TIME_WAIT占有的资源是非常小的而且对服务器整体性能的影响也很有限。大量的短链接频繁的创建的销毁或者大并发连接时负载均衡TIME_WAIT连接会积累服务器会出现大量的TIME_WAIT状态的连接在这种情况下需要优化处理。
内核设置进行优化
查看系统的所有tcp连接的状态必背面试题 netstat -n | awk /^tcp/ {S[$NF]} END {for(a in S) print a, S[a]} tcp的连接状态 CLOSED关闭表示该连接处于未活动状态或者连接已经关闭。 LISTEN监听表示服务器正在等待来自客户端的连接请求处于监听状态。 SYN_RECVSYN 接收表示服务器已经接收到来自客户端的 SYN 请求连接请求正在等待确认。 SYN_SENTSYN 发送表示应用程序已经向服务器发送了 SYN 请求正在等待服务器确认。 ESTABLISHED已建立表示连接已经建立正常的数据传输阶段。 FIN_WAIT1终止等待1表示应用程序已经发送了连接关闭请求FIN正在等待另一端的确认。 FIN_WAIT2终止等待2表示另一端已经确认连接关闭请求正在等待另一端发送连接关闭请求。 CLOSE_WAIT关闭等待表示另一端已经关闭连接但本地应用程序还未关闭连接。 CLOSING正在关闭表示双方同时尝试关闭连接。 TIME_WAIT时间等待表示连接已经关闭但仍在等待一段时间以确保网络中所有的数据包都已经被正确处理。 LAST_ACK最后确认表示应用程序已经发送了最后的确认等待另一端的确认后进入 CLOSED 状态。 如何清理time_wait 修改内核文件 内核文件位置 net.ipv4.tcp_syncookies 1 #表示开启SYN Cookies。当出现SYN等待队列溢出时启用cookies来处理请求。 net.ipv4.tcp_tw_reuse1 #让TIME_WAIT状态可以重用这样即使TIME_WAIT占满了所有端口也不会拒绝新的请求造成障碍 默认是0。 net.ipv4.tcp_tw_recycle1 #让TIME_WAIT尽快回收 默认0。 net.ipv4.tcp_fin_timeout65 #表示如果端口由本端要求关闭这个参数决定了它保持在FIN-WAIT-2状态的时间。 实验六配置防盗链
valid_referers 设置信任的网站可以正常使用图片 none允许没有http_refer的请求访问资源根据Referer的定义它的作用是指示一个请求是从哪里链接过来的如果直接在浏览器的地址栏中输入一个资源的URL地址那么这种请求是不会包含 Referer 字段的如 http://www.kgc.com/game.jpg 我们使用 http://www.kgc.com 访问显示的图片可以理解成 http://www.kgc.com/game.jpg 这个请求是从 http://www.kgc.com 这个链接过来的。 blocked允许不是http://开头的不带协议的请求访问资源 *.kgc.com只允许来自指定域名的请求访问资源如 http://www.kgc.com
$invalid_referer只要不是valid_referers设置现任的网站都为true vim /usr/local/nginx/conf/nginx.conf http { ...... server { ...... location ~* \.(jpg|gif|swf)$ { valid_referers none blocked *.kgc.com kgc.com; if ( $invalid_referer ) { rewrite ^/ http://www.kgc.com/error.png; #return 403; } } ...... } } 网页准备: Web源主机192.168.146.20配置 cd /usr/local/nginx/html 将game.jpg、error.png文件传到/usr/local/nginx/html目录下 vim index.html ...... img srcgame.jpg/ /body /html echo 192.168.146.20 www.kgc.com /etc/hosts echo 192.168.146.30 www.benet.com /etc/hosts 盗链网站主机192.168.146.30 cd /usr/local/nginx/html vim index.html ...... img srchttp://www.kgc.com/game.jpg/ /body /html echo 192.168.146.20 www.kgc.com /etc/hosts echo 192.168.146.30 www.benet.com /etc/hosts 在盗图网站主机上进行浏览器验证 http://www.benet.com