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

主要内容

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.

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

谷歌浏览器设置

火狐浏览器设置

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

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

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

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


image

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

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

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

    1. 用户每次访问的时候给用户设置 1 个 cookie
  • cookie 和session的区别
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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,039评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,426评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,417评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,868评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,892评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,692评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,416评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,326评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,782评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,957评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,102评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,790评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,442评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,996评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,113评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,332评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,044评论 2 355

推荐阅读更多精彩内容

  • 1 基本安全优化 1.1 隐藏版本信息 一般来说,软件的漏洞都和版本相关,所以我们要隐藏或消除web服务对访问用户...
    秋风LP阅读 416评论 0 1
  • Nginx简介 解决基于进程模型产生的C10K问题,请求时即使无状态连接如web服务都无法达到并发响应量级一万的现...
    魏镇坪阅读 2,005评论 0 9
  • 1.简介:  Nginx:engine X ,2002年,开源,商业版 http协议:web服务器(类似于ht...
    尛尛大尹阅读 1,868评论 0 3
  • I/O模型: 阻塞型、非阻塞型、复用型、信号驱动型、异步 同步/异步:关注消息通知机制 消息通知:同步:等待对方返...
    Net夜风阅读 2,010评论 0 1
  • nginx Nginx是一款开源代码的高性能HTTP服务器和反向代理服务器,同时支持IMAP/POP3/SMTP代...
    码哥说阅读 730评论 1 8