첫 번째 세그먼트는 제거하고 다음 세그먼트는 그대로 유지하도록 역방향 프록시에서 URL을 다시 작성하고 싶습니다. 프록시 패스에 도달하기 전에 이 작업이 수행되어야 합니다.
예:
/admin/auth/local ----> (REWRITES TO) /auth/local
/admin/auth/register -------> (REWRITES TO) /auth/register
내 위치 블록:
location /admin {
#add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass_header Set-Cookie;
proxy_read_timeout 30;
proxy_buffers 64 8k;
rewrite /admin / break;
proxy_pass http://127.0.0.1:9000;
나는 운없이 다음을 시도했습니다.
rewrite /admin / break;
답변1
여기에는 두 부분이 있습니다. 첫 번째는 nginx가 proxy_pass
.
다음 구성을 사용하면 /
접두사가 있는 백엔드 에 대한 수신 요청을 매핑할 수 있습니다 ./admin/
location / {
proxy_pass http://127.0.0.1:9000/admin/;
}
진술은 필요하지 않습니다 rewrite
.
두 번째 부분은 에서 실행 중인 애플리케이션에 의해 생성된 URL입니다 127.0.0.1:9000
. /admin
nginx 라우팅 설정과 일치하는 URL을 가지려면 접두사 없이 URL을 생성하도록 해당 애플리케이션을 구성해야 합니다 .
Nginx는 백엔드에서 생성된 콘텐츠에 대해 이러한 변경을 안정적으로 수행할 수 없습니다.
답변2
나는 당신이 프록시 패스에 첫 번째 세그먼트(관리자)를 추가하기만 하면 된다고 생각합니다.
proxy_pass http://www.example.com/admin/;
답변3
다음 스니펫을 시도해 볼 수 있습니다. 나를 위해 작동합니다.
location ~* /admin/(.*) {
...
rewrite .* /$1 break;
proxy_pass http://127.0.0.1:9000;
}
(.*)
첫 번째 줄부터 블록에서 로 검색됩니다 $1
. 아이디어는 뒤에 있는 URI를 검색 admin/
하고 모든 것을 해당 URI로 바꾸는 것입니다.