nginx rewrite 와 nginx - ingress rewrite 이해
location /name/ {
proxy_pass http://127.0.0.1/remote/;
}
이러한 설정, proxypass 뒤에 uri / remote 를 추가 하면 정상 적 인 요청 uri 에서 location 과 일치 하 는 부분 을 / remote 로 교체 합 니 다. 저 는 aa. xxx. net / gateway / a / b 대 리 를 백 엔 드 로 방문 하 는 것 은 svc - gateway: 8080 / a / b 와 유사 한 장면 이 있 습 니 다. 어떻게 설정 하 시 겠 습 니까?그 중의 gateway 를 차단 하 다.먼저 생각 나 는 것 은 ingress 안의 rewrite 주석 으로 문 제 를 해결 하 는 것 이다.
nginx 의 rewrite
공식 문서 링크 참조 ngxhttp_rewrite_module 모듈 은 PCRE 정규 표현 식 을 사용 하여 요청 URI 를 변경 하고 방향 을 바 꾸 거나 조건 부 설정 을 선택 합 니 다.break, if, return, rewrite, and set 명령 은 다음 순서대로 실 행 됩 니 다.
현재 ngx 처리 중지http_rewrite_module 명령 집합.location 내 if 명령 에 break 가 포함 되 어 있 으 면 location 내 다른 명령 이 계속 실 행 됩 니 다.
rewrite 명령 어
Syntax: rewrite regex replacement [flag];
Default: —
Context: server, location, if
지정 한 정규 가 요청 한 uri 와 일치 하면 uri 는 replacement 으로 대 체 됩 니 다.rewrite 는 설정 파일 에 나타 난 순서대로 실 행 됩 니 다.다음 예제:
location / {
rewrite ^/a /b;
#return 200 okokok;
rewrite ^/b /c last;
rewrite ^/d /b;
}
location = /b {
return 401;
}
location = /c {
return 402;
}
위의 설정 과 같이 localhost: port / d 를 방문 하면 401 rewrite 에서 지정 하지 않 은 flag 를 되 돌려 줍 니 다. flags 옵션 으로 뒤의 명령 을 종료 할 수 있 습 니 다.replacement 이 http: /, https: / 또는 $scheme 로 시작 하면 요청 이 뒤로 실행 되 지 않 고 redirect 는 클 라 이언 트 에 게 직접 돌아 갑 니 다.
flag 옵션
1、last ngx_http_rewrite_module , uri location
2、break break , location
3、redirect,replacement 'http://' , 302
4、permanent, 301
요청 한 scheme 와 servername_in_redirect 와 portin_redirect 명령 형식 생 성
nginx - ingress 의 rewrite 주해
공식 링크 예제:
...
nginx.ingress.kubernetes.io/rewrite-target: /$2
...
spec:
rules:
- host: aa.xxx.net
http:
paths:
- backend:
serviceName: svc-gateway
servicePort: 8080
path: /gateway(/|$)(.*)
- backend:
serviceName: svc-ui
servicePort: 80
path: /
tls:
- hosts:
- aa.xxx.net
secretName: xxx.net
위 설정 에 따라 aa. xxx. net / gateway / a / b 를 방문 하면 aa. xxx. net / a / b 로 다시 쓰 겠 습 니 다. 즉, 제 가 다시 쓰 기 를 요청 한 후에 새로운 uri 에 따라 다시 일치 합 니 다. 그렇다면 경로 path: / a 를 추가 합 니 다. 그러면 다시 쓰 면 새로운 요청 은 이 path 로 갑 니 다. 그러나 실제 되 돌아 오 는 결 과 는 다음 설정 방식 과 는 다 릅 니 다. 이것 은 약간 혼 란 스 럽 습 니 다.분명 한 형님 께 서 알려 주 셔 서 감사합니다!
두 번 째 방식:
...
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/server-snippet: |
if ($uri ~* "/gateway/.*") {
rewrite ^/gateway/(.*) /$1 break;
}
nginx.ingress.kubernetes.io/use-regex: "true"
...
spec:
rules:
- host: aa.xxx.net
http:
paths:
- backend:
serviceName: svc-gateway
servicePort: 8080
path: /gateway(/|$)(.*)
- backend:
serviceName: svc-gateway
servicePort: 8080
path: /(admin|bg|auth|monitor)
- backend:
serviceName: svc-ui
servicePort: 80
path: /
tls:
- hosts:
- aa.xxx.net
secretName: xxx.net
nginx. ingress. kubernetes. io / server - snippet 주 해 는 server 블록 에서 사용자 정의 설정 에 사용 되 며, nginx 설정 을 써 서 더 많은 수 요 를 실현 할 수 있 습 니 다.서버 블록 당 한 번 만 사용 할 수 있 습 니 다.이 방식 으로 proxy 와 유사 한 것 을 실현 하 였 습 니 다.pass 의 요구 사항
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단! Certbot을 사용하여 웹 사이트를 SSL(HTTPS)화하는 방법초보자가 인프라 주위를 정돈하는 것은 매우 어렵습니다. 이번은 사이트를 간단하게 SSL화(HTTP에서 HTTPS통신)로 변경하는 방법을 소개합니다! 이번에는 소프트웨어 시스템 Nginx CentOS7 의 환경에서 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.