Nginx | nginx 변수 설명 (1)
set $a "hello,world";
set $a hello;
set $b "$a,$a";
전체 인 스 턴 스
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 값 을 얻 습 니 다. 사용자 변수 가 할당 되 지 않 고 출력 하면 빈 문자열 을 얻 을 수 있 습 니 다.따라서 변 수 는 전역 적 으로 생 성 되 고 국부 적 으로 사 용 됩 니 다.즉, 변 수 는 만 들 면 전체 국면 에 존재 하고 다른 모든 요청 에서 만 들 지 않 고 직접 사용 할 수 있 지만 모든 요청 에서 이 변 수 는 독립 적 이 고 독립 적 인 값 이 있 으 며 서로 영향 을 주지 않 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.