nginx 변수 사용 방법 상세 설명 (1)
set $a "hello world";
우 리 는 표준 ngx 를 사용 했다.rewrite 모듈 의 set 설정 명령 은 변수 $a 에 대해 할당 작업 을 했 습 니 다.특히 우 리 는 문자열 hello World 를 부 여 했 습 니 다.우 리 는 Nginx 변수 이름 앞 에 $기호 가 있 는 것 을 보 았 습 니 다. 이것 은 표기 법의 요구 입 니 다.모든 Nginx 변 수 는 Nginx 설정 파일 에서 참조 할 때 $접 두 사 를 가 져 와 야 합 니 다.이런 표현 방법 은 Perl, PHP 등 언어 와 비슷 하 다.$이러한 변수 접두사 수식 은 정통 자바 와 C \ # 프로그래머 를 불편 하 게 하지만 이러한 표현 방법의 장점 도 분명 합 니 다. 즉, 변 수 를 문자열 상수 에 직접 삽입 하여 새로운 문자열 을 만 들 수 있 습 니 다.set $a hello;
set $b "$a, $a";
여기 서 우 리 는 기 존의 Nginx 변수 $a 의 값 을 통 해 변수 $b 의 값 을 구성 합 니 다. 그래서 이 두 명령 순서 가 실 행 된 후에 $a 의 값 은 hello 이 고 $b 의 값 은 hello 입 니 다. 이런 기술 은 Perl 세계 에서 '변수 삽입 값' (variable interpolation) 이 라 고 불 리 며 전문 적 인 문자열 연결 연산 자 를 더 이상 필요 로 하지 않 게 합 니 다.우 리 는 이곳 에서 도 이 용 어 를 채택 해도 무방 하 다.우 리 는 비교적 완전한 설정 예 시 를 보 았 다.server {
listen 8080;
location /test {
set $foo hello;
echo "foo: $foo";
}
}
이 예 는 nginx. conf 설정 파일 의 가장 바깥쪽 http 설정 블록 과 events 설정 블록 을 생략 합 니 다.curl 이라는 HTTP 클 라 이언 트 를 사용 하여 명령 줄 에 이 / test 인 터 페 이 스 를 요청 하면 얻 을 수 있 습 니 다.$ curl 'http://localhost:8080/test'
foo: hello
여 기 는 제3자 ngx 를 사용 합 니 다.echo 모듈 의 echo 설정 명령 은 현재 요청 한 응답 체 로 $foo 변수의 값 을 출력 합 니 다.echo 설정 명령 의 인자 도 '변수 삽입 값' 을 지원 하 는 것 을 보 았 습 니 다.그러나 모든 설정 명령 이 '변수 플러그 인' 을 지원 하 는 것 은 아니다.사실상 명령 파라미터 가 '변수 삽입 값' 을 허용 하 는 지 여 부 는 이 명령 의 실현 모듈 에 달 려 있다.만약 우리 가 echo 명령 을 통 해 '달러 문자' ($) 가 함 유 된 문자열 을 직접 출력 하고 싶다 면, 특별한 $문 자 를 전의 할 방법 이 있 습 니까?정 답 은 부정 적 이다.그러나 다행히도 우 리 는 이 제한 을 돌 릴 수 있 습 니 다. 예 를 들 어 '변수 플러그 인' 을 지원 하지 않 는 모듈 설정 명령 을 통 해 $의 Nginx 변 수 를 구성 한 다음 에 echo 에서 이 변 수 를 사용 할 수 있 습 니 다.아래 의 이 예 를 보 세 요.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 변 수 를 할당 하 는 것 입 니 다. 여 기 는 '무조건' 으로 우리 의 $dollar 변수 에 '달러 문자' 라 는 값 을 부여 할 수 있 도록 빌려 쓰 는 것 입 니 다.'변수 삽입 값' 의 상하 문 에 또 하나의 특수 한 상황 이 있다. 즉, 인 용 된 변수 이름 뒤에 변수 이름 의 구성 문자 가 붙 어 있 을 때 (예 를 들 어 뒷 굽 자모, 숫자 와 밑줄) 우 리 는 특별한 기법 을 사용 하여 잘못된 의 미 를 없 애 야 한다. 예 를 들 어:server {
listen 8080;
location /test {
set $first "hello ";
echo "${first}world";
}
}
여기 서 echo 설정 명령 의 매개 변수 값 에서 변 수 를 참조 할 때 $first 뒤에 World 라 는 단 어 를 따 르 기 때문에 '$firstworld' 를 직접 쓰 면 Nginx '변수 삽입 값' 컴 퓨 팅 엔진 은 변 수 를 참조 한 $firstworld 로 인식 하여 이 문 제 를 해결 합 니 다.Nginx 의 문자열 표기 법 은 $다음 에 변수 이름 을 둘러싸 는 것 을 지원 합 니 다. 예 를 들 어 ${first}. 위의 출력 은:$ curl 'http://localhost:8080/test
hello world
set 명령 (그리고 앞에서 언급 한 geo 명령) 은 할당 기능 뿐만 아니 라 Nginx 변 수 를 만 드 는 부작용 도 있 습 니 다. 즉, 할당 대상 의 변수 가 존재 하지 않 을 때 이 변 수 를 자동 으로 만 듭 니 다.예 를 들 어 위의 이 예 에서 $a 라 는 변수 가 생 성 되 지 않 으 면 set 명령 은 $a 라 는 사용자 변 수 를 자동 으로 생 성 합 니 다.만약 우리 가 만 들 지 않 고 그것 의 값 을 직접 사용한다 면, 잘못 보고 할 것 이다.예컨대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 명령 으로 변 수 를 만 들 었 습 니 다. 그래서 전체 프로필 에서 이 변 수 를 볼 수 있 습 니 다. 따라서 우 리 는 location / foo 에서 이 변 수 를 직접 참조 할 수 있 습 니 다. Nginx 가 잘못 보고 할 까 봐 걱정 하지 않 아 도 됩 니 다.다음은 명령 행 에서 두 인터페이스 에 curl 도구 로 접근 한 결과 입 니 다.$ 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 값 을 얻 습 니 다. 사용자 변수 가 할당 되 지 않 고 출력 하면 빈 문자열 을 얻 을 수 있 습 니 다.이 예 에서 볼 수 있 는 또 다른 중요 한 특징 은 Nginx 변수 이름 의 보 이 는 범 위 는 전체 설정 이지 만 모든 요청 에 모든 변수의 독립 사본 이 있 거나 각 변수 가 값 을 저장 하 는 용기 의 독립 사본 이 있어 서로 간섭 하지 않 는 다 는 것 이다.예 를 들 어 앞에서 우리 가 / bar 인 터 페 이 스 를 요청 한 후에 $foo 변 수 는 값 32 를 부 여 받 았 지만 / foo 인터페이스 에 대한 요청 에 대응 하 는 $foo 값 (이것 은 여전히 비어 있 습 니 다!) 에 영향 을 주지 않 습 니 다. 각 요청 은 독립 된 $foo 변수의 사본 이 있 기 때 문 입 니 다.Nginx 초보 자 에 게 가장 흔히 볼 수 있 는 오류 중 하 나 는 Nginx 변 수 를 요청 간 에 전역 적 으로 공유 하 는 것 으로 이해 하거나 '전역 변수' 라 고 말 하 는 것 이다.사실상 Nginx 변수의 생명 기 는 요청 경 계 를 뛰 어 넘 을 수 없습니다.문장http://blog.sina.com.cn/s/blog_6d579ff40100wi7p.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단! Certbot을 사용하여 웹 사이트를 SSL(HTTPS)화하는 방법초보자가 인프라 주위를 정돈하는 것은 매우 어렵습니다. 이번은 사이트를 간단하게 SSL화(HTTP에서 HTTPS통신)로 변경하는 방법을 소개합니다! 이번에는 소프트웨어 시스템 Nginx CentOS7 의 환경에서 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.