目次
Nginx-Architecture
1. Nginx FAQ
1. 同じserver_nameを持つ複数の仮想ホストは優先アクセスを持ちます
2. 位置一致の優先順位
3. Nginxのtry_filesの使い方
4. Nginxのaliasとrootの違い
6. Nginx中常见错误码
二、Nginx性能优化
1. 性能优化考虑点
2. ab接口压力测试工具
3. 系统与Nginx性能优化
4. CPU的亲和
2. 常见的攻击手段
3. 文件上传漏洞
4. SQL注入
5. 复杂的访问攻击中CC攻击
四、Nginx总结
ホームページ バックエンド開発 PHPチュートリアル Nginx アーキテクチャについて

Nginx アーキテクチャについて

May 07, 2018 am 10:51 AM
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接口压力测试工具

  1. 安装

    • yum install httpd-tools

  2. 使用

    • ab -n 2000 -c 2 http://127.0.0.1/

    • -n:总的请求数

    • -c:并发数

    • -k:是否开启长连接

3. 系统与Nginx性能优化

  1. 文件句柄

    • LinuxUnix一起皆文件,文件句柄就是一个索引

  2. 设置方式

    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

413: requestエンティティが大きすぎます

    ユーザーアップロードファイル制限: client_max_body_size
    • 502: 不正なゲートウェイ
    • バックエンドサービスが応答していません

    • 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: ロングコネクションを有効にするかどうか🎜🎜🎜
      🎜 3. システムと Nginx のパフォーマンスの最適化🎜
        🎜🎜ファイル ハンドル🎜🎜🎜🎜🎜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の防止と制御を提供します🎜

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注入

Nginx アーキテクチャについて

  • ngx_lua_waf 下载地址

使用waf步骤:

  1. git clone https://github.com/loveshell/ngx_lua_waf.git

  2. cd ngx_lua_waf

  3. mv ngx_lua_waf /etc/nginx/waf

  4. vim /etc/nginx/waf/conf.lua,修改RulePath为对应路径(/etc/nginx/waf/wafconf)

  5. vim /etc/nginx/waf/wafconf/post,加入一行,\sor\s+,放sql注入的正则

  6. 集成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
ログイン後にコピー
  1. reload Nginx

5. 复杂的访问攻击中CC攻击

  • waf/conf.lua配置文件中打开防cc攻击配置项

    • CCDeny="on"

    • CCrate="100/60" #每60秒100次请求

四、Nginx总结

  1. 定义Nginx在服务体系中的角色

  • 静态资源服务

  • Nginx アーキテクチャについて

  • 代理服务

  • Nginx アーキテクチャについて

  • 动静分离

  • 设计评估

    • LVS、keepalive、syslog、Fastcgi

    • 用户权限、日志目录存放

    • CPU、内存、硬盘

    • 硬件

    • 系统

    • 关联服务

  • 配置注意事项

    • 合理配置

    • 了解原理(HTTP、操作系统...)

    • 关注日志

    相关推荐:

    nginx架构与实现

    以上がNginx アーキテクチャについての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

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

    AI Clothes Remover

    AI Clothes Remover

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

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    Video Face Swap

    Video Face Swap

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

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 中国語版

    SublimeText3 中国語版

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

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

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

    nginxでクラウドサーバードメイン名を構成する方法 nginxでクラウドサーバードメイン名を構成する方法 Apr 14, 2025 pm 12:18 PM

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

    Dockerコンテナの名前を確認する方法 Dockerコンテナの名前を確認する方法 Apr 15, 2025 pm 12:21 PM

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

    Nginxが開始されるかどうかを確認する方法 Nginxが開始されるかどうかを確認する方法 Apr 14, 2025 pm 01:03 PM

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

    Nginxバージョンを確認する方法 Nginxバージョンを確認する方法 Apr 14, 2025 am 11:57 AM

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

    Windowsでnginxを構成する方法 Windowsでnginxを構成する方法 Apr 14, 2025 pm 12:57 PM

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

    Dockerによってコンテナを起動する方法 Dockerによってコンテナを起動する方法 Apr 15, 2025 pm 12:27 PM

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

    nginxサーバーを開始する方法 nginxサーバーを開始する方法 Apr 14, 2025 pm 12:27 PM

    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用のコンテナを作成する方法 Docker用のコンテナを作成する方法 Apr 15, 2025 pm 12:18 PM

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

    See all articles