Nginx 아키텍처 정보

不言
풀어 주다: 2023-03-25 13:20:01
원래의
1606명이 탐색했습니다.

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의 별칭과 루트

  • 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

location /request_path/image/ {
    alias /local_path/image/;
}
# 请求:http://www.rona1do.top/request_path/image/cat.png
# 查询: /local_path/image/cat.png
로그인 후 복사

5 .무엇을 use 이 방법은 사용자의 실제 IP 주소를 전달합니다

  • 프록시의 경우 Remote_addr은 사용자의 IP가 아닌 프록시의 IP를 얻습니다.

  • x-forwarded-for는 쉽게 변조됩니다

일반 해결 방법: 1단계 에이전트와 협상하여 x_real_ip 헤더 정보를 설정하여 사용자의 IP를 기록할 수 있습니다.
set x_real_ip=$remote_addrset 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. 设置方式

    - 系统全局性修改、用户局部性修改、进程局部性修改
    로그인 후 복사
系统全局性修改 和 用户局部性修改:
配置文件:/etc/security/limits.conf
# root:root用户
root soft nofile 65535
# hard 强制限制、soft 超过会发送提醒(邮件等),不限制
root hard nofile 65535
# *:所有用户
*     soft nofile 65535
*     hard nofile 65535
로그인 후 복사
进程局部性修改
配置文件:/etc/nginx/nginx.conf
# 针对nginx进程进行设置
worker_rlimit_nofile 35535;
로그인 후 복사

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

# /etc/nginx/nginx.conf

# nginx建议数量跟cpu核心数保持一致
worker_processes 2;
# 配置cpu亲和
worker_cpu_affinity 0000000000000001 0000000000000010
# 与上一行等价,自动对应(Nginx1.9版本以上)
worker_cpu_affinity auto
로그인 후 복사

查看Nginx的cpu绑定情况:
ps -eo pid,args,psr | grep [n]ginx

6 Nginx의 일반적인 오류 코드

413: 요청 엔터티가 너무 큽니다

  • 사용자 업로드 파일 제한: client_max_body_size

    • 502: 잘못된 게이트웨이

    • 백엔드 서비스가 응답하지 않음
    • 🎜504: 게이트웨이 시간 초과🎜🎜 🎜🎜🎜백엔드 서비스 timeout🎜🎜🎜🎜🎜 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는 파일이고, 파일 핸들은 인덱스🎜🎜 🎜🎜🎜설정 방법🎜
        # 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;
        }
        로그인 후 복사
        🎜< /ol>🎜시스템 전역 수정 및 사용자 로컬 수정: 🎜🎜구성 파일: 🎜/etc/security/limits.conf🎜
        # 文件上传漏洞解决办法
        location ^~ /upload {
            root /opt/app/images;
            if ($request_file ~* (.*)\.php){
                return 403;
            }
        }
        로그인 후 복사
        로그인 후 복사
        🎜로컬 수정 처리 🎜🎜 구성 파일: 🎜/etc/nginx/nginx.conf🎜
        # /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
        로그인 후 복사
        로그인 후 복사
        🎜4. CPU 선호도🎜🎜🎜CPU 선호도: 🎜프로세스/스레드를 CPU에 바인딩하면 가장 직관적인 이점은 CPU 캐시는 효율성을 높여 메모리 액세스 손실을 줄이고 프로그램 속도를 향상시킵니다. 🎜🎜🎜🎜물리적 CPU 번호: cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l🎜🎜🎜🎜CPU 코어: cat /proc/cpuinfo | grep "cpu cores" | CPU 바인딩 상황: 🎜🎜<code>ps -eo pid,args,psr | grep [n]ginx🎜🎜5. Nginx 일반 구성 최적화🎜rrreee🎜3. 일반적인 악성 동작🎜 🎜🎜🎜크롤링 행위와 악의적인 크롤링 및 리소스 도용🎜🎜🎜🎜🎜기본 안티 핫링크 기능으로 악의적인 사용자가 웹사이트의 외부 데이터를 쉽게 크롤링하는 것을 방지합니다.🎜🎜🎜🎜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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    관련 라벨:
    원천:php.cn
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿
    회사 소개 부인 성명 Sitemap
    PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!