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 는 너무 유연 하고 유행 합 니 다. 위의 문 제 는 친구 가 만 날 수도 있 습 니 다. 도움 이 되 기 를 바 랍 니 다.
===================================================================================
침묵: 마음 을 가 라 앉 히 고 묵묵히 공부 하 라!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Android Q foreground 서비스에서 위치 정보 액세스Android Q(API level29)에서 새 위치 정보 권한ACCESS_BACKGROUND_LOCATION을 추가했습니다.하지만 문서를 보더라도 특히 프론트 데스크 서비스의 동작 행위는 이해하기 어려워 조사해 봤...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.