Nginx 설정 location 총화 및 rewrite 규칙 작성
하나의 예시:
1
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 가 정규 일치 가 아 닌 일반적인 문자열 로 시작 하 는 것 을 나타 낸다 ~ 첫머리 는 대소 문 자 를 구분 하 는 정규 일치 임 을 나타 낸다. ~ * 첫머리 는 대소 문 자 를 구분 하지 않 는 정규 일치 / 공통 일치, 다른 일치 가 없 으 면 모든 요청 이 일치 합 니 다 순서 no 우선 순위: (location =) > (location 전체 경로) > (location ^ ~ 경로) > (location ~, ~ * 정규 순서) > (location 부분 시작 경로) > (/)
위의 일치 결 과 는 위의 location 에 따라 작성 하고 아래 의 일치 예제 가 성립 됩 니 다.
/ - > config A 가 정확하게 일치 합 니 다. / index. html 도 일치 하지 않 습 니 다 / downloads / download. html - > config B 가 B 와 일치 한 후 아래 에 일치 하 는 것 이 없 으 며 B 를 사용 합 니 다.
/ images / 1. gif - > configuration D 는 F 와 일치 하고, 아래로 D 와 일치 하 며, 아래로 정지 / images / abc / def - > config D 는 G 와 가장 길 게 일치 합 니 다. D 와 아래로 일치 합 니 다. 멈 추 면 / images / 로 시작 하 는 모든 것 이 D 와 일치 하고 멈 추 는 것 을 볼 수 있 습 니 다. FG 는 여기에 쓰 여 있 는 것 은 아무런 의미 가 없습니다. H 는 영원히 돌아 갈 수 없습니다. 여 기 는 일치 하 는 순 서 를 설명 하기 위해 서 입 니 다 / documents / document. html - > config C 가 C 에 일치 하고 아래 에 일치 하지 않 으 며 C 를 사용 합 니 다.
/ documents / 1. jpg - > configuration E 가 C 에 일치 하고 아래 정규 가 E 에 일치 합 니 다.
/ documents / Abc. jpg - > config CC 는 C 까지 최 장 일치 하 며, 아래 정규 순 서 는 CC 까지 일치 하 며, E 까지 내 려 가지 않 습 니 다 실제 사용 제안
1
, , :
# , , , 。
# ,
#
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
2. 재 작성 규칙
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 에 쓰 이 는 경우 가 많 습 니 다. 실행 순 서 는:
server 블록의 rewrite 명령 실행 실행 위치 일치 선택 한 location 의 rewrite 명령 실행 이 중 한 단계 URI 가 재 작성 되면 실제 존재 하 는 파일 을 찾 을 때 까지 1 - 3 을 다시 반복 합 니 다.10 회 이상 순환 하면 500 내부 서버 오류 로 돌아 갑 니 다.
2.1 flag 표지 위치
last
: Apache 에 해당 하 는 [L] 태그, rewrite 완료 break
: 현재 가상 호스트 의 후속 rewrite 명령 집합 실행 중지 redirect
: 302 임시 방향 을 바 꾸 면 주소 표시 줄 에 점프 후의 주소 가 표 시 됩 니 다 permanent
: 301 영구적 으로 방향 을 바 꾸 면 주소 표시 줄 에 점프 후의 주소 가 표 시 됩 니 다 301 과 302 는 상태 코드 만 간단하게 되 돌 릴 수 없고 방향 을 바 꾸 는 URL 도 있어 야 하기 때문에 return 명령 이 301, 302 로 돌아 갈 수 없 는 이유 입 니 다.여기 last 와 break 의 차 이 는 이해 하기 어렵다.last 는 보통 server 와 if 에 쓰 이 고 break 는 location 에 사용 합 니 다 last 재 작성 후의 url 매 칭 을 중지 하지 않 습 니 다. 즉, 새로운 url 은 server 에서 일치 하 는 절 차 를 한 번 더 걷 고 break 는 재 작성 후의 매 칭 을 중지 합 니 다 break 와 last 는 뒤의 rewrite 명령 을 계속 수행 할 수 있 습 니 다 2.2 if 명령 과 전역 변수
if 판단 명령 문법
if(condition){...}
으로 주어진 조건 condition 을 판단 합 니 다.만약 사실 이 라면, 대괄호 안에 있 는 rewrite 명령 이 실 행 될 것 입 니 다. if 조건 (conditon) 은 다음 과 같은 내용 일 수 있 습 니 다.표현 식 이 하나의 변수 일 때 값 이 비어 있 거나 0 으로 시작 하 는 문자열 이 모두 false 로 간 주 됩 니 다.
변수 와 내용 을 직접 비교 할 때 사용
=
또는 !=
~
정규 표현 식 일치, ~*
대소 문자 의 일치, !~
대소 문자 의 일치 하지 않 음 -f
과 !-f
파일 존재 여 부 를 판단 하 는 데 사용 -d
과 !-d
파일 존재 여 부 를 판단 하 는 데 사용 -e
, !-e
파일 실행 여 부 를 판단 하 는 데 사용 -x
예 를 들 면:1
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 2.3 상용 정규
http://localhost:88/test1/test2/test.php
: 줄 바 꿈 자 를 제외 한 임의의 문자 일치 .
: 0 회 또는 1 회 반복 ?
: 1 회 이상 반복 +
: 0 회 이상 반복 *
:일치 하 는 숫자 \d
: 일치 하 는 문자열 의 시작 ^
: 문자열 에 대한 소개 $
: n 회 반복 {n}
: n 회 이상 반복 {n,}
: 단일 문자 c 일치 [c]
: a - z 소문 자 와 일치 하 는 임의의 하나 소괄호 [a-z]
사이 에 일치 하 는 내용 은 뒤에서 ()
를 통 해 인용 할 수 있 으 며, $1
는 앞의 두 번 째 $2
안의 내용 을 나타 낸다.정규 안에 곤 혹 스 러 운 것 은 ()
전의 특수 문자 다.2.4 인 스 턴 스 재 작성
예 1:
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:
1
rewrite ^/images/(.*)_(\d+)x(\d+)\.(png|jpg|gif)$ /resizer/$1.$4?width=$2&height=$3? last;
예 를 들 어
location /data
파일 요청 을 /data/images/test.png
주소 로 다시 쓰 고 location 과 일치 하 는 것 을 계속 시도 합 니 다.만나다 ssl 부분 페이지 암호 화 。
레 퍼 런 스
http://www.nginx.cn/216.html
http://www.ttlsa.com/nginx/nginx-rewriting-rules-guide/
노승 시리즈 nginx 의 rewrite 규칙 빠 른 시작 http://fantefei.blog.51cto.com/2229719/919431
다음으로 이동:http://seanlook.com/2015/05/17/nginx-location-rewrite/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.