nginx location 및 rewrite 재 설정
하나의 예시:
location = / {
# / ,
[ configuration A ]
}
location / {
# / ,
#
[ configuration B ]
}
location /documents/ {
# /documents/ , ,
# ,
[ configuration C ]
}
location ~ /documents/Abc {
# /documents/ , ,
# ,
[ configuration CC ]
}
location ^~ /images/ {
# /images/ , , , 。
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
# gif,jpg jpeg
# , /images/ config D , ^~
[ configuration E ]
}
location /images/ {
# /images/, , ^~
[ configuration F ]
}
location /images/abc {
# /images/abc, , ^~
# F G
[ configuration G ]
}
location ~ /images/abc/ {
# config D : config G , , ,
[ configuration H ]
}
location ~* /js/.*/\.js
=
시작 은 A 에서 루트 디 렉 터 리 의 끝 에 만 일치 하 는 요청 과 정확하게 일치 하 는 것 을 표시 합 니 다. 그 다음 에는 문자열 을 가 져 갈 수 없습니다.^~
시작 은 uri 가 일반적인 문자열 로 시작 하 는 것 이지 정규 일치 가 아 닙 니 다 위의 일치 결 과 는 위의 location 에 따라 작성 하고 아래 의 일치 예제 가 성립 됩 니 다.
, , :
# , , , 。
# ,
#
location = / {
proxy_pass http://tomcat:8080/index
}
# , nginx http
# , ,
location ^~ /static/ {
root /webroot/static/;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
root /webroot/res/;
}
# ,
# ,
# , .php,.jsp
location / {
proxy_pass http://tomcat:8080/
}
http://tengine.taobao.org/book/chapter_02.html http://nginx.org/en/docs/http/ngx_http_rewrite_module.html
재 작성 규칙
rewrite 기능 은 nginx 가 제공 하 는 전역 변수 나 자신 이 설정 한 변 수 를 사용 하여 정규 표현 식 과 표지 위 치 를 결합 하여 url 재 작성 과 재 설정 을 실현 하 는 것 입 니 다.rewrite 는 server {}, location {}, if {} 에 만 놓 을 수 있 고 도 메 인 이름 뒤에 전 달 된 매개 변 수 를 제외 한 문자열 에 만 작용 할 수 있 습 니 다. 예 를 들 어
http://seanlook.com/a/we/index.php?id=1&u=str
는 / a / we / index. php 에 만 다시 쓸 수 있 습 니 다.문법 rewrite regex replacement [flag];
도 메 인 이름 이나 매개 변수 문자열 에 대응 하면 전역 변 수 를 사용 할 수도 있 고 proxy 를 사용 할 수도 있 습 니 다.패스 역방향 에이전트.rewrite 와 location 기능 이 비슷 하고 모두 점프 를 실현 할 수 있 음 을 나타 낸다. 주요 차이 점 은 rewrite 는 같은 도 메 인 이름 에서 자원 을 얻 는 경 로 를 변경 하 는 것 이 고 location 은 같은 경 로 를 제어 하거나 역방향 대 리 를 할 수 있 으 며 proxy다른 기계 로 패스 하 다.rewrite 도 location 에 쓰 이 는 경우 가 많 습 니 다. 실행 순 서 는:
플래그 위치
last
: Apache 에 해당 하 는 [L] 태그, rewrite 완료 break
: 현재 가상 호스트 의 후속 rewrite 명령 집합 실행 정지 redirect
: 302 임시 방향 을 되 돌려 주 고 주소 표시 줄 에 점프 후의 주소 permanent
: 301 을 되 돌려 영구적 으로 방향 을 바 꾸 면 주소 표시 줄 에 점프 후의 주소 가 표 시 됩 니 다 if 판단 명령 문법
if(condition){...}
으로 주어진 조건 condition 을 판단 합 니 다.만약 사실 이 라면, 대괄호 안에 있 는 rewrite 명령 이 실 행 될 것 입 니 다. if 조건 (conditon) 은 다음 과 같은 내용 일 수 있 습 니 다.=
또는 !=
~
정규 표현 식 일치, ~*
대소 문자 의 일치, !~
대소 문자 의 일치 하지 않 음 -f
과 !-f
파일 존재 여 부 를 판단 하 는 데 사용 -d
과 !-d
파일 존재 여 부 를 판단 하 는 데 사용 -e
, !-e
파일 실행 여 부 를 판단 하 는 데 사용 -x
예 를 들 면:if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msie/$1 break;
} // UA "MSIE",rewrite /msid/
if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
set $id $1;
} // cookie , $id
if ($request_method = POST) {
return 405;
} // POST, 405(Method not allowed)。return 301,302
if ($slow) {
limit_rate 10k;
} // ,$slow set
if (!-f $request_filename){
break;
proxy_pass http://127.0.0.1;
} // , localhost 。 break rewrite
if ($args ~ post=140){
rewrite ^ http://example.com/ permanent;
} // query string "post=140", example.com
location ~* \.(gif|jpg|png|swf|flv)$ {
valid_referers none blocked www.jefflei.com www.leizhenfang.com;
if ($invalid_referer) {
return 404;
} //
}
전역 변수 아래 는 if 로 판단 할 수 있 는 전역 변수 입 니 다.
!-x
: \ # 이 변 수 는 요청 줄 의 인자 와 같 습 니 다. $args
$query_string
: 요청 헤더 의 Content - length 필드 입 니 다.$content_length
: 요청 헤더 의 Content - Type 필드 입 니 다.$content_type
: 현재 루트 명령 에서 지정 한 값 을 요청 합 니 다.$document_root
: 호스트 헤드 필드 를 요청 합 니 다. 그렇지 않 으 면 서버 이름 입 니 다.$host
: 클 라 이언 트 에이전트 정보 $http_user_agent
: 클 라 이언 트 쿠키 정보 $http_cookie
: 이 변 수 는 연결 속 도 를 제한 할 수 있 습 니 다.$limit_rate
: 클 라 이언 트 가 요청 한 동작 은 보통 GET 또는 POST 입 니 다.$request_method
: 클 라 이언 트 의 IP 주소.$remote_addr
: 클 라 이언 트 의 포트.$remote_port
: Auth Basic Module 에서 검 증 된 사용자 이름 입 니 다.$remote_user
: 현재 요청 한 파일 경 로 는 루트 나 alias 명령 과 URI 요청 으로 생 성 됩 니 다.$request_filename
: HTTP 방법 (예: http, https).$scheme
: 사용 을 요청 하 는 프로 토 콜 은 보통 HTTP / 1.0 또는 HTTP / 1.1 입 니 다.$server_protocol
: 서버 주 소 는 시스템 호출 을 완료 한 후에 이 값 을 확인 할 수 있 습 니 다.$server_addr
: 서버 이름.$server_name
: 서버 에 도착 할 포트 번 호 를 요청 합 니 다.$server_port
: 요청 매개 변 수 를 포함 하 는 원본 URI 입 니 다. 예 를 들 어 "/ foo / bar. php? arg = baz" 와 같은 호스트 이름 은 포함 되 지 않 습 니 다.$request_uri
: 요청 인자 가 없 는 현재 URI, $uri 는 호스트 이름 을 포함 하지 않 습 니 다. 예 를 들 어 "/ foo / bar. html".$uri
: $uri 와 같 습 니 다.예:
$document_uri
$host: localhost $serverport:88 $request_uri:http://localhost:88/test1/test2/test.php $document_uri:/test1/test2/test.php $document_root:/var/www/html $request_filename:/var/www/html/test1/test2/test.php 정규
http://localhost:88/test1/test2/test.php
: 줄 바 꿈 자 를 제외 한 임의의 문자 와 일치 합 니 다 .
: 0 회 또는 1 회 반복 ?
: 한 번 반복 하거나 여러 번 반복 +
: 0 회 이상 반복 *
: 일치 하 는 숫자 \d
: 일치 하 는 문자열 의 시작 ^
: 문자열 에 대한 소개 $
: n 회 반복 {n}
: n 회 이상 반복 {n,}
: 단일 문자 c [c]
: a - z 소문 자 와 일치 하 는 임의의 하나 [a-z]
사이 에 일치 하 는 내용 은 뒤에서 ()
를 통 해 인용 할 수 있 으 며, $1
는 앞의 두 번 째 $2
안의 내용 을 나타 낸다.정규 안에 곤 혹 스 러 운 것 은 ()
전의 특수 문자 다.인 스 턴 스 다시 쓰기
예 1:
http {
# image
log_format imagelog '[$time_local] ' $image_file ' ' $image_type ' ' $body_bytes_sent ' ' $status;
#
rewrite_log on;
server {
root /home/www;
location / {
#
error_log logs/rewrite.log notice;
# ‘’ , {}
rewrite '^/images/([a-z]{2})/([a-z0-9]{5})/(.*)\.(png|jpg|gif)$' /data?file=$3.$4;
# “last” , set
set $image_file $3;
set $image_type $4;
}
location /data {
# ,
access_log logs/images.log mian;
root /data/images;
# 。 , , url
try_files /$arg_file /image404.html;
}
location = /image404.html {
#
return 404 "image not found
";
}
}
예 를 들 어
\
에 대한 요청 은 다시 쓰기 /images/ef/uh7b3/test.png
에 일치 합 니 다. /data?file=test.png
파일 저장 이 존재 하지 않 습 니 다. 존재 하면 정상적으로 응답 합 니 다. 존재 하지 않 으 면 try files 를 새로운 image 404 location 에 다시 쓰 고 404 상태 코드 를 되 돌려 줍 니 다.예 2:
rewrite ^/images/(.*)_(\d+)x(\d+)\.(png|jpg|gif)$ /resizer/$1.$4?width=$2&height=$3? last;
예 를 들 어
location /data
파일 요청 을 /data/images/test.png
주소 로 다시 쓰 고 location 과 일치 하 는 것 을 계속 시도 합 니 다.전재 하 다https://segmentfault.com/a/1190000002797606
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.