主要内容:
1.nginx优化
2.php优化
3.安全优化
nginx服务优化
1.nginx配置文件移动,该如何启动nginx
mv /app/nginx/conf/nginx.conf /opt #配置文件移动
nginx -c /opt/nginx.conf #将服务进行启动,但会提示缺少资源类型文件。
mv /app/nginx/conf/mime.types /opt
nginx -c /opt/nginx.conf #重新启动
2.优化nginx打开文件数
原因:当用户访问nginx时,会打开许多临时文件。如果超过这个数量服务会出现报错。
实现:将打开数变为65535
注:系统的系统文件打开数为1024 ulimit -n
3.优化nginx超时信息
- 原因:
- http协议的特点:连接断开时,会停留一段时间,方便下次连接,提升连接速度。会影响后续连接。
- 实现:keepalived_timeout设置超时时间,到达时间将会断开。
4.优化 nginx 服务上传文件限制
client_max_body_size 设置客户端请求报文主体最大尺寸
为什么是body? 首先回顾下http协议
-
http请求报文 request
- 请求起始行
- 请求头
-
请求主体
image
-
http响应报文
- 响应起始行
- 响应头
- 空行
-
响应报文的主体
image
image
由http协议可知,当用户上传内容时,发送的是http报文中的请求主体,所以为body.
- 补充:
如何获取http的请求报文和响应报文?
curl -v www.baidu.com
wget --debug www.baidu.com
curl -Lv www.360buy.com有跳转的时候继续访问跳转的网站。
[root@zabbix ~]# curl -v www.baidu.com
* About to connect() to www.baidu.com port 80 (#0)
* Trying 182.61.200.6...
* Connected to www.baidu.com (182.61.200.6) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: www.baidu.com
> Accept: */*
>
< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
< Connection: Keep-Alive
< Content-Length: 2381
< Content-Type: text/html
< Date: Wed, 28 Aug 2019 11:21:35 GMT
< Etag: "588604c8-94d"
< Last-Modified: Mon, 23 Jan 2017 13:27:36 GMT
< Pragma: no-cache
< Server: bfe/1.0.8.18
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
[root@zabbix ~]# wget --debug www.baidu.com
DEBUG output created by Wget 1.14 on linux-gnu.
URI encoding = ‘UTF-8’
Converted file name 'index.html' (UTF-8) -> 'index.html' (UTF-8)
Converted file name 'index.html' (UTF-8) -> 'index.html' (UTF-8)
--2019-08-28 19:23:05-- http://www.baidu.com/
Resolving www.baidu.com (www.baidu.com)... 182.61.200.7, 182.61.200.6
Caching www.baidu.com => 182.61.200.7 182.61.200.6 #DNS解析
Connecting to www.baidu.com (www.baidu.com)|182.61.200.7|:80... connected. #TCP的三次握手
Created socket 3.
Releasing 0x00000000009109a0 (new refcount 1).
---request begin---
GET / HTTP/1.1
User-Agent: Wget/1.14 (linux-gnu)
Accept: */*
Host: www.baidu.com
Connection: Keep-Alive
---request end---
HTTP request sent, awaiting response...
---response begin---
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: Keep-Alive
Content-Length: 2381
Content-Type: text/html
Date: Wed, 28 Aug 2019 11:23:12 GMT
Etag: "588604c8-94d"
Last-Modified: Mon, 23 Jan 2017 13:27:36 GMT
Pragma: no-cache
Server: bfe/1.0.8.18
Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
---response end---
200 OK
cdm: 1 2 3 4 5 6 7 8
Stored cookie baidu.com -1 (ANY) / <permanent> <insecure> [expiry 2019-08-29 19:23:05] BDORZ 27315
Registered socket 3 for persistent reuse.
Length: 2381 (2.3K) [text/html]
Saving to: ‘index.html’
100%[==============================================================================================>] 2,381 --.-K/s in 0s
2019-08-28 19:23:05 (185 MB/s) - ‘index.html’ saved [2381/2381]
5.优化nginx服务与FastCGI连接缓存和缓冲的信息
查看实际的内存的大小是看available剩余的大小。或者free+buffer cache
linux系统中将使用过的文件,存放在buffer和cache中,加速下次使用。
[root@zabbix ~]# free -h
total used free shared buff/cache available
Mem: 972M 92M 760M 7.6M 118M 735M
![](https://img.haomeiwen.com/i4517527/c7914b046f62cb8b.png)
6.配置 Nginx gzip 压缩实现性能优 化
补充:gzip命令的使用
gzip + 文件名 压缩
gzip -d + 压缩文件名称 解压
- 压缩文本文件,从而节省带宽资源。
- 实现:
gzip on;
gzip_min_length 1k; #设置大于 1K 才进行压缩
gzip_buffers 4 16k; #设置压缩缓存
#gzip_http_version 1.0;
gzip_comp_level 2; #压缩级别 数字越大 压缩率(占用空间)越小 占用 CPU 越多
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php ; #哪些类型的文件 需要进行压缩 这些类型需用 mime type 媒体类型. #mime types #媒体类型(http) === 文件类型(linux)
注意:不要加上html,会出现报错。
故障案例: NSES WITH THE “TEXT/HTML” TYPE ARE ALWAYS COMPRESSED. GZIP 默认压缩 TEXT/HTML 类型,不用指定,指定会报错。
浏览器设置
![](https://img.haomeiwen.com/i4517527/b7e012a778d319b3.png)
![](https://img.haomeiwen.com/i4517527/6c566370c2fe3bc3.png)
7. 配置 Nginx expires 实现让客户 端缓存数据
~ #匹配正则 区分大小写 perl 语言正则表达式
~* #匹配正则 不区分大小写 perl 语言正则表达式
location ~* \.(gif|jpg|jpeg|png|bmp|ico)$ {
root /var/www/img/;
expires 30d;
}
浏览器保存图片的时间为30天
响应码为304 访问的是缓存的信息
image
8.Nginx 图片及目录防盗链解决方案
- 水印
- $http_referer(用户从哪里跳转过来的 . 记录着用户从哪里跳转到网站 用户从哪里找到你网站)
只要是跳转的(从别的网站过来的,例如从百度进入京东。)给你禁止。
不能使用location,因为匹配的是请求 uri的信息。
- $http_referer(用户从哪里跳转过来的 . 记录着用户从哪里跳转到网站 用户从哪里找到你网站)
if ( $http_referer !~ "www.oldboyedu.com") {
return 403; }
- 用户每次访问的时候给用户设置 1 个 cookie
- cookie 和session的区别
![](https://img.haomeiwen.com/i4517527/a7eb359228d7c196.png)
钥匙的作用是存储用户的信息,session也是存放用户的信息,两者需要通过钥匙建立连接。
9.Nginx防爬虫优化
- 爬虫的作用
- 搜索引擎 : 把网址页面收入进来 方便大家搜索的时候能找到
- 公司爬取用户数据(创建账户,用户刷粉)
- 防止爬虫:
- 君子协议 robot 协议 在网站站点目录下面放一个 robots.txt 文件。(写什么要遵循什么,也可以不遵守去爬)
- 强制措施(只要是爬虫就禁止访问)
if ( $http_user_agent ~* "spider|bot" ) {
return 403;
}
- 强制措施(只要是爬虫就禁止访问)
这样会将所有的爬虫都禁止了,也可以针对于agent详细的写。
10.Nginx 网站 CDN 加速优化
- DNS相关内容
DNS 域名解析为 ip - 不同的解析方法: 记录类型
- A 记录 域名--->ip
- CNAME 别名记录 域名---->域名 (别名 alias)
- MX 记录 邮件
CDN加速器
原理:
1.用户请求www.baidu.com
2.通过DNS的CNAME将www.baidu.com变为www.shifen.com
3.将www.shifen.com的域名解析为IP
4.通过cdn公司的智能调度系统让用户访问和自己相近的运营商
的cdn服务器
5.cdn服务器如果有用户请求的内容则直接返回,没有则从源站服务器请求。
cdn的主要厂商:蓝汛 网宿 阿里云 CDN 百度云 CDN 七牛
PHP优化
tmpfs是一个基于内存文件系统 (放一些缓存,速度较快 )
mount -t tmpfs -o size=16m tmpfs /cache #创建基于 内存 的分区
[root@web01 ~]# dd if=/dev/zero of=/cache/600 bs=1M count=600 500+0 records in 500+0 records out 524288000 bytes (524 MB) copied, 0.189981 s, 2.8 GB/s
dd if(input file) of(output file) bs(block size ) count(次数)
- 安装缓存插件:
xcache、eaccelerator、APC(Alternative PHP Cache),ZendOpcache safe_mode = off safe_mode_gid = off
安装插件
需要指定源 https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
安装模块 pecl install redis
编辑php.ini extension=redis.so
- 关闭危险函数
disable_functions = system,passthru,exec,shell_exec,popen,phpinfo 3
38 行 设置为 safe_mode = On #开启安全模式
435 行 设置为 expose_php = Off #关闭版本信息
- 关闭不必要的错误提示 打开错误日志
538 行 设置为 display_errors = Off #错误信 息控制,测试的时候开启 #报错的级别在521行 默认为 error_reporting = E_ALL & ~E_DEPRECATED
559 行 设置为 log_errors = On #打开log 日志
643 行 设置为 error_log = /app/logs/php_errors.log #log日志得路径(需log_errors 为 On 才能生效)
703 行 设置为 register_globals = Off #关闭全局 变量(默认即为关闭,万万不能开启)
756 行 设置为 magic_quotes_gpc = On #防止SQL注入 asdfsadf&&&&"""""select * from mysql.user;
902 行 设置为 allow_url_fopen = Off #打开远程打开 (禁止)
854 行 设置为 cgi.fix_pathinfo=0 #防止Nginx 文件类型错误解析漏洞
php性能优化
444 max_execution_time = 30 #一个脚本可使用多少CPU秒 454 max_input_time = 60 #一个脚本等待输入数 据的时间有多长(秒)
465 memory_limit = 128M #单个脚本大使用内存, 单位为K或M(128M稍大可以适当调小)
891 upload_max_filesize = 2M #上传文件大许可 output_buffering #数据发送给客户机之 前,有多少数据(字节)需要缓存
894 max_file_uploads = 20 #可以通过单个请求上 载的大文件数
系统安全优化
网站安全基础配置
- 1 站点目录权限 /app/blog
- 控制权限
f644 d755 root root
上传 /app/blog/uploads
f644 d755 www www
- 造成的结果
负载高---->挖矿病毒
流量大--->肉鸡 攻击别人 - 上传之后无法运行
挂载参数 nodev nosuid noexec
- 只让网站上传指定类型的文件
如果扩展名不是.zip或.jpg 提示403
如果扩展名是.zip或.jpg 提示403
location #匹配请求里面的uri
location /
location = /
location ~ /
location ~* / #不区分大小写正则
location /uploads {
if ( $request_uri !~ \.(zip|jpg)$ ) {
return 403;
}
}
- 检查出网站文件被修改了
- find+定时任务
find /etc/ -type f -name "*.conf" |xargs md5sum >police.txt
find /站点目录 -type f -name "*.conf" |xargs md5sum >police.txt #用户上传的文件和缓存目录文件 排除
md5sum -c police.txt #定时任务
md5有时候可能会破解,字符串一样生成的校验码也一样
现在已经使用sha系列加密。
- 杀毒软件 clamav
clamav -ri /data
- rpm
rpm -aV 与软件安装的时候 (yum rpm 使用md5)
与软件刚刚安装的时候进行对比 - waf 防火墙 应用防火墙
https://blog.oldboyedu.com/nginx-waf/
网友评论