Nginx | nginx 변수 설명 (1)

4466 단어
nginx 설정 에서 변 수 는 하나의 형식의 값 만 저장 할 수 있 습 니 다. 그것 이 바로 문자열 입 니 다.예 를 들 어 nginx. conf 파일 에는:
set $a "hello,world";

set $a hello;
set $b "$a,$a";
  • 사용 표준 ngxrewrite 모듈 도 set 설정 명령 이 $a 에 대해 할당 작업 을 진행 하 였 습 니 다
  • 모든 nginx 변 수 는 nginx 설정 파일 에서 인 용 될 때 $접두사
  • 를 가 져 가 야 합 니 다.
  • 기 존 nginx 변수 값 을 통 해 새로운 변수의 값 을 구성 할 수 있 습 니 다. '변수 삽입 값' 이 라 고 합 니 다.예 를 들 어 위 에서 우 리 는 기 존의 변수 $a 의 값 을 통 해 변수 $b 도 값 을 구성 합 니 다.

  • 전체 인 스 턴 스
    server {
      listen 8080;
    
      location /test {
      set $foo hello;
      echo "foo: $foo";
      }
    }
    

    curl 이라는 HTTP 클 라 이언 트 를 사용 하여 명령 줄 에 이 / test 인 터 페 이 스 를 요청 하면 얻 을 수 있 습 니 다.
    $ curl 'http://localhost:8080/test'
    foo: hello
    

    여기 서 우 리 는 제3자 ngx 를 사용한다.echo 모듈 의 echo 설정 명령 은 현재 요청 한 응답 체 로 $foo 변수의 값 을 출력 합 니 다.echo 명령 은 '변수 삽입 값' 을 지원 합 니 다.
    geo 명령
    만약 우리 가 echo 명령 을 통 해 '달러 문자' ($) 가 함 유 된 문자열 을 직접 출력 하고 싶다 면, 특별한 $문 자 를 전의 할 방법 이 있 습 니까?답 은 부정 적 이다.그러나 '변수 플러그 인' 을 지원 하지 않 는 모듈 설정 명령 을 통 해 $의 Nginx 변 수 를 만 든 다음 echo 에서 이 변 수 를 사용 할 수 있 습 니 다.geo 명령 이 우 리 를 도 울 수 있다.
    geo $dollar {
      default "$";
    }
    server {
      listen 8080;
      location /test {
      echo "This is a dollar sign: $dollar";
      }
    }
    

    테스트 결 과 는 다음 과 같다.
    $ curl 'http://localhost:8080/test'
    This is a dollar sign: $
    

    여기에 표준 모듈 ngx 를 사 용 했 습 니 다.geo 가 제공 하 는 설정 명령 geo 는 변수 $dollar 에 문자열 '$' 를 부여 합 니 다. 그러면 우 리 는 아래 에 달러 부 호 를 사용 해 야 하 는 곳 에서 $dollar 변 수 를 직접 참조 하면 됩 니 다.사실 ngxgeo 모듈 의 가장 일반적인 용법 은 클 라 이언 트 의 IP 주소 에 따라 지정 한 Nginx 변 수 를 할당 하 는 것 입 니 다.
    변수 삽입 값 의 잘못된 의미 문제
    인 용 된 변수 이름 뒤에 변수 이름 의 구성 문자 가 뒤 따 를 때 (예 를 들 어 뒷 굽 자모, 숫자 와 밑줄) 우 리 는 특별한 기법 으로 잘못된 의 미 를 없 애 야 한다.
    server {
      listen 8080;
      location /test {
        set $first "hello ";
        echo "${first}world";
      }
    }
    

    echo 설정 명령 의 매개 변수 값 에서 변 수 를 참조 할 때 $first 뒤에 World 라 는 단 어 를 따 르 기 때문에 '$firstworld' 를 직접 쓰 면 Nginx '변수 플러그 인' 컴 퓨 팅 엔진 은 변 수 를 참조 하 는 $firstworld 로 인식 합 니 다.출력:
    $ curl 'http://localhost:8080/test
    hello world
    

    {} 으로 변 수 를 둘러싸 지 않 으 면 식별 할 수 없습니다. 예 를 들 어
    server {
      listen 8080;
      location /test {
        set $first "hello ";
        echo "$firstworld";
      }
    }
    

    다시 시작 하면 나타 납 니 다.
    nginx: [emerg] unknown "firstworld" variable
    

    변수 생 성
    set 명령 (그리고 앞에서 언급 한 geo 명령) 은 할당 기능 뿐만 아니 라 Nginx 변 수 를 만 드 는 부작용 도 있 습 니 다. 즉, 할당 대상 의 변수 가 존재 하지 않 을 때 이 변 수 를 자동 으로 만 듭 니 다.예 를 들 어 위의 예 에서 $a, $b, $first, $dollar 등 변 수 는 set 나 geo 명령 을 사용 하기 전에 만 들 지 않 았 고 set 명령 을 사용 한 후에 만 들 어 졌 습 니 다.만약 우리 가 만 들 지 않 고 변 수 를 직접 사용한다 면 변 수 를 식별 할 수 없 을 것 이다.
    server {
      listen 8080;
      location /bad {
        echo $foo;
      }
    }
    

    이 때 Nginx 서버 에서 설정 불 러 오 기 를 거부 합 니 다.
    [emerg] unknown "foo" variable
    

    Nginx 변수의 생 성과 할당 작업 은 전혀 다른 시간 단계 에서 발생 합 니 다.Nginx 변수의 생 성 은 Nginx 설정 이 불 러 올 때 만 발생 하거나 Nginx 가 시 작 될 때 만 발생 합 니 다.할당 작업 은 실제 처 리 를 요청 할 때 만 발생 합 니 다.이것 은 변 수 를 만 들 지 않 고 직접 사용 하면 시작 에 실패 할 수 있 음 을 의미 하 며, 또한 우리 가 처 리 를 요청 할 때 동적 으로 새로운 Nginx 변 수 를 만 들 수 없다 는 것 을 의미한다.
    변수의 역할 영역
    Nginx 변수 가 생 성 되면 그 변수 이름 의 보 이 는 범 위 는 전체 Nginx 설정 이 고 서로 다른 가상 호스트 의 server 설정 블록 을 뛰 어 넘 을 수 있 습 니 다.
    server {
      listen 8080;
      location /foo {
        echo "foo = [$foo]";
      }
      location /bar {
        set $foo 32;
        echo "foo = [$foo]";
      }
    }
    

    여기 서 우 리 는 location / bar 에서 set 명령 으로 변수 $foo 를 만 들 었 습 니 다. 따라서 전체 프로필 에서 이 변 수 를 볼 수 있 습 니 다. 따라서 우 리 는 location / foo 에서 이 변 수 를 직접 참조 할 수 있 습 니 다. Nginx 가 잘못 보고 할 까 봐 걱정 하지 않 아 도 됩 니 다.그러나 Nginx 변수 이름 의 보 이 는 범 위 는 전체 설정 이지 만 모든 요청 에 모든 변수의 독립 사본 이 있 거나 각 변수 가 값 을 저장 하 는 용기 의 독립 사본 이 있어 서로 간섭 하지 않 습 니 다.
    $ curl 'http://localhost:8080/foo'
    foo = []
    $ curl 'http://localhost:8080/bar'
    foo = [32]
    $ curl 'http://localhost:8080/foo'
    foo = []
    

    set 명령 은 location / bar 에서 사용 되 기 때문에 할당 작업 은 방문 / bar 요청 에서 만 실 행 됩 니 다.그리고 / foo 인 터 페 이 스 를 요청 할 때 우 리 는 항상 빈 $foo 값 을 얻 습 니 다. 사용자 변수 가 할당 되 지 않 고 출력 하면 빈 문자열 을 얻 을 수 있 습 니 다.따라서 변 수 는 전역 적 으로 생 성 되 고 국부 적 으로 사 용 됩 니 다.즉, 변 수 는 만 들 면 전체 국면 에 존재 하고 다른 모든 요청 에서 만 들 지 않 고 직접 사용 할 수 있 지만 모든 요청 에서 이 변 수 는 독립 적 이 고 독립 적 인 값 이 있 으 며 서로 영향 을 주지 않 습 니 다.

    좋은 웹페이지 즐겨찾기