綜合架構(gòu)之服務(wù)優(yōu)化(后篇)

主要內(nèi)容

1.nginx優(yōu)化
2.php優(yōu)化
3.安全優(yōu)化


nginx服務(wù)優(yōu)化

1.nginx配置文件移動,該如何啟動nginx

mv /app/nginx/conf/nginx.conf  /opt #配置文件移動
nginx -c /opt/nginx.conf #將服務(wù)進(jìn)行啟動按脚,但會提示缺少資源類型文件佳镜。
mv /app/nginx/conf/mime.types /opt
nginx -c /opt/nginx.conf #重新啟動

2.優(yōu)化nginx打開文件數(shù)

原因:當(dāng)用戶訪問nginx時,會打開許多臨時文件明也。如果超過這個數(shù)量服務(wù)會出現(xiàn)報錯。
實(shí)現(xiàn):將打開數(shù)變?yōu)?5535

注:系統(tǒng)的系統(tǒng)文件打開數(shù)為1024 ulimit -n

3.優(yōu)化nginx超時信息

  • 原因:
    • http協(xié)議的特點(diǎn):連接斷開時畜份,會停留一段時間办素,方便下次連接角雷,提升連接速度。會影響后續(xù)連接性穿。
  • 實(shí)現(xiàn):keepalived_timeout設(shè)置超時時間勺三,到達(dá)時間將會斷開。

4.優(yōu)化 nginx 服務(wù)上傳文件限制

client_max_body_size 設(shè)置客戶端請求報文主體最大尺寸

為什么是body? 首先回顧下http協(xié)議

  • http請求報文 request

    • 請求起始行
    • 請求頭
    • 請求主體


      image
  • http響應(yīng)報文

    • 響應(yīng)起始行
    • 響應(yīng)頭
    • 空行
    • 響應(yīng)報文的主體


      image

      image

由http協(xié)議可知需曾,當(dāng)用戶上傳內(nèi)容時吗坚,發(fā)送的是http報文中的請求主體,所以為body.

  • 補(bǔ)充:
    如何獲取http的請求報文和響應(yīng)報文呆万?
    curl -v www.baidu.com
    wget --debug www.baidu.com
    curl -Lv www.360buy.com有跳轉(zhuǎn)的時候繼續(xù)訪問跳轉(zhuǎn)的網(wǎng)站商源。
[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.優(yōu)化nginx服務(wù)與FastCGI連接緩存和緩沖的信息

查看實(shí)際的內(nèi)存的大小是看available剩余的大小∧奔酰或者free+buffer cache
linux系統(tǒng)中將使用過的文件牡彻,存放在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 壓縮實(shí)現(xiàn)性能優(yōu) 化

補(bǔ)充:gzip命令的使用
gzip + 文件名 壓縮
gzip -d + 壓縮文件名稱 解壓

  • 壓縮文本文件庄吼,從而節(jié)省帶寬資源。
  • 實(shí)現(xiàn):
gzip on;    
 gzip_min_length 1k;   #設(shè)置大于 1K 才進(jìn)行壓縮     
gzip_buffers 4 16k;    #設(shè)置壓縮緩存     
#gzip_http_version 1.0;    
 gzip_comp_level 2;    #壓縮級別 數(shù)字越大 壓縮率(占用空間)越小 占用 CPU 越多      
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php  ;   #哪些類型的文件 需要進(jìn)行壓縮   這些類型需用 mime type 媒體類型. #mime types              #媒體類型(http)  === 文件類型(linux) 

注意:不要加上html严就,會出現(xiàn)報錯总寻。

故障案例: NSES WITH THE “TEXT/HTML” TYPE ARE ALWAYS COMPRESSED. GZIP 默認(rèn)壓縮 TEXT/HTML 類型,不用指定梢为,指定會報錯渐行。
瀏覽器設(shè)置

谷歌瀏覽器設(shè)置

火狐瀏覽器設(shè)置

7. 配置 Nginx expires 實(shí)現(xiàn)讓客戶 端緩存數(shù)據(jù)

~ #匹配正則 區(qū)分大小寫 perl 語言正則表達(dá)式
~* #匹配正則 不區(qū)分大小寫 perl 語言正則表達(dá)式

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

瀏覽器保存圖片的時間為30天
響應(yīng)碼為304 訪問的是緩存的信息


image

8.Nginx 圖片及目錄防盜鏈解決方案

    1. 水印
    1. $http_referer(用戶從哪里跳轉(zhuǎn)過來的 . 記錄著用戶從哪里跳轉(zhuǎn)到網(wǎng)站 用戶從哪里找到你網(wǎng)站)
      只要是跳轉(zhuǎn)的(從別的網(wǎng)站過來的,例如從百度進(jìn)入京東铸董。)給你禁止祟印。
      不能使用location,因?yàn)槠ヅ涞氖钦埱?uri的信息袒炉。

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

    1. 用戶每次訪問的時候給用戶設(shè)置 1 個 cookie
  • cookie 和session的區(qū)別
image

鑰匙的作用是存儲用戶的信息旁理,session也是存放用戶的信息,兩者需要通過鑰匙建立連接我磁。

9.Nginx防爬蟲優(yōu)化

  • 爬蟲的作用
    • 搜索引擎 : 把網(wǎng)址頁面收入進(jìn)來 方便大家搜索的時候能找到
    • 公司爬取用戶數(shù)據(jù)(創(chuàng)建賬戶孽文,用戶刷粉)
  • 防止爬蟲:
      1. 君子協(xié)議 robot 協(xié)議 在網(wǎng)站站點(diǎn)目錄下面放一個 robots.txt 文件。(寫什么要遵循什么夺艰,也可以不遵守去爬)
      1. 強(qiáng)制措施(只要是爬蟲就禁止訪問)
        if ( $http_user_agent ~* "spider|bot" ) {
        return 403;
        }

這樣會將所有的爬蟲都禁止了芋哭,也可以針對于agent詳細(xì)的寫。

10.Nginx 網(wǎng)站 CDN 加速優(yōu)化

  • DNS相關(guān)內(nèi)容
    DNS 域名解析為 ip
  • 不同的解析方法: 記錄類型
  • A 記錄 域名--->ip
  • CNAME 別名記錄 域名---->域名 (別名 alias)
  • MX 記錄 郵件
    CDN加速器

    原理:
    1.用戶請求www.baidu.com
    2.通過DNS的CNAME將www.baidu.com變?yōu)?a target="_blank">www.shifen.com
    3.將www.shifen.com的域名解析為IP
    4.通過cdn公司的智能調(diào)度系統(tǒng)讓用戶訪問和自己相近的運(yùn)營商
    的cdn服務(wù)器
    5.cdn服務(wù)器如果有用戶請求的內(nèi)容則直接返回郁副,沒有則從源站服務(wù)器請求减牺。

cdn的主要廠商:藍(lán)汛 網(wǎng)宿 阿里云 CDN 百度云 CDN 七牛


PHP優(yōu)化

tmpfs是一個基于內(nèi)存文件系統(tǒng) (放一些緩存,速度較快 )

mount -t tmpfs -o size=16m tmpfs /cache   #創(chuàng)建基于 內(nèi)存 的分區(qū)
[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(次數(shù))

  • 安裝緩存插件:
    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

- 關(guān)閉危險函數(shù)       
 disable_functions = system,passthru,exec,shell_exec,popen,phpinfo       3
38 行 設(shè)置為 safe_mode = On   #開啟安全模式    
435 行 設(shè)置為 expose_php = Off #關(guān)閉版本信息 
- 關(guān)閉不必要的錯誤提示 打開錯誤日志   
538 行 設(shè)置為 display_errors = Off           #錯誤信 息控制,測試的時候開啟     #報錯的級別在521行 默認(rèn)為 error_reporting = E_ALL & ~E_DEPRECATED
559 行 設(shè)置為 log_errors = On #打開log 日志   
643 行 設(shè)置為 error_log = /app/logs/php_errors.log   #log日志得路徑(需log_errors 為 On 才能生效)
703 行 設(shè)置為 register_globals = Off        #關(guān)閉全局 變量(默認(rèn)即為關(guān)閉稚失,萬萬不能開啟)    
756 行 設(shè)置為 magic_quotes_gpc = On   #防止SQL注入 asdfsadf&&&&"""""select  * from  mysql.user;
902 行 設(shè)置為 allow_url_fopen = Off   #打開遠(yuǎn)程打開 (禁止)    
854 行 設(shè)置為 cgi.fix_pathinfo=0         #防止Nginx 文件類型錯誤解析漏洞 
php性能優(yōu)化    
444 max_execution_time = 30  #一個腳本可使用多少CPU秒    454 max_input_time = 60          #一個腳本等待輸入數(shù) 據(jù)的時間有多長(秒)    
465 memory_limit = 128M        #單個腳本大使用內(nèi)存栋艳, 單位為K或M(128M稍大可以適當(dāng)調(diào)小)    
891 upload_max_filesize = 2M  #上傳文件大許可        output_buffering            #數(shù)據(jù)發(fā)送給客戶機(jī)之 前句各,有多少數(shù)據(jù)(字節(jié))需要緩存    
894 max_file_uploads = 20         #可以通過單個請求上 載的大文件數(shù)

系統(tǒng)安全優(yōu)化

網(wǎng)站安全基礎(chǔ)配置

  • 1 站點(diǎn)目錄權(quán)限 /app/blog
    • 控制權(quán)限
f644 d755  root root 
上傳         /app/blog/uploads 
f644 d755  www  www
  • 造成的結(jié)果
    負(fù)載高---->挖礦病毒
    流量大--->肉雞 攻擊別人
  • 上傳之后無法運(yùn)行
掛載參數(shù) nodev nosuid noexec   
  • 只讓網(wǎng)站上傳指定類型的文件
如果擴(kuò)展名不是.zip或.jpg 提示403
如果擴(kuò)展名是.zip或.jpg 提示403
location       #匹配請求里面的uri 
location / 
location = / 
location ~ /   
location ~* /  #不區(qū)分大小寫正則 
location  /uploads  {
    if ( $request_uri !~ \.(zip|jpg)$  ) {
     return 403;    
    }
}   
  • 檢查出網(wǎng)站文件被修改了
    • find+定時任務(wù)
find /etc/  -type f -name "*.conf"  |xargs md5sum  >police.txt 
find /站點(diǎn)目錄  -type f -name "*.conf"  |xargs md5sum  >police.txt #用戶上傳的文件和緩存目錄文件 排除
md5sum -c police.txt  #定時任務(wù)

md5有時候可能會破解吸占,字符串一樣生成的校驗(yàn)碼也一樣
現(xiàn)在已經(jīng)使用sha系列加密。

  • 殺毒軟件 clamav
   clamav -ri   /data
  • rpm
    rpm -aV 與軟件安裝的時候 (yum rpm 使用md5)
    與軟件剛剛安裝的時候進(jìn)行對比
  • waf 防火墻 應(yīng)用防火墻
    https://blog.oldboyedu.com/nginx-waf/
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凿宾,一起剝皮案震驚了整個濱河市矾屯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌初厚,老刑警劉巖件蚕,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異惧所,居然都是意外死亡骤坐,警方通過查閱死者的電腦和手機(jī)绪杏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門下愈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蕾久,你說我怎么就攤上這事势似。” “怎么了僧著?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵履因,是天一觀的道長。 經(jīng)常有香客問我盹愚,道長栅迄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任皆怕,我火速辦了婚禮毅舆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘愈腾。我一直安慰自己憋活,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布虱黄。 她就那樣靜靜地躺著悦即,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辜梳,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天粱甫,我揣著相機(jī)與錄音,去河邊找鬼作瞄。 笑死魔种,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的粉洼。 我是一名探鬼主播节预,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼属韧!你這毒婦竟也來了安拟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤宵喂,失蹤者是張志新(化名)和其女友劉穎糠赦,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锅棕,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拙泽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了裸燎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片顾瞻。...
    茶點(diǎn)故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖德绿,靈堂內(nèi)的尸體忽然破棺而出荷荤,到底是詐尸還是另有隱情,我是刑警寧澤移稳,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布蕴纳,位于F島的核電站,受9級特大地震影響个粱,放射性物質(zhì)發(fā)生泄漏古毛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一都许、第九天 我趴在偏房一處隱蔽的房頂上張望稻薇。 院中可真熱鬧,春花似錦梭稚、人聲如沸颖低。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽忱屑。三九已至蹬敲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間莺戒,已是汗流浹背伴嗡。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留从铲,地道東北人瘪校。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像名段,于是被迫代替她去往敵國和親阱扬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1 基本安全優(yōu)化 1.1 隱藏版本信息 一般來說伸辟,軟件的漏洞都和版本相關(guān)麻惶,所以我們要隱藏或消除web服務(wù)對訪問用戶...
    秋風(fēng)LP閱讀 412評論 0 1
  • Nginx簡介 解決基于進(jìn)程模型產(chǎn)生的C10K問題,請求時即使無狀態(tài)連接如web服務(wù)都無法達(dá)到并發(fā)響應(yīng)量級一萬的現(xiàn)...
    魏鎮(zhèn)坪閱讀 2,003評論 0 9
  • 1.簡介: ? Nginx:engine X ,2002年信夫,開源窃蹋,商業(yè)版? http協(xié)議:web服務(wù)器(類似于ht...
    尛尛大尹閱讀 1,867評論 0 3
  • I/O模型: 阻塞型、非阻塞型静稻、復(fù)用型警没、信號驅(qū)動型、異步 同步/異步:關(guān)注消息通知機(jī)制 消息通知:同步:等待對方返...
    Net夜風(fēng)閱讀 2,007評論 0 1
  • nginx Nginx是一款開源代碼的高性能HTTP服務(wù)器和反向代理服務(wù)器振湾,同時支持IMAP/POP3/SMTP代...
    碼哥說閱讀 730評論 1 8