主要內(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
- 請求起始行
- 請求頭
-
請求主體
-
http響應(yīng)報文
- 響應(yīng)起始行
- 響應(yīng)頭
- 空行
-
響應(yīng)報文的主體
由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
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è)置
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 訪問的是緩存的信息
8.Nginx 圖片及目錄防盜鏈解決方案
- 水印
- $http_referer(用戶從哪里跳轉(zhuǎn)過來的 . 記錄著用戶從哪里跳轉(zhuǎn)到網(wǎng)站 用戶從哪里找到你網(wǎng)站)
只要是跳轉(zhuǎn)的(從別的網(wǎng)站過來的,例如從百度進(jìn)入京東铸董。)給你禁止祟印。
不能使用location,因?yàn)槠ヅ涞氖钦埱?uri的信息袒炉。
- $http_referer(用戶從哪里跳轉(zhuǎn)過來的 . 記錄著用戶從哪里跳轉(zhuǎn)到網(wǎng)站 用戶從哪里找到你網(wǎng)站)
if ( $http_referer !~ "www.oldboyedu.com") {
return 403; }
- 用戶每次訪問的時候給用戶設(shè)置 1 個 cookie
- cookie 和session的區(qū)別
鑰匙的作用是存儲用戶的信息旁理,session也是存放用戶的信息,兩者需要通過鑰匙建立連接我磁。
9.Nginx防爬蟲優(yōu)化
- 爬蟲的作用
- 搜索引擎 : 把網(wǎng)址頁面收入進(jìn)來 方便大家搜索的時候能找到
- 公司爬取用戶數(shù)據(jù)(創(chuàng)建賬戶孽文,用戶刷粉)
- 防止爬蟲:
- 君子協(xié)議 robot 協(xié)議 在網(wǎng)站站點(diǎn)目錄下面放一個 robots.txt 文件。(寫什么要遵循什么夺艰,也可以不遵守去爬)
- 強(qiáng)制措施(只要是爬蟲就禁止訪問)
if ( $http_user_agent ~* "spider|bot" ) {
return 403;
}
- 強(qiáng)制措施(只要是爬蟲就禁止訪問)
這樣會將所有的爬蟲都禁止了芋哭,也可以針對于agent詳細(xì)的寫。
10.Nginx 網(wǎng)站 CDN 加速優(yōu)化
- DNS相關(guān)內(nèi)容
DNS 域名解析為 ip - 不同的解析方法: 記錄類型
- A 記錄 域名--->ip
- CNAME 別名記錄 域名---->域名 (別名 alias)
- MX 記錄 郵件
原理:
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/