Nginx アーキテクチャについて
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
🎜🎜4. CPU アフィニティ🎜🎜🎜CPU アフィニティ: 🎜 プロセス/スレッドを CPU にバインドする最も直感的な利点は、 CPU キャッシュ ヒット効率により、メモリ アクセスの損失が軽減され、プログラム速度が向上します。 🎜🎜🎜🎜物理 CPU 番号:# 文件上传漏洞解决办法 location ^~ /upload { root /opt/app/images; if ($request_file ~* (.*)\.php){ return 403; } }
ログイン後にコピーログイン後にコピー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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

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

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











クラウドサーバーでnginxドメイン名を構成する方法:クラウドサーバーのパブリックIPアドレスを指すレコードを作成します。 NGINX構成ファイルに仮想ホストブロックを追加し、リスニングポート、ドメイン名、およびWebサイトルートディレクトリを指定します。 nginxを再起動して変更を適用します。ドメイン名のテスト構成にアクセスします。その他のメモ:SSL証明書をインストールしてHTTPSを有効にし、ファイアウォールがポート80トラフィックを許可し、DNS解像度が有効になることを確認します。

すべてのコンテナ(Docker PS)をリストする手順に従って、Dockerコンテナ名を照会できます。コンテナリストをフィルタリングします(GREPコマンドを使用)。コンテナ名(「名前」列にあります)を取得します。

nginxが開始されるかどうかを確認する方法:1。コマンドラインを使用します:SystemCTLステータスnginx(Linux/unix)、netstat -ano | FindStr 80(Windows); 2。ポート80が開いているかどうかを確認します。 3.システムログのnginx起動メッセージを確認します。 4. Nagios、Zabbix、Icingaなどのサードパーティツールを使用します。

nginxバージョンを照会できるメソッドは次のとおりです。nginx-vコマンドを使用します。 nginx.confファイルでバージョンディレクティブを表示します。 nginxエラーページを開き、ページタイトルを表示します。

Windowsでnginxを構成する方法は? nginxをインストールし、仮想ホスト構成を作成します。メイン構成ファイルを変更し、仮想ホスト構成を含めます。 nginxを起動またはリロードします。構成をテストし、Webサイトを表示します。 SSLを選択的に有効にし、SSL証明書を構成します。ファイアウォールを選択的に設定して、ポート80および443のトラフィックを許可します。

Docker Containerの起動手順:コンテナ画像を引く:「Docker Pull [Mirror Name]」を実行します。コンテナの作成:「docker create [options] [mirror name] [コマンドとパラメーター]」を使用します。コンテナを起動します:「docker start [container name or id]」を実行します。コンテナのステータスを確認してください:コンテナが「Docker PS」で実行されていることを確認します。

NGINXサーバーを起動するには、異なるオペレーティングシステムに従って異なる手順が必要です。Linux/UNIXシステム:NGINXパッケージをインストールします(たとえば、APT-GetまたはYumを使用)。 SystemCtlを使用して、NGINXサービスを開始します(たとえば、Sudo SystemCtl Start NGinx)。 Windowsシステム:Windowsバイナリファイルをダウンロードしてインストールします。 nginx.exe実行可能ファイルを使用してnginxを開始します(たとえば、nginx.exe -c conf \ nginx.conf)。どのオペレーティングシステムを使用しても、サーバーIPにアクセスできます

Dockerでコンテナを作成します。1。画像を引く:Docker Pull [ミラー名]2。コンテナを作成:Docker Run [Options] [Mirror Name] [コマンド]3。コンテナを起動:Docker Start [Container Name]
