>  기사  >  백엔드 개발  >  Nginx 시나리오 실습

Nginx 시나리오 실습

不言
不言원래의
2018-05-07 11:05:511435검색

이 글은 주로 참고할만한 가치가 있는 Nginx의 시나리오 실습을 소개합니다. 이제 필요한 친구들이 참고할 수 있습니다

1. 동적 리소스와 정적 리소스로. resources

클라이언트가 요청한 페이지가 정적 웹페이지인 경우 서버는 정적 웹페이지의 콘텐츠로 클라이언트에 직접 응답합니다. 클라이언트가 동적 웹 페이지를 요청하면 서버는 먼저 동적 웹 페이지를 정적 웹 페이지로 바꾼 다음 변환된 정적 웹 페이지를 클라이언트에 응답해야 합니다

여러 유형의 정적 리소스

    브라우저 렌더링 : HTML, CSS, JAVASCRIPT
  • Pictures: JPEG, GIF, PNG...
  • Video: FLV, MPEG...
  • File: TXT, etc. 모든 다운로드 파일
  • 2 , CDN(Content Delivery Network) 콘텐츠 유통 네트워크

데이터 전송 속도와 안정성에 영향을 줄 수 있는 인터넷상의 병목 현상과 링크를 최대한 방지하여 콘텐츠 전송이 더 빠르고 안정적으로 이루어질 수 있도록 하는 것이 기본 개념입니다. CDN 시스템은 네트워크 전체에 노드 서버를 배치하여 기존 인터넷을 기반으로 지능형 가상 네트워크 계층을 형성함으로써 네트워크 트래픽과 각 노드의 연결 및 부하 상태, 사용자와의 거리를 실시간으로 분석할 수 있습니다. 사용자의 요청을 사용자에게 가장 가까운 서비스 노드로 리디렉션하는 응답 시간 및 기타 포괄적인 정보입니다. 그 목적은 사용자가 필요한 콘텐츠를 근처에서 얻을 수 있도록 하고 인터넷 네트워크의 혼잡 상황을 해결하며 사용자의 웹 사이트 액세스 응답 속도를 향상시키는 것입니다.

3. 구성 구문

    sendfile(파일 읽기)
    구성 구문: sendfile on|off;
  • 기본값: 없음
  • 컨텍스트: http, 서버, 위치, 위치에 있는 경우
tcp_nopush(sendfile이 켜져 있을 때 네트워크 패킷의 전송 효율성 향상)
    • 구성 구문: tcp_nopush on|off;
    • 기본값: 없음
    • 컨텍스트: http, , location
    tcp_nodelay(Keepalive 연결 하에서 네트워크 패킷 전송의 실시간 성능 향상)
    • 구성 구문: tcp_nodely on|off;
    • 기본값: 없음
    • 컨텍스트: http , server , Locationigzip(압축)
    구성 문법: gzip on | off
  • 기본값: no
    • Context: http, server, local, if in local
    • gizp_comp_level(압축 비율)
    • 구성 구문: gzip_comp_level 레벨;

    기본값: 없음
  • 컨텍스트: http, 서버, 위치
    • gzip_http_version(gzip_comp_level) http 버전)
    • 구성 구문: gzip_http_version 1.0|1.1;

    기본값: 없음
  • 컨텍스트: http, 서버, 위치
    • gzip_static(사전 읽기 gzip 기능)
    • 구성 구문: gzip_static 켜기|끄기|항상 ;

    기본값: gzip_static off;
  • Context: http, 서버, 위치
    • 4. 브라우저 캐시
    • HTTP 프로토콜에 의해 정의된 캐싱 메커니즘(예: 만료, 캐시 제어, 등)

    • 브라우저 캐시 없음:

    브라우저 요청 → 캐시 없음 → 웹 서버 요청 → 응답 요청, 협상 → 있음

    • 클라이언트에 캐시가 있음

      • 브라우저 요청 → 캐시 → 만료 확인 → 현재

    • 확인 만료 메커니즘

      • 확인 방법
      해당 헤더 정보
    만료 여부 확인 Expires, Cache-Control(max- 나이) 프로토콜의 Etag 헤더 정보 확인EtagLast-Modified에 정보 확인이 있습니다Last-Modified
    • 첫 번째 요청:

    Nginx 시나리오 실습

    • 두 번째 요청:

    Nginx 시나리오 실습

    • 만료(응답 헤더 캐시 추가 -제어, 만료)

      • 구성 구문: [수정된] 시간 만료; epoch |max |off;

      • 기본값: 만료됨;

      • 컨텍스트: http, 서버, 위치, 위치

    5, 교차 사이트 액세스

    방법 Nginx는 사이트 간 액세스를 지원합니까? Access-Controller-Allow-Origin
    • add_header

      • 구성 구문: add_header 이름 값 [항상];

      • 기본값: 없음

      • 컨텍스트: http, 서버, 위치, 위치에 있는 경우

    이름은 Access-Controller-Allow-Origin 및 Access-Controller-Allow-Method

    6일 수 있습니다. 핫링크 방지

    http_refer 안티 핫링크 구성 모듈을 기반으로
    • 구성 구문: valid_referers none|blocked |server_names| 문자열...;

    • 기본값: 없음

    • 컨텍스트: 서버, 위치

    valid_referers none blocked IP
    if($invalid_referer) {
        return 403;
    }

    Reminder: 컬을 사용하여 구성된 안티 리칭을 테스트할 수 있습니다. curl -e "http:www.baidu.com" -I IP


    2 . Nginx를 프록시 서비스로

    • Forward 프록시

      • 객체는 클라이언트입니다(예를 들어 외부 네트워크에 액세스하려는 경우 프록시 서버를 프록시 주소로 설정하면 클라이언트는 모든 웹사이트에 액세스할 수 있습니다). )

    • 역방향 프록시

      • 객체는 서버입니다(어떤 서버에 액세스하는지 신경 쓸 필요가 없습니다. 역방향 프록시는 서버에 배치됩니다. 역방향 프록시는 요청을 처리하는 데 도움이 됩니다. )

    • proxy_pass

      • 구성 구문: Proxy_pass URL

      • 기본값: 없음

      • 위치, 위치에 있는 경우, 제한 제외

    다른 프록시에 대한 일부 구문보충 :
    • proxy_buffering(버퍼)

      • 구문 구성: Proxy_buffering on | off;

      • 기본값: 없음

      • 컨텍스트: http, 서버, 위치

      • 확장: Proxy_buffer_size, Proxy_buffers, Proxy_busy_buffers_size

    • proxy_redirect(점프 리디렉션)

      • 구성 구문: Proxy_redirect 기본값;proxy_redirect off;proxy_redirect 리디렉션 대체;

      • 기본값: 없음

      • 컨텍스트: http, 서버, 위치

    • proxy_set_header(헤더 정보)

      • 구성 구문:proxy_set_header 파일 값;

      • 기본값:proxy_set_header 호스트 $proxy_host;proxy_set_header 연결 종료;

      • 컨텍스트: http, 서버, 위치

      • 확장:proxy_hide_header,proxy_set_body

    • proxy_connect_timeout(시간 초과)

      • 구성 구문:proxy_connect_timeout 시간;

      • 기본값: 없음

      • 컨텍스트: http, 서버, 위치

      • 확장: Proxy_read_timeout, Proxy_send _timeout

    구성 파일 예:
    proxy_pass http://127.0.0.1:8080;
    proxy_redirect default;
    
    proxy_set_header HOST $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    
    proxy_connect_timeout 30;
    proxy_send_timeout 60;
    proxy_read_timeout 60;
    
    proxy_buffer_size 32k;
    proxy_buffering on;
    proxy_buffers 4 128k;
    proxy_busy_buffers_size 256k;
    proxy_max_temp_file_size 256k;

    3. 로드 밸런싱 서비스로서의 Nginx

    로드 밸런싱: 기존 네트워크 구조를 기반으로 구축되어 저렴하고 효과적이며 투명한 확장 방법을 제공합니다. 네트워크 장치 및 서버의 대역폭을 늘리고 처리 용량을 늘리며 네트워크 데이터 처리 기능을 강화하고 네트워크 유연성과 가용성을 향상시킵니다.
    로드 밸런싱(영어 이름은 Load Balance)은 웹 서버, FTP 서버, 기업 핵심 애플리케이션 서버 및 기타 미션 크리티컬 서버 등과 같은 여러 운영 단위에 실행을 할당하여 공동으로 작업을 완료하는 것을 의미합니다.
    • Upstream 语 구성 문법: upstream 이름 {...}
      • 기본적으로: 아니요

      • Context: HTTP

      • 간단한 구성 예
      :
    upstream ronaldo {
            server ip:port [param];
            server ip:port [param];
            server ip:port [param];
    }
    server {
        location / {
            proxy_pass http://ronaldo;
        }
    }

    param参数解释:

    param 意义
    down 当前的server暂时不参与负载均衡
    weight=num 权重,num越大,轮询到的概率越大
    backup 预留的备份服务器
    max_fails 允许请求失败的次数
    fail_timeout 经过max_fails失败后,服务暂停的时间(默认是10s)
    max_conns 限制最大的接收的连接数

    调度算法:

    算法 意义
    轮询 按时间顺序逐一分配到不同的后端服务器
    加权轮询 weight值越大,分配到的访问几率越高
    ip_hash 每个请求按访问IP的hash结果分配,这样来自同一个IP就固定访问同一个后端服务器
    least_conn 最少连接数,哪个服务器连接数少就分发
    url_hash 按照访问的URL的hash结果来分配请求,是每个URL定向到同一个后端服务器
    hash关键字值 hash自定义的key
    • ip_hash:

      • 只需要在upstream中加入 ip_hash; 即可

      • 缺陷:如果走代理,那么remote_addr就不是用户真实的ip

    • url_hash(1.7.2版本以后可用):

      • 配置语法:hash key [consistent];

      • 默认:无

      • Context:upstream

    key可以是$request_uri,根据url进行hash

    四、Nginx作为缓存服务

    1、缓存的类型

    • 服务端缓存。例:memcache、reids

    • 代理缓存。例:Nginx缓存服务端的数据

    • 客户端缓存。

    Nginx 시나리오 실습

    2、常用缓存配置

    • proxy_cache_path

      • 配置语法proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size] [use_temp_path]...

      • 默认:无

      • Context:http

    • proxy_cache

      • 配置语法:proxy_cache zone | off;

      • 默认:proxy_cache off;

      • Context:http,server,location

    • proxy_cache_valid(缓存过期周期)

      • 配置语法:proxy_cache_valid [code...] time

      • 默认:无

      • Context:http、server、location

    • proxy_cache_key(缓存的维度)

      • 配置语法:proxy_cache_key string;

      • 默认:proxy_cache_key $scheme$proxy_host$request_uri;

      • Context:http、server、location

    常见配置:

    proxy_cache_path cache_path levels=1:2 keys_zone=key_name:10m max_size=10g inactive=60m use_temp_path=off;
    
    server {
        loaction / {
            proxy_pass http://ronaldo;
            proxy_cache key_name;
            proxy_cache_valid 200 304 12h;
            proxy_cache_valid any 10m;
            proxy_cache_key $host$uri$is_args$args;
            add_header Nginx-Cache "$upstream_cache_status";
    
            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        }
    }

    2、清除指定缓存

    • rm -rf 缓存目录内容

    • 第三方扩展模块:ngx_cache_purge

    3、如何让部分页面不缓存

    • proxy_no_cache

      • 配置语法:proxy_no_cache string ...;

      • 默认:无

      • Context:http,server,location

    简单示例

    if ($request_uri ~ ^/(url_3|login|register|password\/reset)) {
        set $cookie_nocache 1;
    }
    
    location / {
        proxy_no_cache $cookie_nocache;
    }

    4、大文件分片请求

    • slice

      • 语法配置:slice size;

      • 默认:slice 0;

      • Context:http、server,location

    优势:每个子请求收到的数据都会形成一个独立的文件,一个请求断了,其他请求不受影响。
    缺点:当文件很大或者slice很小的时候,可能会导致文件描述符耗尽等待情况。

    相关推荐:

    关于Nginx的基础内容

    Nginx编译安装Lua模块

    위 내용은 Nginx 시나리오 실습의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.