nginx location 설정 논술 우선 순위 사용 설명 - 부당 하면 안전 위험 이 존재 할 수 있 습 니 다.

19593 단어 location

 
 
nginx 를 사용 한 지 반년 이 되 었 는데 그것 의 고성능, 안정성 이 매우 좋다.이곳 도 많은 사람들의 인정 을 받 고 있다.그 중에서 설정 은 프로그램 을 쓰 는 것 과 같 습 니 다. 각 줄 의 명령 은 ';' 번, 구문 블록 은 '{}' 으로 묶 여 있 습 니 다.조립 이 완료 되 었 습 니 다. 직접 nginx - t 조립 상황 을 검사 하고 조립 이 성공 하 였 습 니 다. 직접 실행: 서비스 nginx reload. 서버 가 다운 되 지 않 은 상태 에서 안정 적 인 설정 수정 을 실현 합 니 다.
 
최근 에 location 배 제 를 하 다가 작은 문제 가 생 겼 습 니 다. 다음은 개인 적 으로 학습 한 소감 입 니 다.
 
1. location 에 맞 는 우선 순위 (실천 총화 에서)
 
(location =) > (location 전체 경로 >) > (location ^ ~ 경로) > (location ~ * 정규) > (location 경로)
     일치 하면 다른 것 은 무시 하고 일치 하 는 것 으로 되 돌아 갑 니 다.
다음 예 를 들 어 테스트 합 니 다.
 

  
  
  # 1
6   location / {
7 return 500 ;
8 }
9
10   # 2
11   location / a / {
12 return 404 ;
13 }
14
15   # 3
16   location ~ * \.jpg $ {
17 return 403 ;
18 }
19
20   # 4
21   location ^~ / a / {
22 return 402 ;
23 }
24
25   # 5
26   location / a / 1 .jpg {
27 return 401 ;
28 }
29
30   # 6
31   location = / a / 1 .jpg {
32 return 400;
33   }
34

 설명 테스트: 먼저 \ # 2 를 모두 주석 해 야 합 니 다. 그렇지 않 으 면 \ # 2 와 \ # 4 가 똑 같다 고 생각 합 니 다.반복
 

  
  

D:
ginx
- 0.8 . 7 > nginx - s reload
[emerg]: duplicate location
" /a/ " in D:
ginx
- 0.8 . 7 / conf / nginx.conf: 53

 
 
우선 테스트: 매번 방문: http://localhost:9999/a/1.jpg (windows 에 테스트 를 설치 하고 포트 는 9999) 파일 a / 1. jpg 는 존재 하지 않 습 니 다. 문 제 는 페이지 가 돌아 오 는 상황 을 테스트 하 는 것 입 니 다.
 
a.

  
  
400 Bad Request

--------------------------------------------------------------------------------

nginx/0.8.7

(그림 1)
테스트 에서 볼 수 있 듯 이 우선 순위 가 가장 높 은 것 은: = 번 입 니 다. 가장 먼저 일치 합 니 다.
 
 
b. 이제 차단 합 니 다 \ # 6 은 다음 과 같 습 니 다:
 

  
  
# 6
#
location = /a/1.jpg {
#
return 400;
#
}

그리고: D: ginx - 0.8.7 > nginx - s reload  방문: http://localhost:9999/a/1.jpg 
 

  
  
401 Authorization Required

--------------------------------------------------------------------------------

nginx/0.8.7

그림 (2 - 2)
메모: 이 테스트 에서 "=" 이 없 는 경우 location 뒤에 전체 경 로 를 직접 연결 하 는 것 이 우선 입 니 다. 테스트 를 통 해: location 을 발견 하면  /a/1.jpg   location / a / 1 \. jpg 로 변경
의외 의 상황 이 발생 할 수 있 습 니 다. 바로 return 402 입 니 다.  이 점 에서 nginx 매 칭 우선 순 위 는 사이트 경로 이 고 정규 표현 식 이 없 는 우선 순 위 를 추측 할 수 있 습 니 다.
이상 은 본인 이 테스트 를 통 해 추측 할 수 있 습 니 다. 문제 가 있 으 면 지적 해 주 십시오.
 
c. 동 리 테스트 차단 \ # 5 는 다음 과 같 습 니 다: 주석 및 다시 불 러 오기 동상.
 

  
  
#5
# location /a/1.jpg {
# return 401;
# }
 

 
방문: http://localhost:9999/a/1.jpg 다음 결 과 를 되 돌려 줍 니 다.



402 Payment Required

--------------------------------------------------------------------------------

nginx/0.8.7

 
 
이 테스트 를 통 해 알 수 있 듯 이 location ^ ~ 우선 순위 가 location ~ * 우선 순위 보다 높 습 니 다. 그 중에서: ^ ~ 주요 뒤쪽 연결 경로 입 니 다.
 
c. 동 리 테스트 차단 \ # 4 다음 과 같 습 니 다: 주석 및 다시 불 러 오기 동상.
 

  
  
#4
# location ^~ /a/ {
# return 402;
# }
 

http://localhost:9999/a/1.jpg  。






403 Forbidden

--------------------------------------------------------------------------------

nginx/0.8.7


상기 비교 에서 얻 을 수 있 습 니 다: 정규 우선 비판 문자 가 없 는 경로 가 일치 합 니 다.
 
d. 동 리 테스트 차단 \ # 3 은 다음 과 같 습 니 다. 주석 및 같은 위 에 다시 불 러 옵 니 다. 그리고 \ # 2 의 주석 "\ #" 을 제거 합 니 다.
 

  
  
#2
location /a/ {
return 404;
}

 

http://localhost:9999/a/1.jpg  。





404 Not Found

--------------------------------------------------------------------------------

nginx/0.8.7

 
비교적 재 미 있 는 것 은: / a / 와 /  같은 종류의 일치 식 이 어야 합 니 다. 그 중에서 얻 을 수 있 습 니 다. 이 일치 순 서 는 경 로 를 오른쪽 에서 일치 시 키 고 문자 와 같이 추측 할 수 있 습 니 다. 그것 이 먼저 일치 하 는 것 이 우선 입 니 다. 따라서 얻 은 것 은: / a / 우선 / 입 니 다.
 
 
 
이상 의 테스트 는 제 가 테스트 한 결과 입 니 다. 우선 순 위 는 이상 의 규칙 입 니 다. 실제 우리 가 작성 할 때 실 수 를 자주 합 니 다. 얼마 전 까지 만 해도 기억 합 니 다. 80 후 안전 팀 nginx 구멍 노출 사실, 개인 적 으로 는 nginx 구멍 이 라 고 할 수 없다 고 생각 합 니 다. 다만, 우 리 는 nginx 배합 규칙 을 모 르 고 하나의 설정 에 치 명 적 인 구멍 이 생 겼 을 뿐 입 니 다. 사실, 위의 우선 순 위 를 통 해 우 리 는 설정 할 때 도 마찬가지 로 치 명 적 인 오 류 를 자주 범 할 수 있 습 니 다.
 
 
 

  
  

# ,
# :/home/www/html/ , php 。
location ~* \.php$ {
proxy_pass http://www.a.com;
}


location /upload/ {
alias /home/www/html/upload/;
}

 
 
그리고 이 upload 디 렉 터 리 는 정적 디 렉 터 리 입 니 다. php 파일 을 포함 하여 아래 의 모든 파일 을 실행 할 수 없다 고 생각 합 니 다.
사용자 접근 이 있 으 면 http://www.a.com/upload/1.css 이 css 를 직접 표시 합 니 다. 단, 사용자 접근 이 있 으 면: http://www.a.com/upload/1.php  위 에서 말 한 바 와 같이 실제 일치 하 는 파일: ~ * \. php $  업로드 아래 가 실 행 됐 습 니 다.
이 안에서 우 리 는 문제 하 나 를 발 견 했 습 니 다. 실제로 우리 의 요구 에 미 치지 못 했 습 니 다. 정적 디 렉 터 리 아래 의 파일 처럼 실행 되 었 습 니 다. 이 제 는 좀 번 거 로 웠 습 니 다. 위 에 구멍 이 생기 면 다른 사람 이 phop 을 저장 합 니 다. 우 리 는 설정 이 ok 인 줄 알 았 습 니 다. 안전 하 다 고 생각 했 습 니 다. 자신 도 모 르 는 사이 에 다른 사람 에 게 문 을 열 리 지 않 았 습 니 다.
 
 
그럼 어떻게 수정 할 까요?
 

  
  
location ~* \.php$ {
proxy_pass http://www.a.com;
}


location ^~ /upload/ {
alias /home/www/html/upload/;
}

 
네, 꼭 써 야 합 니 다. "^ ~" 이렇게 하면 안전 하지 않 을까요? 다시 방문 해 보 세 요. http://www.a.com/upload/1.php  이 코드 의 원본 코드 가 표 시 된 것 을 발견 할 수 있 습 니 다. 이것 은 사실 우리 에 게 도 보고 싶 지 않 습 니 다. 원본 코드 는 각 검색엔진 에서 모든 특수 키 워드 를 통 해 파일 을 고 치 는 것 을 쉽게 검색 할 수 있 습 니 다.
그렇다면 우 리 는 안전 한 메모리 디 렉 터 리 를 어떻게 설정 해 야 합 니까? 네, 허용 되 는 특수 파일 형식 을 제한 하 라 고 생각 했 습 니 다.
 
다음 과 같이 개조:

  
  
location ~* \.php$ {
proxy_pass http://www.a.com;
}


location ^~ /upload/ {
  if ($request_filename ! ~* \.(jpg|jpeg|gif|png|swf|zip|rar|txt)$) {
  return 403;
    }

alias /home/www/html/upload/;
}

 
위의 확장자 파일 을 만족 시 키 지 않 으 면 자동 으로 알려 줍 니 다. 403 은 접근 할 수 없고 원본 코드 가 표시 되 는 것 을 피 할 수 있 습 니 다.
 
 
방금 일치 하 는 결과 에서 알 았 습 니 다. 같은 등급 에 일치 하 는 문자 가 없 는 것 은 오른쪽 을 기준 으로 일치 합 니 다. 그렇다면 정규 표현 식 을 사용한다 면 어떤 방식 으로 일치 합 니까?
테스트 는 다음 과 같 습 니 다. (새 프로필, 서버 포함)
 

  
  
location ~* \.jpg$ {
return 402;
}

location ~* 1\.jpg$ {
return 403;
}

 결 과 는 다음 과 같다.
 

  
  
402 Payment Required

--------------------------------------------------------------------------------

nginx/0.8.7

 
돌아 온 것 은 402 위 에 있 는 것 같 습 니 다. 이론 적 으로 1. jpg 설정 이. jpg 보다 더 정확 한 것 같 습 니 다. 위 에서 말 한 순서 와 다 르 면 그것 이 앞에서 그것 과 일치 하 는 것 이 아 닐 까요? 다시 한번 테스트 해 보 겠 습 니 다.
 

  
  
location ~* 1\.jpg$ {
return 403;
}

location ~* \.jpg$ {
return 402;
}

 
반환 결 과 는:
 

  
  
403 Forbidden

--------------------------------------------------------------------------------

nginx/0.8.7

 
 
하하, 반대로 내 추측 이 맞 는 것 같 아 요. 모두 정규 라면 일치 할 수 있어 요. 설정 파일 의 순서 로 누가 앞 에 있 고 누가 먼저 있 는 지. 단숨에 말 했 습 니 다. 친구 당신 을 모 르 겠 어 요. 제 생각 을 아 세 요? 이렇게 하면 많은 것 을 알 수 있어 요. 여러분 들 은 테스트 를 해 보 세 요. location 설정 을 잘 알 고 능숙 하 게 활용 하 는 데 있어 서 nginx 는 필수 기수 입 니 다.nginx 는 너무 유연 하고 유행 합 니 다. 위의 문 제 는 친구 가 만 날 수도 있 습 니 다. 도움 이 되 기 를 바 랍 니 다.
 
 
 
===================================================================================
침묵: 마음 을 가 라 앉 히 고 묵묵히 공부 하 라!

좋은 웹페이지 즐겨찾기