Nginx map 사용 설명

map 명령 소개:
map 명령 은 ngxhttp_map_module 모듈 에서 제공 합 니 다. 기본적으로 nginx 를 설치 하면 이 모듈 을 설치 합 니 다.
map 의 주요 역할 은 사용자 정의 변 수 를 만 드 는 것 입 니 다. nginx 의 내 장 된 변 수 를 사용 하여 특정한 규칙 과 일치 합 니 다. 일치 하 는 데 성공 하면 사용자 정의 변 수 를 설정 합 니 다.이 사용자 정의 변 수 는 다른 용도 로 도 사용 할 수 있다.
직접 예 를 들 어 이해 하기 가 비교적 뚜렷 하 다.
  • 장면: 요청 url 의 인자 와 일치 합 니 다. debug 인 자 는 $foo = 1 을 설정 하고 기본 값 은 $foo = 0
  • 을 설정 합 니 다.
    map $args $foo {
        default 0;
        debug   1;
    }

    설명:
    $args 는 nginx 내 장 된 변수 입 니 다. 요청 url 의 인자 입 니 다.$args 가 debug 에 일치 하면 $foo 의 값 은 1 로 설 정 됩 니 다. $args 가 하나 도 일치 하지 않 으 면 $foo 는 default 정의 값 입 니 다. 여기 서 0 입 니 다.
    map 문법
    map $var1 $var2 {...}
    

    map 명령 의 세 가지 인자:
    1. default: 원본 변수 가 표현 식 과 일치 하지 않 을 때 사용 할 기본 값 을 지정 합 니 다.default 이 설정 되 어 있 지 않 으 면 빈 문자열 을 기본 결과 로 사용 합 니 다.
    2. hostnames: 접두사 나 접두사 마스크 로 도 메 인 이름 을 원본 변수 값 으로 지정 할 수 있 습 니 다.이 매개 변 수 는 값 맵 목록 의 맨 앞 에 써 야 합 니 다.
    3. include: 맵 값 이 있 는 파일 을 하나 이상 포함 합 니 다.
  • Nginx 프로필 의 역할 세그먼트: http {}, map 를 server {} 에 쓰 지 않도록 주의 하 십시오. 그렇지 않 으 면 오류 가 발생 합 니 다
  • map 의 $var 1 은 원본 변수 입 니 다. 일반적으로 nginx 의 내장 변수 일 수 있 습 니 다. $var 2 는 사용자 정의 변수 입 니 다. $var 2 의 값 은 $var 1 이 대응 하 는 표현 식 의 일치 상황 에 달 려 있 습 니 다.하나 도 일치 하지 않 으 면 $var 2 는 default 에 대응 하 는 값 입 니 다.
  • 정규 표현 식 이 '~' 로 시작 하면 이 정규 표현 식 이 대소 문자 에 민감 하 다 는 것 을 나타 낸다."~ *" 로 시작 하여 이 정규 표현 식 은 대소 문자 에 민감 하지 않 음 을 나타 낸다.
  • map $http_user_agent $agent {
        default "";
        ~curl curl;
        ~*apachebench" ab;
    }    
  • 정규 표현 식 에는 캡 처 와 위치 캡 처 를 포함 할 수 있 습 니 다. 이 변 수 는 결과 변수 와 함께 다른 명령 에 사용 할 수 있 습 니 다.
  • map $uri $value {
        /abc                       /index.php;
        ~^/teacher/(?.*)$  /boy/;
        ~/fz(/.*)                  /index.php?fz=1;                           
    }

    = = 주의: 맵 블록 에서 이름 캡 처 나 위치 캡 처 변 수 를 참조 할 수 없습니다.예 를 들 어 ~ ^ / qupeicom / (. *) / peyin / $1;이렇게 하면 nginx: [emerg] unknown variable = =
    = = 주의 2: 원본 변수 값 에 '~' 와 같은 특수 문자 가 포함 되 어 있 으 면 '\' 로 의 미 를 바 꿔 야 합 니 다. = =
    map $http_referer $value {
        Mozilla    111;
        \~Mozilla  222;
    }
  • 소스 변수 가 표현 식 에 대응 하 는 결과 값 은 문자열 일 수도 있 고 다른 변수 일 수도 있 습 니 다.
  • map $http_referer $value {
        Mozilla    'chrom';
        \~safity    $http_user_agent;

    인 스 턴 스 (1)
  • 맵 을 사용 하여 여러 도 메 인 이름 의 크로스 도 메 인 접근 을 허용 하 는 문제
  • 단일 도 메 인 이름 의 크로스 도 메 인 접근 을 허용 하면 됩 니 다. 다음 과 같 습 니 다.
    #          http{}    server{}      。
    add_header Access-Control-Allow-Origin "http://www.tutu.com";
    add_header Access-Control-Allow-Methods "POST, GET, PUT, OPTIONS, DELETE";
    add_header Access-Control-Max-Age "3600";
    add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept;
    
    #!/bin/bash
    #          http://www.tutu.com     ,                  。           ,        ,     
    add_header Access-Control-Allow-Origin "*";
    

    모든 것 을 허용 하지 않 으 려 면 도 메 인 이름 을 여러 개 허용 해 야 합 니 다. map 가 필요 합 니 다.
    map $http_origin $corsHost {
        default 0;
        "~http://www.haibakeji.com" http://www.haibakeji.com;
        "~http://m.haibakeji.com" http://m.haibakeji.com;
        "~http://wap.haibakeji.com" http://wap.haibakeji.com;
    }
    server
    {
        listen 80;
        server_name www.haibakeji.com;
        root /nginx;
        location /
        {
            add_header Access-Control-Allow-Origin $corsHost;
        }
    }

    인 스 턴 스 (2)
  • 원본 변 수 를 사용 합 니 다 (일반적으로 nginx 내장 변수). 일부 규칙 과 일치 하여 사용자 정의 변 수 를 만 든 다음 페이지 에서 출력 합 니 다. 이것 은 디 버 깅 할 때 매우 유용 합 니 다
    http {
    map $uri $match {
        ~^/hello/(.*) http://www.hello.com/;
    }
    server {
        listen       8080;
        server_name  test.hello.com;
    
        location /hello {
                default_type text/plain;
                echo uri: $uri;
                echo match: $match;
                echo capture: $1;
                echo new: $match$1;
        }
  • 질문
    질문 이 있 을 수 있 습 니 다. map 는 http 세그먼트 에 만 사용 할 수 있 으 니 전체 적 인 것 입 니 다.이 설정 은 모든 가상 호스트 에 접근 하 는 요청 을 일치 시 키 고 변 수 를 설정 합 니 다. 그러나 사실은 그렇지 않 습 니 다. 관련 변 수 를 사용 하지 않 은 요청 에 있어 서 map 작업 을 수행 하지 않 습 니 다.성능 상의 손실 은 없다.
    질문
    마스크 와 정규 가 동시에 일치 하 는 등 여러 개의 특정한 변수 와 일치 하면 다음 순서대로 선택 합 니 다.
  • 마스크 가 없 는 문자열
  • 가장 긴 접두사 가 있 는 문자열, 예 를 들 어 "*. example. com"
  • 가장 긴 접미사 문자열, 예 를 들 어 "mail. *"
  • 순서대로 첫 번 째 로 일치 하 는 정규 표현 식 (설정 파일 에 나타 난 순서)
  • 기본 값
  • map_hash_bucket_size
  • 문법: maphash_bucket_size size;
  • 기본 값: maphash_bucket_size 32|64|128;
  • 설정 단계: http
  • 매 핑 테이블 의 변 수 를 해시 테이블 의 최대 값 으로 지정 합 니 다. 이 값 은 프로세서 의 캐 시 에 달 려 있 습 니 다.
  • map_hash_max_size
  • 문법: maphash_max_size size;
  • 기본 값: maphash_max_size 2048;
  • 설정 단계: http
  • 맵 에 대응 하 는 해시 표 의 최대 치 를 설정 합 니 다.
  • 좋은 웹페이지 즐겨찾기