Understand Nginx Redirect

4297 단어
nginx 의 퍼 가기 모듈 ngx_http_rewrite_module 은 다음 과 같은 명령 을 포함한다.
break if return rewrite rewrite_log set uninitialized_variable_warn
break
break 명령 은 현재 ngx 를 정지 하 는 데 사 용 됩 니 다.http_rewrite_module 명령 집합 (current set of ngx http rewrite module directives).
예 를 들 면:
if ($slow) {
    limit_rate 10k;
    break;
}

if
조건 판단, 조건 이 충족 되면 괄호 안의 명령 이 실 행 됩 니 다.조건 은:
변수 이름: true or false 비교 연산: = or! =정규 표현 식: ~ (대소 문자 매 칭 case - sensitive matching 구분) or ~ * (대소 문자 매 칭 case - insensitive matching 구분 하지 않 음) - f: 파일 이 존재 하 는 지 판단 - d: 파일, 폴 더, 기호 연결 이 존재 하 는 지 판단 - x: 파일 이 실행 가능 한 지 확인
예 를 들 면:
if ($http_user_agent ~ MSIE) {
    rewrite ^(.*)$ /msie/$1 break;
}

if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
    set $id $1;
}

if ($request_method = POST) {
    return 405;
}

if ($slow) {
    limit_rate 10k;
}

if ($invalid_referer) {
    return 403;
}

return
클 라 이언 트 에 게 특별한 http 코드 를 처리 하지 않 고 발휘 합 니 다.
return (301 | 302 | 303 | 307) url;
return (1xx | 2xx | 4xx | 5xx) ["text"];

rewrite
rewrite regex URL [flag];

요청 한 URI 가 regex 에 만족 하면 URI 가 교 체 됩 니 다.바 뀐 URI 가 http 또는 https 로 시작 하면 나중에 처리 하지 않 고 클 라 이언 트 에 게 되 돌려 줍 니 다.flag 의 선택 값 은:
last: 현재 ngx 멈 추기http_rewrite_module 명령 과 바 뀐 URI 로 새로운 location 을 찾 습 니 다.break: 현재 ngx 멈 추기http_rewrite_module 명령 * * * 집합 * * * *.redirect: 302. permanent: 영구적 인 퍼 가기: 301 code 를 되 돌려 줍 니 다.
메모: last 명령 은 새로운 location 을 다시 찾 고 break 는 현재 location or if direct 에서 벗 어 납 니 다.따라서 location 내부 에 사용 할 때 last 는 튀 어 나 와 다시 일치 합 니 다.
location /download/ {
    rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break;
    rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra  break;
    return  403;
}

URL: / download / a / media / a. mp3 에 접근 하면.위 에 일치 합 니 다: /download/a/mp3/a.mp3.
break 를 last 로 바 꾸 면:
location /download/ {
    rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;
    rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra  last;
    return  403;
}

그러면 과정 은:
/download/a/media/a.mp3-->/download/a/mp3/a.mp3-->
/download/a/mp3/a.mp3-->403

set
변 수 를 설정 합 니 다.eg:
 set $is_mobile "pc";
 if ( $http_user_agent ~* "(Android|iPhone|iPod|Symbian|IEMobile|BlackBerry)"){
       set $is_mobile "mobile";
 }

활용 단어 참조
예: nginx blog:
server {
    listen 80;
    server_name www.old-name.com old-name.com;
    return 301 $scheme://www.new-name.com$request_uri;
    #return 301 $scheme://www.new-name.conm;
    #rewrite ^ $scheme://www.new-name.com$request_uri permanent;
    #rewrite ^/(.*)$ $scheme://www.new-name.com/$1 permanent;

}

add or remove www
# add 'www'
server {
    listen 80;
    listen 443 ssl;
    server_name domain.com;
    return 301 $scheme://www.domain.com$request_uri;
    #rewrite ^(.*)$ $scheme://www.domain.com$1 permanent;
}

# remove 'www'
server {
    listen 80;
    listen 443 ssl;
    server_name www.domain.com;
    return 301 $scheme://domain.com$request_uri;
}

기본 퍼 가기:
server {
    listen 80 default_server;
    listen 443 ssl default_server;
    server_name _;
    return 301 $scheme://www.domain.com;
}

강제 HTTPS:
server {
    listen 80;
    server_name www.domain.com;
    return 301 https://www.domain.com$request_uri;
}

또는:
# NOT RECOMMENDED
if ($scheme != "https") {
    rewrite ^ https://www.mydomain.com$uri permanent;
}

이 건 추가 처리 가 필요 해서 추천 하지 않 습 니 다.
location / {
    try_files $uri $uri/ /index.php?$args;
}

지원 되 지 않 는 파일 제거:
location ~ \.(aspx|php|jsp|cgi)$ {
    return 410;
    #deny all;
}

사용자 정의 경로:
rewrite ^/listings/(.*)$ /listing.html?listing=$1 last;


위 챗 공식 계 정: myersguo
참고 자료
https://www.nginx.com/blog/creating-nginx-rewrite-rules/ http://nginx.org/en/docs/http/ngx_http_rewrite_module.html

좋은 웹페이지 즐겨찾기