목차
Nginx-Architecture
1. Nginx FAQ
1. 동일한 server_name을 가진 여러 가상 호스트가 우선적으로 액세스합니다
2. 위치 일치 우선순위
3. Nginx의 try_files 사용
4. Nginx의 별칭과 루트
5 .무엇을 use 이 방법은 사용자의 실제 IP 주소를 전달합니다
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의 별칭과 루트

  • 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 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

    시각적 웹 개발 도구

    SublimeText3 Mac 버전

    SublimeText3 Mac 버전

    신 수준의 코드 편집 소프트웨어(SublimeText3)

    Nginx에서 클라우드 서버 도메인 이름을 구성하는 방법 Nginx에서 클라우드 서버 도메인 이름을 구성하는 방법 Apr 14, 2025 pm 12:18 PM

    클라우드 서버에서 nginx 도메인 이름을 구성하는 방법 : 클라우드 서버의 공개 IP 주소를 가리키는 레코드를 만듭니다. Nginx 구성 파일에 가상 호스트 블록을 추가하여 청취 포트, 도메인 이름 및 웹 사이트 루트 디렉토리를 지정합니다. Nginx를 다시 시작하여 변경 사항을 적용하십시오. 도메인 이름 테스트 구성에 액세스하십시오. 기타 참고 : HTTPS를 활성화하려면 SSL 인증서를 설치하고 방화벽에서 포트 80 트래픽을 허용하고 DNS 해상도가 적용되기를 기다립니다.

    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와 같은 타사 도구를 사용하십시오.

    Docker 컨테이너의 이름을 확인하는 방법 Docker 컨테이너의 이름을 확인하는 방법 Apr 15, 2025 pm 12:21 PM

    단계를 따르면 Docker 컨테이너 이름을 쿼리 할 수 ​​있습니다. 모든 컨테이너 (Docker PS)를 나열하십시오. 컨테이너 목록을 필터링합니다 (GREP 명령 사용). 컨테이너 이름 ( "이름"열에 위치)을 가져옵니다.

    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. 구성을 테스트하고 웹 사이트를보십시오. SSL을 선택적으로 활성화하고 SSL 인증서를 구성하십시오. 포트 80 및 443 트래픽을 허용하도록 방화벽을 선택적으로 설정하십시오.

    nginx 서버를 시작하는 방법 nginx 서버를 시작하는 방법 Apr 14, 2025 pm 12:27 PM

    Nginx 서버를 시작하려면 다른 운영 체제에 따라 다른 단계가 필요합니다. Linux/Unix System : 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 [Mirror Name] 2. 컨테이너 만들기 : Docker Run [옵션] [미러 이름] [명령] 3. 컨테이너 시작 : Docker Start [컨테이너 이름]

    Docker가 컨테이너를 시작하는 방법 Docker가 컨테이너를 시작하는 방법 Apr 15, 2025 pm 12:27 PM

    Docker Container Startup 단계 : 컨테이너 이미지를 당기기 : "Docker Pull [Mirror Name]"을 실행하십시오. 컨테이너 생성 : "docker"[옵션] [미러 이름] [명령 및 매개 변수]를 사용하십시오. 컨테이너를 시작하십시오 : "Docker start [컨테이너 이름 또는 ID]"를 실행하십시오. 컨테이너 상태 확인 : 컨테이너가 "Docker PS"로 실행 중인지 확인하십시오.

    See all articles