Nginx 역방향 프록시 및 URL 재작성

Nginx 역방향 프록시 및 URL 재작성

첫 번째 세그먼트는 제거하고 다음 세그먼트는 그대로 유지하도록 역방향 프록시에서 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. /adminnginx 라우팅 설정과 일치하는 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로 바꾸는 것입니다.

관련 정보