Nginx의 동적 및 정적 분리 해석

목차

기본 사상 

기본 소개

위치 매칭 순서

보충: URLRewrite


기본 사상 

동적 리소스와 정적 리소스의 분리를 통해 동적 웹 사이트의 동적 웹 페이지는 특정 규칙에 따라 지속적인 리소스와 자주 변경되는 리소스를 구분할 수 있으며, 동적 리소스와 정적 리소스를 분할한 후 정적 리소스의 특성에 따라 캐시할 수 있습니다. 웹사이트 정적 처리의 핵심 아이디어 

장점 : 부하를 공유하고 웹 서버에 대한 부담을 줄이며 대용량 부하에 적합합니다. 정적 리소스는 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;
        }
}

Supongo que te gusta

Origin blog.csdn.net/m0_62436868/article/details/132797326
Recomendado
Clasificación