목차
기본 사상
동적 리소스와 정적 리소스의 분리를 통해 동적 웹 사이트의 동적 웹 페이지는 특정 규칙에 따라 지속적인 리소스와 자주 변경되는 리소스를 구분할 수 있으며, 동적 리소스와 정적 리소스를 분할한 후 정적 리소스의 특성에 따라 캐시할 수 있습니다. 웹사이트 정적 처리의 핵심 아이디어
장점 : 부하를 공유하고 웹 서버에 대한 부담을 줄이며 대용량 부하에 적합합니다. 정적 리소스는 CDN에 배치되며 구성을 통해 클라이언트 브라우저에 캐시될 수도 있으므로 웹 서버에 대한 부담이 크게 줄어듭니다.
단점 : 네트워크 환경이 좋지 않은 경우 Ajax 응답이 매우 느려 빈 페이지가 발생하고 오류 처리가 보기 좋지 않습니다. 이는 웹사이트 SEO(검색 엔진 최적화)에 도움이 되지 않으며 개발 복잡성을 증가시킵니다.
동적 리소스: Nginx의 역방향 프록시 기능을 사용하여 요청 분산: 모든 동적 리소스 요청은 애플리케이션 서버로 전달됩니다.
정적 리소스: 정적 리소스 요청(예: 사진, 비디오, CSS 파일 등)은 브라우저에 직접 반환됩니다. 애플리케이션 서버에 대한 부담을 크게 줄일 수 있는 Nginx
기업 개발에서는 동적 보조 소스를 적절하게 처리하고 서버의 응답 속도를 향상시키기 위해 일반적으로 동적 콘텐츠와 정적 콘텐츠를 분리합니다.
기본 소개
예:
-
요청한 리소스 주소가 이면
location/
우선/
순위가 상대적으로 낮으며, 다음 위치가 일치하지 않으면 주소가 http://xxx 인 머신이 사용됩니다. -
요청된 리소스 주소가 이면
location/css/*
nginx의 html 디렉터리에 있는 css 폴더와 일치합니다(우리는 이 위치에 CSS 정적 리소스를 넣습니다).
server {
listen 80;
server_name localhost;
location / { # /的优先级比较低,如果下面的location没匹配到,就会走http://xxx这个地址的机器
proxy_pass http://xxx;
}
location /css { # root指的是html,location/css指的是root下的css,所以地址就是html/css
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
여기서는 일치를 위해 정규 표현식을 사용할 수도 있습니다.
location ~*/(js|css|img){
root html;
index index.html index.htm;
}
对于location/css/*
,location/js/*
,location/img/*的请求资源就可以进行匹配
일반적인 Nginx 정규 표현식
- ^: 입력 문자열의 시작 위치와 일치합니다.
- $: 입력 문자열의 끝 위치를 일치시킵니다.
- * : 앞의 문자와 0번 이상 일치합니다. 예를 들어 "ol*"은 "o", "ol" 및 "oll"과 일치할 수 있습니다.
- + : 앞의 문자를 한 번 이상 일치시킵니다. 예를 들어 "ol+"는 "ol", "oll" 및 "olll"과 일치할 수 있지만 "o"와는 일치할 수 없습니다.
- ?: 이전 문자 0개 또는 1개와 일치합니다. 예를 들어 "do(es)?"는 "do" 또는 "does"와 일치할 수 있으며 "?"는 "{0,1}"과 동일합니다.
- . : "\n"을 제외한 모든 단일 문자와 일치합니다. "\n"을 포함한 모든 문자와 일치하려면 "[.\n]"과 같은 패턴을 사용합니다.
- \: 다음 문자를 특수 문자, 리터럴 문자 또는 역방향 참조로 표시합니다. 예를 들어, "\n"은 개행 문자와 일치하고 "\$"는 "$"와 일치합니다.
- \d: 순수한 숫자와 일치합니다.
- {n}: n번 반복
- {n,}: n회 이상 반복
- {n,m}: n~m번 반복
- []: 일치하는 문자 범위를 정의합니다.
- [c] : 단일 문자 c와 일치합니다.
- [az]: 모든 소문자 az와 일치합니다.
- [a-zA-Z0-9] : 모든 대문자, 소문자 또는 숫자와 일치합니다.
- (): 표현식의 시작 위치와 끝 위치
- |: Or 연산자 //예(js|img|css)
위치 매칭 순서
- 다수의 일반 위치가 쓰기 순서대로 직접 일치되며, 성공 후에는 더 이상 일치하지 않습니다.
- 일반(비정규) 위치는 가장 높은 일치 정도가 발견될 때까지 내려갑니다(최대 접두사 일치).
- 일반 위치와 일반 위치가 동시에 존재하는 경우 일반 매칭에 성공하면 일반 매칭이 다시 수행되지 않습니다.
- 모든 유형의 위치가 존재할 경우 "=" 매칭 > "^~" 매칭 > 일반 매칭 > 일반(최대 접두사 매칭)
보충: URLRewrite
rewrite는 URL 재작성을 구현하는 핵심 명령어로, regex(정규식) 부분에 따라 replacement로 리디렉션되고 플래그 태그로 끝납니다.
rewrite <regex> <replacement> [flag];
关键字 正则 替代内容 flag标记
일반: Perl은 규칙 일치를 위한 정규식 문과 호환됩니다.
대체 콘텐츠: 일반 일치 콘텐츠를 대체 콘텐츠로 교체합니다.
플래그 태그: 다시 쓰기가 지원되는 플래그 태그
다시 쓰기 매개변수의 태그 세그먼트 위치: 서버,위치,if
플래그 표시 설명
마지막 #이 규칙의 일치가 완료된 후 새로운 1location URI 규칙과 계속 일치합니다.
#이 규칙은 일치가 완료되면 종료되며 더 이상 후속 규칙과 일치하지 않습니다.리디렉션 #302 임시 리디렉션으로 돌아가기, 브라우저 주소는 점프 후 URL 주소를 영구적으로 표시합니다.
#301 영구 리디렉션으로 돌아가기, 브라우저 주소 표시줄은 점프 후 URL 주소를 표시합니다.
브라우저 주소 표시줄에 액세스하면 xxx/123.html
실제로 액세스됩니다.xxx/index.jsp?pageNum=123
server {
listen 80;
server_name localhost;
location / {
rewrite ^/([0-9]+).html$ /index.jsp?pageNum=$1 break;
proxy_pass http://xxx;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}