検索

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

  • 使用

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

    • -n:总的请求数

    • -c:并发数

    • -k:是否开启长连接

    3. 系统与Nginx性能优化

    1. 文件句柄

    • 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

    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 までご連絡ください。
    PHPでの依存関係注射:一般的な落とし穴の回避PHPでの依存関係注射:一般的な落とし穴の回避May 16, 2025 am 12:17 AM

    依存関係の指示(di)inphpenhancesscodeflexibility andtestability bydecouplingdepensitycreation fromusage.toemplementdiefectivilly:1)sudiconticainersichyloiavoidovedovedineriering.2)回避装置の回避装置loadbylimitingdencedentotheeorfour.3)adhe

    PHP Webサイトをスピードアップする方法:パフォーマンスチューニングPHP Webサイトをスピードアップする方法:パフォーマンスチューニングMay 16, 2025 am 12:12 AM

    toimproveyourphpwebsite'sperformance、usethesestrategies:1)codecaching withop cachetospeedupscriptscriptintertention.2)最適化策を選択することを最適化してください

    PHPで大量の電子メールを送信する:可能ですか?PHPで大量の電子メールを送信する:可能ですか?May 16, 2025 am 12:10 AM

    はい、itispossibletosendmassemailswithphp.1)uselibrarieslikephpmailerorsforfienceemailsending.2)vetseemailstoavoidspamflags.3)emorizeemailsusingdynamicconttoimbroveengagemention.

    PHPの依存噴射の目的は何ですか?PHPの依存噴射の目的は何ですか?May 16, 2025 am 12:10 AM

    依存関係の指示(di)inphpisadesignpatterntativevevesion ofコントロール(IOC)は、依存性を依存していることによって、微分化された誘惑を依存させ、微分、テスト可能性、および柔軟性を高めることができます

    PHPを使用して電子メールを送信する方法は?PHPを使用して電子メールを送信する方法は?May 16, 2025 am 12:03 AM

    PHPを使用して電子メールを送信する最良の方法は次のとおりです。1。PHPのMail()関数を基本送信に使用します。 2。phpmailerライブラリを使用して、より複雑なHTMLメールを送信します。 3. SendGridなどのトランザクションメールサービスを使用して、信頼性と分析機能を改善します。これらの方法を使用すると、電子メールが受信トレイに届くだけでなく、受信者を引き付けることもできます。

    PHP多次元アレイの要素の総数を計算する方法は?PHP多次元アレイの要素の総数を計算する方法は?May 15, 2025 pm 09:00 PM

    PHP多次元アレイの要素の総数を計算することは、再帰的または反復的な方法を使用して行うことができます。 1.再帰的な方法は、アレイを通過し、ネストされた配列を再帰的に処理することによりカウントされます。 2。反復法は、スタックを使用して再帰をシミュレートして深さの問題を回避します。 3. array_walk_recursive関数も実装できますが、手動でカウントする必要があります。

    PHPのDo-While Loopsの特徴は何ですか?PHPのDo-While Loopsの特徴は何ですか?May 15, 2025 pm 08:57 PM

    PHPでは、ループの特性は、ループ本体が少なくとも1回実行されることを確認し、条件に基づいてループを続行するかどうかを決定することです。 1)条件付きチェックの前にループ本体を実行します。これは、ユーザー入力検証やメニューシステムなど、操作を少なくとも1回実行する必要があるシナリオに適しています。 2)ただし、do-whileループの構文は、初心者間の混乱を引き起こす可能性があり、不要なパフォーマンスオーバーヘッドを追加する可能性があります。

    PHPで弦をハッシュする方法は?PHPで弦をハッシュする方法は?May 15, 2025 pm 08:54 PM

    PHPの効率的なハッシュ文字列は、次の方法を使用できます。1。MD5関数を使用して高速ハッシュを使用しますが、パスワードストレージには適していません。 2。SHA256関数を使用して、セキュリティを改善します。 3. password_hash関数を使用してパスワードを処理して、最高のセキュリティと利便性を提供します。

    See all articles

    ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

    ホットツール

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    SublimeText3 中国語版

    SublimeText3 中国語版

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

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    VSCode Windows 64 ビットのダウンロード

    VSCode Windows 64 ビットのダウンロード

    Microsoft によって発売された無料で強力な IDE エディター

    ZendStudio 13.5.1 Mac

    ZendStudio 13.5.1 Mac

    強力な PHP 統合開発環境