Nginx-Architecture
1. Nginx FAQ
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を持つ3つの仮想ホストを設定すると、testserver1が最初にアクセスされ、アクセスの優先順位が決まります。サーバーの読み取り順序、つまりファイル名のソートに基づいています。
2. 位置一致の優先順位
=: 通常の文字の完全一致、つまり完全一致
^~: 通常の文字一致を示し、接頭辞一致を使用します
~ ~:通常の一致 (大文字と小文字を区別しない追加)
上記の優先順位は上から下に向かって下がります。一致した後は、一致する文字列は下向きに検索されなくなります。また、より正確な一致を検索し続けます。
3. Nginxのtry_filesの使い方
ファイルが順番に存在するか確認する
# 先检查对应的url地址下的文件存不存在,如果不存在找/index.php,类似于重定向 location / { try_file $uri /index.php; }
4. Nginxのaliasと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
- rrreええ 5 .何をするかuse このメソッドはユーザーの実際の IP アドレスを渡します
- プロキシの場合、remote_addr はユーザーの IP ではなくプロキシの IP を取得します
- x-forwarded-for は簡単に改ざんされます
ユーザーの IP を記録するためのヘッダー情報 x_real_ip を設定するために、第 1 レベルのエージェントと交渉できますset x_real_ip=$remote_addr
6 Nginx の一般的なエラー コードset x_real_ip=$remote_addr
6. Nginx中常见错误码
413:request entity too large
用户上传文件限制:client_max_body_size
502:bad gateway
后端服务无响应
504:gateway time-out
后端服务超时
二、Nginx性能优化
1. 性能优化考虑点
当前系统结构瓶颈
观察指标(top查看状态、日志等)、压力测试
了解业务模式
接口业务类型,系统层次化结构
性能与安全
配置防火墙太过于注重安全,会降低性能
2. ab接口压力测试工具
安装
yum install httpd-tools
使用
ab -n 2000 -c 2 http://127.0.0.1/
-n:总的请求数
-c:并发数
-k:是否开启长连接
3. 系统与Nginx性能优化
文件句柄
LinuxUnix一起皆文件,文件句柄就是一个索引
设置方式
location /request_path/image/ { alias /local_path/image/; } # 请求:http://www.rona1do.top/request_path/image/cat.png # 查询: /local_path/image/cat.png
系统全局性修改 和 用户局部性修改:
配置文件:/etc/security/limits.conf
- 系统全局性修改、用户局部性修改、进程局部性修改
进程局部性修改
配置文件:/etc/nginx/nginx.conf
# root:root用户 root soft nofile 65535 # hard 强制限制、soft 超过会发送提醒(邮件等),不限制 root hard nofile 65535 # *:所有用户 * soft nofile 65535 * hard nofile 65535
4. CPU的亲和
CPU亲和:将进程/线程与cpu绑定,最直观的好处就是提高了cpu cache的命中率,从而减少内存访问损耗,提高程序的速度。
物理CPU数量:
cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
CPU核心:
cat /proc/cpuinfo | grep "cpu cores" | uniq
核心和进程使用率:先按
top
,再按1
# 针对nginx进程进行设置 worker_rlimit_nofile 35535;
查看Nginx的cpu绑定情况:ps -eo pid,args,psr | grep [n]ginx
- ユーザーアップロードファイル制限: client_max_body_size
- バックエンドサービスが応答していません
-
504: ゲートウェイタイムアウト
🎜 🎜🎜🎜バックエンドサービスタイムアウト🎜🎜🎜🎜🎜 2. Nginx のパフォーマンスの最適化🎜🎜1. パフォーマンスの最適化に関する考慮事項🎜🎜🎜🎜現在のシステム構造のボトルネック🎜🎜🎜🎜🎜観察指標 (トップビューのステータス、ログなど)、ストレステスト🎜🎜🎜 🎜 🎜ビジネスモデルを理解する🎜🎜🎜🎜🎜インターフェースのビジネスタイプ、システムの階層構造🎜🎜🎜🎜🎜パフォーマンスとセキュリティ🎜🎜🎜🎜🎜セキュリティに過度に注意を払うファイアウォールの構成はパフォーマンスを低下させます🎜🎜🎜🎜🎜 2. ab インターフェース圧力 テストツール 🎜- 🎜🎜install🎜🎜🎜🎜🎜
yum install httpd-tools
🎜🎜🎜🎜🎜use🎜🎜🎜🎜🎜ab -n 2000 -c 2 http://127.0.0.1/🎜🎜🎜🎜-n: リクエストの総数🎜🎜🎜🎜-c: 同時実行数🎜🎜🎜🎜-k: ロングコネクションを有効にするかどうか🎜🎜🎜- 🎜🎜ファイル ハンドル🎜🎜🎜🎜🎜LinuxUnix はファイルであり、ファイル ハンドルはインデックスです🎜🎜 🎜🎜🎜設定方法🎜
# /etc/nginx/nginx.conf # nginx建议数量跟cpu核心数保持一致 worker_processes 2; # 配置cpu亲和 worker_cpu_affinity 0000000000000001 0000000000000010 # 与上一行等价,自动对应(Nginx1.9版本以上) worker_cpu_affinity auto
🎜/etc/security/limits.conf
🎜# 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 '$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; # 静态资源的处理 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; }
🎜ローカル変更の処理🎜🎜設定ファイル: 🎜/etc/nginx/nginx.conf
🎜# 文件上传漏洞解决办法 location ^~ /upload { root /opt/app/images; if ($request_file ~* (.*)\.php){ return 403; } }
🎜4. CPU アフィニティ🎜🎜🎜CPU アフィニティ: 🎜 プロセス/スレッドを CPU にバインドする最も直感的な利点は、 CPU キャッシュ ヒット効率により、メモリ アクセスの損失が軽減され、プログラム速度が向上します。 🎜🎜🎜🎜物理 CPU 番号:cat /proc/cpuinfo | grep "physical id" | wc -l
🎜🎜🎜🎜CPU コア:cat /proc/cpuinfo | grep "cpu cores" | uniq
🎜🎜🎜🎜コアとプロセスの使用状況: 最初にtop
を押し、次に1
を押して Nginx を表示しますCPU バインド状況: 🎜🎜ps -eo pid,args,psr | grep [n]ginx
🎜🎜5. Nginx の一般的な構成の最適化🎜🎜3. 一般的な悪意のある動作🎜 🎜🎜🎜クロール動作、悪意のあるクローリング、リソース盗難🎜🎜🎜🎜🎜基本的なホットリンク対策機能により、悪意のあるユーザーがWebサイトの外部データを簡単にクロールすることを防ぎます🎜🎜🎜🎜secure_link_moduleは、データのセキュリティと有効性のための暗号化検証を向上させます。重要なコアデータ🎜🎜🎜🎜acces_moduleは、バックグラウンドでのデータと一部のユーザーサービスに対するIPの防止と制御を提供します🎜
- 502: 不正なゲートウェイ
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 中国語 Web サイトの他の関連記事を参照してください。

データベースストレージセッションを使用することの主な利点には、持続性、スケーラビリティ、セキュリティが含まれます。 1。永続性:サーバーが再起動しても、セッションデータは変更されないままになります。 2。スケーラビリティ:分散システムに適用され、セッションデータが複数のサーバー間で同期されるようにします。 3。セキュリティ:データベースは、機密情報を保護するための暗号化されたストレージを提供します。

PHPでのカスタムセッション処理の実装は、SessionHandlerInterfaceインターフェイスを実装することで実行できます。具体的な手順には、次のものが含まれます。1)CussentsessionHandlerなどのSessionHandlerInterfaceを実装するクラスの作成。 2)セッションデータのライフサイクルとストレージ方法を定義するためのインターフェイス(オープン、クローズ、読み取り、書き込み、破壊、GCなど)の書き換え方法。 3)PHPスクリプトでカスタムセッションプロセッサを登録し、セッションを開始します。これにより、データをMySQLやRedisなどのメディアに保存して、パフォーマンス、セキュリティ、スケーラビリティを改善できます。

SessionIDは、ユーザーセッションのステータスを追跡するためにWebアプリケーションで使用されるメカニズムです。 1.ユーザーとサーバー間の複数のインタラクション中にユーザーのID情報を維持するために使用されるランダムに生成された文字列です。 2。サーバーは、ユーザーの複数のリクエストでこれらの要求を識別および関連付けるのに役立つCookieまたはURLパラメーターを介してクライアントに生成および送信します。 3.生成は通常、ランダムアルゴリズムを使用して、一意性と予測不可能性を確保します。 4.実際の開発では、Redisなどのメモリ内データベースを使用してセッションデータを保存してパフォーマンスとセキュリティを改善できます。

APIなどのステートレス環境でのセッションの管理は、JWTまたはCookieを使用して達成できます。 1。JWTは、無国籍とスケーラビリティに適していますが、ビッグデータに関してはサイズが大きいです。 2.cookiesはより伝統的で実装が簡単ですが、セキュリティを確保するために慎重に構成する必要があります。

セッション関連のXSS攻撃からアプリケーションを保護するには、次の測定が必要です。1。セッションCookieを保護するためにHTTPonlyとセキュアフラグを設定します。 2。すべてのユーザー入力のエクスポートコード。 3.コンテンツセキュリティポリシー(CSP)を実装して、スクリプトソースを制限します。これらのポリシーを通じて、セッション関連のXSS攻撃を効果的に保護し、ユーザーデータを確保できます。

PHPセッションのパフォーマンスを最適化する方法は次のとおりです。1。遅延セッション開始、2。データベースを使用してセッションを保存します。これらの戦略は、高い並行性環境でのアプリケーションの効率を大幅に改善できます。

thesession.gc_maxlifettinginttinginphpdethinesthelifsessessiondata、setinseconds.1)it'sconfiguredinphp.iniorviaini_set()。 2)AbalanceSneededToAvoidPerformanceIssues andunexpectedLogouts.3)php'sgarbagecollectionisisprobabilistic、影響を受けたBygc_probabi

PHPでは、session_name()関数を使用してセッション名を構成できます。特定の手順は次のとおりです。1。session_name()関数を使用して、session_name( "my_session")などのセッション名を設定します。 2。セッション名を設定した後、session_start()を呼び出してセッションを開始します。セッション名の構成は、複数のアプリケーション間のセッションデータの競合を回避し、セキュリティを強化することができますが、セッション名の一意性、セキュリティ、長さ、設定タイミングに注意してください。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境
