ホームページ > バックエンド開発 > PHPチュートリアル > Nginx アーキテクチャについて

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

不言
リリース: 2023-03-25 13:20:01
オリジナル
1633 人が閲覧しました

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 サイトの他の関連記事を参照してください。

    関連ラベル:
    ソース:php.cn
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート