摘要:架構(gòu)篇一常見(jiàn)問(wèn)題相同多個(gè)虛擬主機(jī)優(yōu)先級(jí)訪問(wèn)三個(gè)配置文件配置上述相同的三個(gè)虛擬主機(jī),會(huì)先訪問(wèn),訪問(wèn)的優(yōu)先級(jí)是按照服務(wù)器的讀取順序,即文件名的排序。
Nginx-架構(gòu)篇 一、Nginx常見(jiàn)問(wèn)題 1. 相同server_name多個(gè)虛擬主機(jī)優(yōu)先級(jí)訪問(wèn)
# 三個(gè)配置文件: # testserver1: server_name testserver1 www.rona1do.top; root /opt/app/code1; # testserver2: server_name testserver2 www.rona1do.top; root /opt/app/code2; # testserver3: server_name testserver3 www.rona1do.top; root /opt/app/code3;
配置上述相同server_name的三個(gè)虛擬主機(jī),會(huì)先訪問(wèn)testserver1,訪問(wèn)的優(yōu)先級(jí)是按照服務(wù)器的讀取順序,即文件名的排序。2. location匹配優(yōu)先級(jí)
=:進(jìn)行普通字符精確匹配,也就是完全匹配
^~:表示普通字符匹配,使用前綴匹配
~ ~ :表示執(zhí)行一個(gè)正則匹配(加不區(qū)分大小寫(xiě))
上述優(yōu)先級(jí)自上而下優(yōu)先級(jí)降低,前兩個(gè)匹配是精確匹配,匹配到以后就不再往下找,正則匹配匹配到相應(yīng)的字符串也會(huì)繼續(xù)往下尋找是否有更精確的匹配。3. Nginx的try_files的使用
按順序檢查文件是否存在
# 先檢查對(duì)應(yīng)的url地址下的文件存不存在,如果不存在找/index.php,類(lèi)似于重定向 location / { try_file $uri /index.php; }4. Nginx的alias和root區(qū)別
root
location /request_path/image/ { root /local_path/image/; } # 請(qǐng)求:http://www.rona1do.top/request_path/image/cat.png # 查詢(xún): /local_path/image/request_path_image/cat.png
alias
location /request_path/image/ { alias /local_path/image/; } # 請(qǐng)求:http://www.rona1do.top/request_path/image/cat.png # 查詢(xún): /local_path/image/cat.png5. 用什么樣的方法傳遞用戶的真實(shí)IP地址
在有代理的情況下,remote_addr獲取的是代理的ip,不是用戶的ip
x-forwarded-for容易被篡改
通用解決辦法: 可以跟第一級(jí)代理協(xié)商,設(shè)置頭信息x_real_ip記錄用戶的ip6. Nginx中常見(jiàn)錯(cuò)誤碼
set x_real_ip=$remote_addr
413:request entity too large
用戶上傳文件限制:client_max_body_size
502:bad gateway
后端服務(wù)無(wú)響應(yīng)
504:gateway time-out
后端服務(wù)超時(shí)
二、Nginx性能優(yōu)化 1. 性能優(yōu)化考慮點(diǎn)
當(dāng)前系統(tǒng)結(jié)構(gòu)瓶頸
觀察指標(biāo)(top查看狀態(tài)、日志等)、壓力測(cè)試
了解業(yè)務(wù)模式
接口業(yè)務(wù)類(lèi)型,系統(tǒng)層次化結(jié)構(gòu)
性能與安全
配置防火墻太過(guò)于注重安全,會(huì)降低性能
2. ab接口壓力測(cè)試工具
安裝
yum install httpd-tools
使用
ab -n 2000 -c 2 http://127.0.0.1/
-n:總的請(qǐng)求數(shù)
-c:并發(fā)數(shù)
-k:是否開(kāi)啟長(zhǎng)連接
3. 系統(tǒng)與Nginx性能優(yōu)化
文件句柄
LinuxUnix一起皆文件,文件句柄就是一個(gè)索引
設(shè)置方式
- 系統(tǒng)全局性修改、用戶局部性修改、進(jìn)程局部性修改
系統(tǒng)全局性修改 和 用戶局部性修改:
配置文件:/etc/security/limits.conf
# root:root用戶 root soft nofile 65535 # hard 強(qiáng)制限制、soft 超過(guò)會(huì)發(fā)送提醒(郵件等),不限制 root hard nofile 65535 # *:所有用戶 * soft nofile 65535 * hard nofile 65535
進(jìn)程局部性修改
配置文件:/etc/nginx/nginx.conf
# 針對(duì)nginx進(jìn)程進(jìn)行設(shè)置 worker_rlimit_nofile 35535;4. CPU的親和
CPU親和:將進(jìn)程/線程與cpu綁定,最直觀的好處就是提高了cpu cache的命中率,從而減少內(nèi)存訪問(wèn)損耗,提高程序的速度。
物理CPU數(shù)量:cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
CPU核心:cat /proc/cpuinfo | grep "cpu cores" | uniq
核心和進(jìn)程使用率:先按top,再按1
# /etc/nginx/nginx.conf # nginx建議數(shù)量跟cpu核心數(shù)保持一致 worker_processes 2; # 配置cpu親和 worker_cpu_affinity 0000000000000001 0000000000000010 # 與上一行等價(jià),自動(dòng)對(duì)應(yīng)(Nginx1.9版本以上) worker_cpu_affinity auto
查看Nginx的cpu綁定情況:
ps -eo pid,args,psr | grep [n]ginx
# nginx服務(wù)使用nginx用戶(最好不要使用root用戶) user nginx; # cpu親和(最好跟核心數(shù)保持一致) worker_processes 2; worker_cpu_affinity auto; # error的日志級(jí)別設(shè)置為warn error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; # 文件句柄對(duì)于進(jìn)程間的限制(建議1w以上) worker_rlimit_nofile 35535; # 事件驅(qū)動(dòng)器 events { use epoll; # 限制每一個(gè)worker_processes進(jìn)程可以處理多少個(gè)連接 worker_connections 10240; } http { include /etc/nginx/mime.types; default_type application/octet-stream; #字符集(服務(wù)端響應(yīng)發(fā)送的報(bào)文字符集) charset utf-8; log_format main "$remote_addr - $remote_user [$time_local] "$request" " "$status $body_bytes_sent "$http_referer" " ""$http_user_agent" "$http_x_forwarded_for""; access_log /var/log/nginx/access.log main; # 靜態(tài)資源的處理 sendfile on; #tcp_nopush on; keepalive_timeout 65; # gzip壓縮(對(duì)于IE6或以下版本對(duì)于gzip壓縮支持不是很好) gzip on; # IE6或以下不進(jìn)行壓縮(兼容) gzip_disable "MSIE [1-6]."; gzip_http_version 1.1; include /etc/nginx/conf.d/*.conf; }三、Nginx安全 1. 常見(jiàn)的惡意行為
爬蟲(chóng)行為和惡意抓取、資源盜用
基礎(chǔ)防盜鏈功能,不讓惡意用戶能輕易的爬取網(wǎng)站對(duì)外數(shù)據(jù)
secure_link_module,對(duì)數(shù)據(jù)安全性提高加密驗(yàn)證和實(shí)效性,適合如核心重要數(shù)據(jù)
acces_module,對(duì)后臺(tái)、部分用戶服務(wù)的數(shù)據(jù)提供IP防控
2. 常見(jiàn)的攻擊手段
后臺(tái)密碼撞庫(kù),通過(guò)猜測(cè)密碼字典不斷對(duì)后臺(tái)系統(tǒng)嘗試性登錄,獲取后臺(tái)登錄密碼
后臺(tái)登錄密碼復(fù)雜度
access_module,對(duì)后臺(tái)提供IP防控
預(yù)警機(jī)制(一個(gè)IP在一段時(shí)間內(nèi)重復(fù)不斷請(qǐng)求等)
3. 文件上傳漏洞利用一些可以上傳的接口將惡意代碼植入到服務(wù)器中,再通過(guò)url去訪問(wèn)以執(zhí)行代碼
例:http://www.rona1do.top/upload...(Nginx將1.jpg作為php代碼執(zhí)行)
# 文件上傳漏洞解決辦法 location ^~ /upload { root /opt/app/images; if ($request_file ~* (.*).php){ return 403; } }4. SQL注入
利用未過(guò)濾/未審核用戶輸入的攻擊方法,讓?xiě)?yīng)用運(yùn)行本不應(yīng)該運(yùn)行的SQL代碼
Nginx+LUA配置WAF防火墻防止SQL注入
ngx_lua_waf 下載地址
使用waf步驟:
git clone https://github.com/loveshell/ngx_lua_waf.git
cd ngx_lua_waf
mv ngx_lua_waf /etc/nginx/waf
vim /etc/nginx/waf/conf.lua,修改RulePath為對(duì)應(yīng)路徑(/etc/nginx/waf/wafconf)
vim /etc/nginx/waf/wafconf/post,加入一行,sors+,放sql注入的正則
集成waf:
# /etc/nginx/nginx.conf lua_package_path "/etc/nginx/waf/?.lua"; lua_shared_dict limit 10m; init_by_lua_file /etc/nginx/waf/init.lua; access_by_lua_file /etc/nginx/waf/waf.lua
reload Nginx
5. 復(fù)雜的訪問(wèn)攻擊中CC攻擊
waf/conf.lua配置文件中打開(kāi)防cc攻擊配置項(xiàng)
CCDeny="on"
CCrate="100/60" #每60秒100次請(qǐng)求
四、Nginx總結(jié)
定義Nginx在服務(wù)體系中的角色
靜態(tài)資源服務(wù)
代理服務(wù)
動(dòng)靜分離
設(shè)計(jì)評(píng)估
硬件
CPU、內(nèi)存、硬盤(pán)
系統(tǒng)
用戶權(quán)限、日志目錄存放
關(guān)聯(lián)服務(wù)
LVS、keepalive、syslog、Fastcgi
配置注意事項(xiàng)
合理配置
了解原理(HTTP、操作系統(tǒng)...)
關(guān)注日志
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/39907.html
摘要:請(qǐng)求的多階段異步處理多階段異步處理請(qǐng)求與事件驅(qū)動(dòng)架構(gòu)是密切相關(guān)的,也就是說(shuō),請(qǐng)求的多階段異步處理只能基于事件驅(qū)動(dòng)架構(gòu)實(shí)現(xiàn)。 前言 最近在讀 Nginx 相關(guān)的書(shū)籍,做一下讀書(shū)筆記。 Nginx 作為業(yè)界知名的高性能服務(wù)器,被廣泛的應(yīng)用。它的高性能正是由于其優(yōu)秀的架構(gòu)設(shè)計(jì),其架構(gòu)主要包括這幾點(diǎn):模塊化設(shè)計(jì)、事件驅(qū)動(dòng)架構(gòu)、請(qǐng)求的多階段異步處理、管理進(jìn)程與多工作進(jìn)程設(shè)計(jì)、內(nèi)存池的設(shè)計(jì),以下內(nèi)...
摘要:請(qǐng)求的多階段異步處理多階段異步處理請(qǐng)求與事件驅(qū)動(dòng)架構(gòu)是密切相關(guān)的,也就是說(shuō),請(qǐng)求的多階段異步處理只能基于事件驅(qū)動(dòng)架構(gòu)實(shí)現(xiàn)。 前言 最近在讀 Nginx 相關(guān)的書(shū)籍,做一下讀書(shū)筆記。 Nginx 作為業(yè)界知名的高性能服務(wù)器,被廣泛的應(yīng)用。它的高性能正是由于其優(yōu)秀的架構(gòu)設(shè)計(jì),其架構(gòu)主要包括這幾點(diǎn):模塊化設(shè)計(jì)、事件驅(qū)動(dòng)架構(gòu)、請(qǐng)求的多階段異步處理、管理進(jìn)程與多工作進(jìn)程設(shè)計(jì)、內(nèi)存池的設(shè)計(jì),以下內(nèi)...
摘要:架構(gòu)篇一常見(jiàn)問(wèn)題相同多個(gè)虛擬主機(jī)優(yōu)先級(jí)訪問(wèn)三個(gè)配置文件配置上述相同的三個(gè)虛擬主機(jī),會(huì)先訪問(wèn),訪問(wèn)的優(yōu)先級(jí)是按照服務(wù)器的讀取順序,即文件名的排序。 Nginx-架構(gòu)篇 一、Nginx常見(jiàn)問(wèn)題 1. 相同server_name多個(gè)虛擬主機(jī)優(yōu)先級(jí)訪問(wèn) # 三個(gè)配置文件: # testserver1: server_name testserver1 www.rona1do.top; root...
閱讀 959·2021-11-23 09:51
閱讀 1202·2021-11-15 17:57
閱讀 1717·2021-09-22 15:24
閱讀 864·2021-09-07 09:59
閱讀 2295·2019-08-29 15:10
閱讀 1906·2019-08-29 12:47
閱讀 816·2019-08-29 12:30
閱讀 3454·2019-08-26 13:51