반응형
Kubernetes 입력 재작성
나는 현재 PHP 모노리스를 쿠버네티스로 포팅하고 있는데, URL을 다시 쓰는 데 문제가 있다.
그 시스템은 사용하고 그것은 모두 잘 작동한다. 문제는 nginx 입력이 양호하게 재생되도록 설정하는 것입니다.
이전 시스템에는 다음과 같은 재작성 규칙이 있었습니다:
try_files $uri $uri/ @rewrite;
location @rewrite {
rewrite ^/(.*)$ /index.php?_url=/$1;
}
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 1.2.3.4:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location ~* \.(js|css|png|jpg|jpeg|gif|svg)$ {
expires max;
log_not_found off;
rewrite "/[a-z0-9]{40}/([^.]+)\.(js|css|png|jpg|jpeg|gif|svg)$" /assets/$1.$2;
}
나는 내 nginx 입력을 위해 다음 주석을 시도했다:
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /index.php?_url=/$1
hosts:
- site.kube
paths: [
/(.*),
/[a-z0-9]{40}/([^.]+)\.(js|css|png|jpg|jpeg|gif|svg)$
]
다음은 저의 질문입니다:
파라미터를 사용하는 것이 아니라 파라미터를 사용합니다. 어떻게 설정해야 하나요? rewrite-target을 로 설정하면 경로는 작동하지만 다음과 같습니다:
자산에 대한 경로는 어떻게 구현합니까?
제가 더 많은 정보를 제공할 수 있는지 알려주세요. 감사해요.
편집
댓글의 질문에 대한 응답으로, 여기 몇 가지 버전 출력이 있다.
쿠베르네테스(최신 미니쿠베, 작성 당시):
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.3", GitCommit:"b3cbbae08ec52a7fc73d334838e18d17e8512749", GitTreeState:"clean", BuildDate:"2019-11-14T04:24:29Z", GoVersion:"go1.12.13", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.2", GitCommit:"c97fe5036ef3df2967d086711e6c0c405941e14b", GitTreeState:"clean", BuildDate:"2019-10-15T19:09:08Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"linux/amd64"}
():
$ kubectl describe pod nginx-ingress-controller-6fc5bcc8c9-qnmz2 -n kube-system
{
[ ... ]
Image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.26.1,
[ ... ]
}
해결책을 찾았어요!
그 이유는 루트 블록이 처리되지 않기 때문입니다. 이는 내 배포에서 nginx 포드로 요청을 적절하게 전파하기 위해 필요한 다음 줄과 관련이 있으며, 이 줄은 입력 주석으로 필요합니다:
nginx.ingress.kubernetes.io/rewrite-target: /$1
그것을 작동시키기 위해, 내가 한 일은 다음과 같은 것뿐이었다:
nginx 구성을 위한 내 구성 맵에서, 나는 -블록에서 을 제거했다.
-블럭에서 다음과 같이 변경했습니다:
try_files $uri $uri/ =404;
수신인:
try_files $uri $uri/ @rewrite;
이렇게 함으로써 문제가 해결되었는데, 왜냐하면 tngx로 들어오는 모든 요청은 결국 -block에 들어가게 되고 따라서 서버의 요청을 우회하기 때문이다.
반응형
'개발하자' 카테고리의 다른 글
테라폼을 사용하여 코스모스 DB 연결 문자열을 출력하는 방법 (0) | 2023.08.23 |
---|---|
이름만 짝수로 배열하다 (0) | 2023.08.22 |
하나가 실패하더라도 모든 Pydantic 검증자를 거친 다음 FastAPI 응답에서 여러 ValueErrors를 제기하는 방법은 무엇입니까? (0) | 2023.08.21 |
바디 요소를 벨벳으로 스타일링 (0) | 2023.08.20 |
플러터: iOS 빌드 실패 (0) | 2023.08.20 |