하위 폴더를 사용하는 nginx proxy_pass


11

좋아,이 작업은 간단해야하지만 제대로 작동하지 않습니다. 내 도메인 이름 뒤에 (실제로 해당 도메인 이름의 IP 뒤에) 하위 폴더를 만들고 싶습니다. 동일한 폴더의 특정 포트로 리디렉션됩니다. 본질적으로 많은 포트를 사용하지 않아도됩니다.

여기 내 nginx 설정이 있습니다.

server {
    listen 80;

    index index.html index.htm index.nginx-debian.html index.php;

    server_name aaa.bbb.ccc.ddd;

    location ^~ /app2 {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
        proxy_pass http://aaa.bbb.ccc.ddd:8001;
    }
}

따라서 aaa.bbb.ccc.ddd / app2에 액세스하면 http : //aaa.bbb.ccc.ddd : 8001 로 해결하고 싶습니다 .

이것은 아마도 너무 복잡 할 수 있습니다. 내가 여기서 무엇을 놓치고 있습니까?

감사합니다 Pat


"포트로 리디렉션"또는 "포트로 프록시"를 의미합니까? 그들은 상당히 다릅니다. 귀하의 질문이 불분명합니다. 아마도 클라이언트를 포함하여 유스 케이스를 확장 할 수 있습니다.
Tim

답변:


12

이 질문을 리버스 프록시 질문으로 태그 했으므로 사용자가 http://aaa.bbb.ccc.ddd/app2브라우저에서 URL 만 볼 수 있도록 요청을 프록시하고 싶다고 가정 합니다.

location블록을 다음과 같이 변경할 수 있습니다 .

location ~/app2(.*)$ {
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host;
    proxy_pass http://aaa.bbb.ccc.ddd:8001$1;
}

여기에서 우리는 후 URI 부분을 캡처 /app2하는 $1변수, 그리고 그것을 사용 proxy_pass지침.


감사합니다. 그 트릭을했다. aaa.bbb.ccc.ddd : 8001 은 부분적으로 만 표시됩니다. 해당 페이지에는 웹 소켓과 많은 자바 스크립트가 있습니다. 포트를 프록시하고 Tim이 위에서 언급 한 것처럼 전달하지 않기 때문입니다. 실제로 nginx를 사용하여 달성 할 수 있습니까?
pAt84

aaa.bbb.ccc.ddd:8001페이지 에서 리소스의 URL은 어떤 모양 입니까? 대부분의 경우 /app2부품 을 포함하도록 URL을 수정해야합니다 .
Tero Kilkanen

그것은 실제로 웹 소켓 일뿐입니다 (일부 레이더 데이터, 자동차 ...). 소스 코드에는 "app2"의 부호가 없습니다.
pAt84

흠. websocket JS를 호출하려면 "var ws = new WebSocket ( 'ws : //'+ location.host + '/ ws');"를 사용하십시오. location.host는 이제 포트 번호를 놓치므로 더 이상 모든 것이 작동하지 않습니다.
pAt84

좋아, 일단 aaa.bbb.ccc.ddd / app2를 호출하면 내부적으로 aaa.bbb.ccc.ddd : 8001을 사용해야합니다. 다른 옵션은 모든 Java 스크립트를 변경하는 것입니다. 추론은 nginx를 사용하여 "일 포트 솔루션"을 제공하고 싶지만 액세스 한 후 (예 : http // aaa.bbb.ccc.ddd / app2를 통해) 내부적으로 필요합니다. aaa.bbb.ccc.ddd : 8001로 돌아갑니다. 가능합니까?
pAt84
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.