综合架构之服务优化(后篇)

主要内容

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

    • 请求起始行
    • 请求头
    • 请求主体


      综合架构之服务优化(后篇)_第1张图片
      image
  • http响应报文

    • 响应起始行
    • 响应头
    • 空行
    • 响应报文的主体


      image

      综合架构之服务优化(后篇)_第2张图片
      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) /   [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
综合架构之服务优化(后篇)_第3张图片
image

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 类型,不用指定,指定会报错。
浏览器设置

综合架构之服务优化(后篇)_第4张图片
谷歌浏览器设置

火狐浏览器设置

7. 配置 Nginx expires 实现让客户 端缓存数据

~ #匹配正则 区分大小写 perl 语言正则表达式
~* #匹配正则 不区分大小写 perl 语言正则表达式

location ~* \.(gif|jpg|jpeg|png|bmp|ico)$ { 
                          root /var/www/img/; 
           expires 30d;       
 }

浏览器保存图片的时间为30天
响应码为304 访问的是缓存的信息


综合架构之服务优化(后篇)_第5张图片
image

8.Nginx 图片及目录防盗链解决方案

    1. 水印
    1. $http_referer(用户从哪里跳转过来的 . 记录着用户从哪里跳转到网站 用户从哪里找到你网站)
      只要是跳转的(从别的网站过来的,例如从百度进入京东。)给你禁止。
      不能使用location,因为匹配的是请求 uri的信息。

if ( $http_referer !~ "www.oldboyedu.com") {
return 403; }

    1. 用户每次访问的时候给用户设置 1 个 cookie
  • cookie 和session的区别
综合架构之服务优化(后篇)_第6张图片
image

钥匙的作用是存储用户的信息,session也是存放用户的信息,两者需要通过钥匙建立连接。

9.Nginx防爬虫优化

  • 爬虫的作用
    • 搜索引擎 : 把网址页面收入进来 方便大家搜索的时候能找到
    • 公司爬取用户数据(创建账户,用户刷粉)
  • 防止爬虫:
      1. 君子协议 robot 协议 在网站站点目录下面放一个 robots.txt 文件。(写什么要遵循什么,也可以不遵守去爬)
      1. 强制措施(只要是爬虫就禁止访问)
        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/

你可能感兴趣的:(综合架构之服务优化(后篇))