關於Nginx的架構
Nginx-架構篇
一、Nginx常見問題
1.相同server_name多個虛擬主機優先權存取
# 三个配置文件: # 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的三個虛擬主機,會先存取testserver1,存取的優先權是依照伺服器的讀取順序,也就是檔案名稱的排序。
2. location匹配優先權
=:進行普通字元精確匹配,也就是完全匹配
^~ :表示普通字元匹配,使用前綴匹配
~ ~ :表示執行一個正規匹配(加不區分大小寫)
#上述優先權自上而下優先權降低,前兩個匹配是精確匹配,匹配到以後就不再往下找,正則匹配匹配到相應的字符串也會繼續往下尋找是否有更精確的匹配。
3. Nginx的try_files的使用
按順序檢查檔案是否存在
# 先检查对应的url地址下的文件存不存在,如果不存在找/index.php,类似于重定向 location / { try_file $uri /index.php; }
4. Nginx的alias和root區別
#root
location /request_path/image/ { root /local_path/image/; } # 请求:http://www.rona1do.top/request_path/image/cat.png # 查询: /local_path/image/request_path_image/cat.png
alias
location /request_path/image/ { alias /local_path/image/; } # 请求:http://www.rona1do.top/request_path/image/cat.png # 查询: /local_path/image/cat.png
5. 用什麼樣的方法傳遞使用者的真實IP位址
在有代理的情況下,remote_addr取得的是代理程式的ip,不是使用者的ip
x-forwarded-for容易被竄改
通用解決方法: 可以跟第一層代理程式協商,設定頭資訊x_real_ip記錄用戶的ipset x_real_ip=$remote_addr
6. Nginx中常見錯誤碼
413:request entity too large
用戶上傳檔案限制:client_max_body_size
502:bad gateway
後端服務無回應
#504:gateway time-out
#後端服務逾時
- 目前系統結構瓶頸
- 觀察指標(top查看狀態、日誌等)、壓力測試
- #了解業務模式
- 介面業務類型,系統層次化結構
- 效能與安全性
- #設定防火牆太過於重視安全,會降低效能
- 安裝
#yum install httpd- tools
- 使用
- #ab -n 2000 -c 2 http://127.0.0.1/
- -n:總的請求數
- -c:並發數字
- -k :是否開啟長連線
- ##檔案句柄
- ##LinuxUnix一起皆文件,文件句柄就是一個索引
- #設定方式
- 系統全域性修改與使用者局部性修改:
- 系统全局性修改、用户局部性修改、进程局部性修改
/etc/security/limits.conf# root:root用户 root soft nofile 65535 # hard 强制限制、soft 超过会发送提醒(邮件等),不限制 root hard nofile 65535 # *:所有用户 * soft nofile 65535 * hard nofile 65535登入後複製進程局部性修改
##設定檔案:
/etc/nginx/nginx.confCPU親和:4. CPU的親和# 针对nginx进程进行设置 worker_rlimit_nofile 35535;登入後複製
將進程/線程與cpu綁定,最直覺的好處就是提高了cpu cache的命中率,從而減少記憶體存取損耗,提高程式的速度。
物理CPU數量:cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
cat /proc/cpuinfo | grep "cpu cores" | uniq#CPU核心:
top核心與程式使用率:先按
,再按- 1
查看Nginx的cpu綁定狀況:<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'># /etc/nginx/nginx.conf # nginx建议数量跟cpu核心数保持一致 worker_processes 2; # 配置cpu亲和 worker_cpu_affinity 0000000000000001 0000000000000010 # 与上一行等价,自动对应(Nginx1.9版本以上) worker_cpu_affinity auto</pre><div class="contentsignin">登入後複製</div></div>
ps -eo pid, args,psr | grep [n]ginx
5. Nginx通用設定最佳化<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'># nginx服务使用nginx用户(最好不要使用root用户)
user nginx;
# cpu亲和(最好跟核心数保持一致)
worker_processes 2;
worker_cpu_affinity auto;
# error的日志级别设置为warn
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
# 文件句柄对于进程间的限制(建议1w以上)
worker_rlimit_nofile 35535;
# 事件驱动器
events {
use epoll;
# 限制每一个worker_processes进程可以处理多少个连接
worker_connections 10240;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
#字符集(服务端响应发送的报文字符集)
charset utf-8;
log_format main &#39;$remote_addr - $remote_user [$time_local] "$request" &#39;
&#39;$status $body_bytes_sent "$http_referer" &#39;
&#39;"$http_user_agent" "$http_x_forwarded_for"&#39;;
access_log /var/log/nginx/access.log main;
# 静态资源的处理
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
# gzip压缩(对于IE6或以下版本对于gzip压缩支持不是很好)
gzip on;
# IE6或以下不进行压缩(兼容)
gzip_disable "MSIE [1-6]\.";
gzip_http_version 1.1;
include /etc/nginx/conf.d/*.conf;
}</pre><div class="contentsignin">登入後複製</div></div>
三、Nginx安全
1. 常見的惡意行為
爬蟲行為與惡意抓取、資源盜用
- #基礎防盜鏈功能,不讓惡意使用者能輕易的爬取網站對外數據
secure_link_module,對資料安全性提高加密驗證和實效性,適合如核心重要資料
acces_module,對後台、部分使用者服務的資料提供IP防控
2. 常见的攻击手段
后台密码撞库,通过猜测密码字典不断对后台系统尝试性登录,获取后台登录密码
后台登录密码复杂度
access_module,对后台提供IP防控
预警机制(一个IP在一段时间内重复不断请求等)
3. 文件上传漏洞
利用一些可以上传的接口将恶意代码植入到服务器中,再通过url去访问以执行代码
例:http://www.rona1do.top/upload...(Nginx将1.jpg作为php代码执行)
# 文件上传漏洞解决办法 location ^~ /upload { root /opt/app/images; if ($request_file ~* (.*)\.php){ return 403; } }
4. SQL注入
利用未过滤/未审核用户输入的攻击方法,让应用运行本不应该运行的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为对应路径(/etc/nginx/waf/wafconf)vim /etc/nginx/waf/wafconf/post
,加入一行,\sor\s+
,放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. 复杂的访问攻击中CC攻击
waf/conf.lua
配置文件中打开防cc攻击配置项CCDeny="on"
CCrate="100/60" #每60秒100次请求
四、Nginx总结
定义Nginx在服务体系中的角色
静态资源服务
代理服务
动静分离
设计评估
LVS、keepalive、syslog、Fastcgi
用户权限、日志目录存放
CPU、内存、硬盘
硬件
系统
关联服务
配置注意事项
合理配置
了解原理(HTTP、操作系统...)
关注日志
相关推荐:
以上是關於Nginx的架構的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

可以通過以下步驟查詢 Docker 容器名稱:列出所有容器(docker ps)。篩選容器列表(使用 grep 命令)。獲取容器名稱(位於 "NAMES" 列中)。

如何在 Windows 中配置 Nginx?安裝 Nginx 並創建虛擬主機配置。修改主配置文件並包含虛擬主機配置。啟動或重新加載 Nginx。測試配置並查看網站。選擇性啟用 SSL 並配置 SSL 證書。選擇性設置防火牆允許 80 和 443 端口流量。

在雲服務器上配置 Nginx 域名的方法:創建 A 記錄,指向雲服務器的公共 IP 地址。在 Nginx 配置文件中添加虛擬主機塊,指定偵聽端口、域名和網站根目錄。重啟 Nginx 以應用更改。訪問域名測試配置。其他注意事項:安裝 SSL 證書啟用 HTTPS、確保防火牆允許 80 端口流量、等待 DNS 解析生效。

確認 Nginx 是否啟動的方法:1. 使用命令行:systemctl status nginx(Linux/Unix)、netstat -ano | findstr 80(Windows);2. 檢查端口 80 是否開放;3. 查看系統日誌中 Nginx 啟動消息;4. 使用第三方工具,如 Nagios、Zabbix、Icinga。

在 Docker 中創建容器: 1. 拉取鏡像: docker pull [鏡像名] 2. 創建容器: docker run [選項] [鏡像名] [命令] 3. 啟動容器: docker start [容器名]

可以查詢 Nginx 版本的方法有:使用 nginx -v 命令;查看 nginx.conf 文件中的 version 指令;打開 Nginx 錯誤頁,查看頁面的標題。

Docker 容器啟動步驟:拉取容器鏡像:運行 "docker pull [鏡像名稱]"。創建容器:使用 "docker create [選項] [鏡像名稱] [命令和參數]"。啟動容器:執行 "docker start [容器名稱或 ID]"。檢查容器狀態:通過 "docker ps" 驗證容器是否正在運行。

Linux系統的五個基本組件是:1.內核,2.系統庫,3.系統實用程序,4.圖形用戶界面,5.應用程序。內核管理硬件資源,系統庫提供預編譯函數,系統實用程序用於系統管理,GUI提供可視化交互,應用程序利用這些組件實現功能。
