이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 11719|회답: 1

[웹] 예를 들어 Nginx의 리라이트 규칙이 있습니다

[링크 복사]
게시됨 2014. 12. 5. 오후 10:45:25 | | |
1. 정규 표현식 일치, 여기서 다음과 같다:
* ~ 대문자 구별 매칭입니다
* ~* 대문자 구분 없는 매칭입니다
* !~와 !~*는 각각 대소문자 구분과 대소문자 구분 불일치입니다
2. 파일과 디렉터리가 일치하며, 다음과 같습니다:
* -f와 !-f는 파일이 존재하는지 판단하는 데 사용됩니다
* -d와 !-d는 디렉터리가 존재하는지 판단하는 데 사용됩니다.
* -e와 !-e는 파일이나 디렉터리가 존재하는지 판단하는 데 사용됩니다
* -x와 !-x는 파일이 실행 가능한지 여부를 판단하는 데 사용됩니다
3. 재작성 명령어의 마지막 매개변수는 플래그 마크이며, 다음과 같이 표시됩니다:
1.last는 apache의 [L] 표시와 동등하며, 이는 다시 쓰기를 의미합니다.
2. 브레이크 이 규칙의 매칭이 완료되면 매칭이 종료되고 이후 규칙들은 더 이상 매칭되지 않습니다.
3.redirect는 302 임시 리디렉션을 반환하며, 브라우저 주소는 점프 후 URL 주소를 표시합니다.
4.permanent 반환 301 영구 리다이렉션, 브라우저 주소는 점프 후 URL 주소를 표시합니다.


URI 재작성을 위해 라스트 앤 브레이크를 사용하며, 브라우저 주소 표시줄은 변경되지 않습니다. 그리고 두 가지 사이에 약간의 차이가 있는데, 별칭 명령어는 반드시 마지막으로 표시해야 합니다; proxy_pass 지시를 사용할 때는 break 태그를 사용해야 합니다. 이 재작성 규칙에서 마지막 태그가 실행되면 서버{......}에 표시됩니다 태그는 요청을 재시작하고, 브레이크 태그는 규칙 매칭이 완료된 후 매치를 종료합니다.
예를 들어, /photo/123456 같은 URL을 /path/to/photo/12/1234/123456.png로 리디렉션하면
"/photo/([0-9]{2})([0-9]{2})([0-9]{2})" 다시 쓰기 "/path/to/photo/$1/$1$2/$1$2$3.png ;


4. NginxRewrite 규칙


1. 브레이크 명령
사용 환경: 서버, 위치, if;
이 지시는 현재 규칙 집합을 완성하며 더 이상 재작성 지시를 처리하지 않습니다.


2. 만약 지시적이다
사용 환경: 서버, 위치
이 명령어는 조건이 충족되는지 확인하고, 충족되면 컬리 괄호 안에서 해당 문장을 실행하는 데 사용됩니다. If 명령어는 중첩을 지원하지 않으며, 여러 조건 && 및 || 치료.


3. 명령 반환
문법: returncode ;
사용 환경: 서버, 위치, if;
이 명령어는 규칙 실행을 종료하고 클라이언트에 상태 코드를 반환하는 데 사용됩니다.
예시: 방문한 URL이 ".sh" 또는 ".bash"로 끝나면 403 상태 코드가 반환됩니다
위치 ~ .*\. (슛)?$
{
리턴 403;
}


4. 명령 재작성
구문론: rewriteregex 교체 플래그
사용 환경: 서버, 위치, 만약
이 명령어는 표현식을 기반으로 URI를 리디렉션하거나 문자열을 수정합니다. 명령어는 구성 파일의 순서대로 실행됩니다. 표현식 재작성은 상대 경로에만 유효하다는 점에 유의하세요. 호스트명을 페어링하고 싶다면, 예를 들어 아래와 같은 if 문들을 사용해야 합니다:
if( $host ~* www\( *) )
{
$host_without_www $1 설정;
rewrite ^(.*)$ http://$host_without_www$1permanent;
}


5. 명령어 설정
문법: setvariable value; 기본값: 없음; 사용 환경: 서버, 위치, if;
이 지시는 변수를 정의하고 값을 할당하는 데 사용됩니다. 변수의 값은 텍스트, 변수, 또는 텍스트 변수들의 합집합일 수 있습니다.
예시: set$varname "안녕 세상";


6.Uninitialized_variable_warn 지침
문법: uninitialized_variable_warnon |off
사용 환경: http, 서버, 위치, 만약
이 명령어는 초기화되지 않은 변수에 대한 경고 메시지를 켜고 끄는 데 사용되며, 기본값은 켜져 있습니다.




5. Nginx Rewrite 규칙 작성 예시
1. 접근한 파일과 디렉터리가 존재하지 않을 때, 특정 PHP 파일로 리디렉션합니다
if( !-e $request_filename )
{
rewrite ^/(.*)$ index.php 마지막;
}


2. 디렉터리 교환 /123456/xxxx ====> /xxxx?id=123456
rewrite ^/(\d+)/(.+)/ /$2?id=$1 마지막;


3. 클라이언트가 IE 브라우저를 사용 중이라면, /ie 디렉터리로 리디렉션됩니다
if( $http_user_agent ~ MSIE)
{
rewrite ^(.*)$ /ie/$1 구분;
}


4. 여러 디렉터리에 대한 접근 차단
위치 ~ ^/(크론|템플릿)/
{
모두 부인하라;
브레이크;
}


5. /data로 시작하는 파일 접근 차단
위치 ~ ^/데이터
{
모두 부인하라;
}


6. 파일 접미사 이름이 .sh, .flv, .mp3 있는 파일 접근을 금지합니다
위치 ~ .*\. (sh|flv|mp3)$
{
리턴 403;
}


7. 특정 유형의 파일에 대해 브라우저 캐시 시간을 설정하세요
위치 ~ .*\. (gif|jpg|jpeg|png|bmp|swf)$
{
만료 30일;
}
위치 ~ .*\. (js|css)$
{
만료 시간은 1시간;
}


8. favicon.ico와 robots.txt의 만료 시간을 설정;
여기서는 favicon.ico 99일, robots.txt 7일이며, 404 오류 로그는 기록되지 않습니다
위치 ~(favicon.ico) {
log_not_found 떠나고;
만료 99일;
브레이크;
}
위치 ~(robots.txt) {
log_not_found 떠나고;
만료 7펜스;
브레이크;
}


9. 특정 문서의 만료 시간을 설정; 이 시간은 600초이며, 접근 로그는 기록되지 않습니다
위치 ^~ /html/scripts/loadhead_1.js {
access_log 떠나고;
루트 /opt/lampp/htdocs/web;
만료 600;
브레이크;
}


10. 안티핫링크 파일 및 유효 기간 설정
여기 Return412는 맞춤형 HTTP 상태 코드로, 기본값은 403으로 설정되어 올바른 핫링크 요청을 찾는 데 편리합니다
"다시 쓰기 ^/; "안티 핫링크 이미지 보여줘
"access_log 나가;" 접근 기록이 없어 스트레스를 줄여줍니다
"만료된 3D" 모든 파일에 대해 3일치 브라우저 캐시


위치 ~*^.+\. (jpg|jpeg|gif|png|swf|rar|zip|CSS|js)$ {
valid_referers 차단되지 않음 *.xx.com*.xx.net localhost 208.97.167.194;
만약 ($invalid_referer) {
재작성 ^/;
리턴 412;
브레이크;
}
access_log 떠나고;
루트 /opt/lampp/htdocs/web;
만료 3펜스;
브레이크;
}


11. 비밀번호가 있는 고정 IP만 웹사이트 접속을 허용하세요


루트 /opt/htdocs/www;
허용 208.97.167.194;
허용 222.33.1.2;
허용 231.152.49.4;
모두 부인하라;
auth_basic "C1G_ADMIN";
auth_basic_user_file htpasswd;


12다단계 디렉터리의 파일을 하나의 파일로 변환하여 SEO 효과를 향상시키기
/job-123-456-789.html 指向/job/123/456/789.html


rewrite^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html 마지막;


13. 파일 및 디렉터리가 존재하지 않을 경우 리디렉션:


만약 (!-e $request_filename) {
proxy_pass http://127.0.0.1;
}


14. 루트 디렉터리의 폴더를 레벨 2 디렉터리로 지정하세요
예를 들어, /shanghaijob/은 /area/shanghai/를 가리킵니다
만약 마지막 이름이 영구로 바뀌면 브라우저 주소 표시줄이 /location/shanghai/로 표시됩니다
rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;
위 예시의 문제는 /shanghai에 접속할 때 이 정보가 일치하지 않는다는 점입니다
rewrite ^/([0-9a-z]+)job$ /area/$1/ 마지막;
rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;
이 방법/상하이도 접근 가능하지만, 페이지에 있는 관련 링크는 제공되지 않습니다.
./list_1.html 실제 주소가 /area/shanghia/list_1.html 되면 /list_1.html가 되어 접근 불가능해집니다.
그럼 자동 점프를 추가할 수 없어요
(-d $request_filename)은 실제 디렉터리여야 한다는 조건이 있는데, 제 리라이트는 그렇지 않아 효과가 없습니다
만약 (-d $request_filename){
리라이트 ^/(.*)([^/])$ http://$host/$1$2/permanent;
}
이유를 알면 쉽게 할 수 있으니, 수동으로 점프할게요
Rewrite ^/([0-9A-Z]+)Job$ /$1Job/Permanent;
rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;


15. 도메인 이름 점프
서버
{
듣기 80;
server_name jump.linuxidc.com;
지수 index.html index.htm index.php;
루트 /opt/lampp/htdocs/www;
재작성 ^/ http://www.xx.com/;
access_log 떠나고;
}


16. 다중 영역 선동
server_name www.xx.comwww.xx.com;
지수 index.html index.htm index.php;
루트 /opt/lampp/htdocs;
if ($host ~ "linuxidc\.net") {
재작성 ^(.*) http://www.xx.com$1permanent;
}


6. nginx 전역 변수
arg_PARAMETER #这个变量包含GET请求中, 변수 PARAMETER가 존재한다면.
args #这个变量等于请求行中 (GET request) 매개변수, 예를 들어 foo=123&bar=blahblah;
binary_remote_addr #二进制的客户地址.
body_bytes_sent #响应时送出的body字节数数量. 이 데이터는 연결이 끊겨도 정확합니다.
content_length #请求头中的Content 길이의 필드.
content_type #请求头中的Content형 필드.
cookie_COOKIE #cookie COOKIE 변수의 값입니다
document_root #当前请求在root指令中指定的值.
document_uri #与uri相同.
호스트 #请求主机头字段, 그렇지 않으면 서버 이름이 필요합니다.
호스트네임은 gethostname에서 반환된 TheMachine 호스트네임으로 #Set
http_HEADER
is_args #如果有args参数 이 변수는 "?"이고, 그렇지 않으면 """, null 값입니다.
http_user_agent #客户端agent信息
http_cookie #客户端cookie信息
limit_rate #这个变量可以限制连接速率.
query_string #与args相同.
request_body_file #客户端请求主体信息的临时文件名.
request_method #客户端请求的动作 보통 GET이나 POST를 선택해요.
remote_addr #客户端的IP地址.
remote_port #客户端的端口.
remote_user #已经经过Auth 기본 모듈로 인증된 사용자 이름입니다.
request_completion #如果请求结束, OK로 설정해. 요청이 완료되지 않았거나 요청이 요청 체인의 마지막이 아닐 때 빈 공간입니다.
request_method #GET或POST
request_filename #当前请求的文件路径 루트 또는 별칭 명령어와 URI 요청에 의해 생성됩니다.
request_uri #包含请求参数的原始URI, 호스트 이름은 포함하지 않습니다. 예를 들어, "/foo/bar.php?arg=baz". 수정 불가.
스킴 #HTTP方法(예: http, https).
server_protocol #请求使用的协议 보통 HTTP/1.0이나 HTTP/1.1입니다.
server_addr #服务器地址, 이 값은 시스템 호출이 완료된 후에 결정할 수 있습니다.
server_name #服务器名称.
server_port #请求到达服务器的端口号.


7. 아파치와 Nginx 규칙 간의 대응
Apache의 RewriteCond는 Nginx의 조건과 일치합니다.
Apache의 RewriteRule은 Nginx의 리라이트에 대응합니다
Apache의 [R]는 Nginx의 리디렉션에 해당합니다
아파치어에서 [P]는 Nginx에서 마지막에 해당합니다.
아파치어의 [R,L]는 Nginx의 리다이렉션에 해당합니다
아파치어 [P,L]는 Nginx의 마지막 문자와 일치합니다
아파치어의 [PT,L]는 Nginx의 마지막 언어와 일치합니다


예를 들어, 지정된 도메인 이름이 이 사이트에 접근하도록 허용하고 항상 다른 도메인 이름으로 전환 www.xx.com
  아파치:
RewriteCond %{HTTP_HOST} !^(.*?) \.aaa\.com$[NC]
RewriteCond %{HTTP_HOST} !^localhost$
RewriteCond %{HTTP_HOST}!^192\.168\.0\. (.*?) $
RewriteRule ^/(.*)$ http://www.xx.com[R,L]


  Nginx:
if( $host ~* ^(.*)\.aaa\.com$ )
{
$allowHost '1'로 설정;
}
if( $host ~* ^localhost)
{
$allowHost '1'로 설정;
}
if( $host ~* ^192\.168\.1\(. *?) $ )
{
$allowHost '1'로 설정;
}
if( $allowHost !~ '1' )
{
리라이트 ^/(.*)$ http://www.xx.comredirect ;
}





이전의:시나 웨이보에서 코드를 스캔해 1센트를 지불하면 2015위안까지 연말 보너스를 받을 수 있습니다
다음:CMD5가 Windows 시스템 관리자 비밀번호를 해독했습니다
게시됨 2014. 12. 7. 오후 5:25:05 |
읽고 다시 글을 올리는 것은 미덕입니다
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com