検索

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 までご連絡ください。
    セッションを保存するためにデータベースを使用することの利点は何ですか?セッションを保存するためにデータベースを使用することの利点は何ですか?Apr 24, 2025 am 12:16 AM

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

    PHPでカスタムセッション処理をどのように実装しますか?PHPでカスタムセッション処理をどのように実装しますか?Apr 24, 2025 am 12:16 AM

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

    セッションIDとは何ですか?セッションIDとは何ですか?Apr 24, 2025 am 12:13 AM

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

    ステートレス環境(APIなど)でセッションをどのように処理しますか?ステートレス環境(APIなど)でセッションをどのように処理しますか?Apr 24, 2025 am 12:12 AM

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

    セッションに関連するクロスサイトスクリプティング(XSS)攻撃からどのように保護できますか?セッションに関連するクロスサイトスクリプティング(XSS)攻撃からどのように保護できますか?Apr 23, 2025 am 12:16 AM

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

    PHPセッションのパフォーマンスを最適化するにはどうすればよいですか?PHPセッションのパフォーマンスを最適化するにはどうすればよいですか?Apr 23, 2025 am 12:13 AM

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

    session.gc_maxlifetime構成設定とは何ですか?session.gc_maxlifetime構成設定とは何ですか?Apr 23, 2025 am 12:10 AM

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

    PHPでセッション名をどのように構成しますか?PHPでセッション名をどのように構成しますか?Apr 23, 2025 am 12:08 AM

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

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

    ホットツール

    SAP NetWeaver Server Adapter for Eclipse

    SAP NetWeaver Server Adapter for Eclipse

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

    mPDF

    mPDF

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

    DVWA

    DVWA

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

    AtomエディタMac版ダウンロード

    AtomエディタMac版ダウンロード

    最も人気のあるオープンソースエディター

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境