localhost:3280/some/long/url을 localhost:3000으로 미러링

localhost:3280/some/long/url을 localhost:3000으로 미러링

저는 localhost 3280에서 실행되는 웹 서비스를 가지고 있습니다. /some/long/urllocalhost의 포트 3000에서 Elasticsearch에 액세스하고 싶습니다.

포트 전달, 미러링, 프록시를 통해 이 작업을 수행할 수 있나요? 가장 좋은 방법은 무엇입니까?

편집: 서비스가 3280에서 실행 중이고 다운된 3000에서 액세스하고 싶다는 뜻입니다.

답변1

두 개의 서로 다른 위치(iptables 및 apache)를 유지해야 하고 localhost:3280에 액세스할 수 없다는 부작용이 있는 slm의 답변과 비교하여 결과를 얻기 위해 Apache만 사용할 것입니다. 이는 / on 3000을 통해 ElasticSearch를 제공합니다(사용자를 localhost:3280/some/long/url로 "리디렉션"하는 대신 - 브라우저에 표시되는 URL을 변경). 이 솔루션은 4단계와 7단계를 한 번에 처리합니다(#7의 애플리케이션은 레벨 #4의 다른 IP로 트래픽을 리디렉션할 수 있습니다).

이미 mod_proxyApache를 로드한 경우 포트 3000을 변경할 수 있습니다 ( 가상 호스트 선언에서 127.0.0.1 대신 <VirtualHost>사용된다고 가정합니다 ).*

<VirtualHost *:3000>
    .
    .
    .

    RewriteEngine On
    ProxyPass / http://127.0.0.1:3280/some/long/url 
    ProxyPassReverse / http://127.0.0.1:3280/some/long/url 
</VirtualHost>

편집하다:규칙을 3000으로, Proxypass를 3280으로 수정하고, slm 제안과의 차이점을 명확히 하고, ProxyPass에서 127.0.0.1 변경에 대한 요점을 제거합니다(가상 호스트 조각이 원래 질문에서 요청한 것과 정확히 같기 때문입니다).

인용하다:

가상 호스트 지시어에 대한 Apache 문서 그리고 ProxyPass 지시문에 대한 Apache 문서입니다.

답변2

포트 리디렉션

다음 2가지 규칙을 사용하여 원하는 작업을 수행할 수 있습니다.

$ sudo iptables -t nat -A PREROUTING -p tcp --dport 3000 -j REDIRECT \
      --to-port 3280

$ sudo iptables -t nat -A OUTPUT -p tcp -d 127.0.0.0/8 --dport 3000 -j REDIRECT \
      --to-port 3280

localhost 외부에서 이 규칙에 액세스하려면 호스트의 IP 주소(예: 192.168.1.10)를 사용하여 이 규칙을 추가해야 합니다.

$ sudo iptables -t nat -A OUTPUT -p tcp -d 192.168.1.10 --dport 3000 \
      -j REDIRECT --to-port 3280

리디렉션/ -> /some/long/url

이는 Apache의 재작성 규칙을 사용하여 수행할 수 있습니다. 이는 Apache httpd.conf파일에 추가될 수 있습니다. 예를 들면 다음과 같습니다.

RewriteEngine on
RewriteRule ^$ /some/long/url [R=301,L]

왜 도구가 2개인가요?

그렇다면 아파치는 왜 필요할까요 iptables? 이는 다음과 관련이 있습니다.개방형 시스템 상호 연결 모델. OSI 모델에는 7개의 레이어가 있습니다.

#7.지원(지원까지 네트워크 프로세스)

#6.표현(데이터 표현, 암호화 및 암호 해독, 기계 종속 데이터를 기계 독립적 데이터로 변환)

#5.세션(호스트 간 통신, 애플리케이션 간 세션 관리)

#4.전송 - (엔드 투 엔드 연결성, 신뢰성 및 흐름 제어)

#삼.네트워크 - (경로 결정 및 논리적 주소 지정)

#2.데이터 링크 - (물리적으로 주소 지정됨)

#1.물리학 - (미디어, 신호 및 바이너리 전송)

iptablesApache는 계층 #4에서 데이터를 처리하고 Apache는 계층 #7에서 데이터를 처리합니다. 데이터를 봉투와 유사하다고 생각하십시오. 봉투 외부에는 배달될 주소(포트 번호)가 포함되어 있습니다. 이는 OSI 모델의 계층 4입니다.

봉투의 내용(HTTP + URL)은 Apache에 의해 계층 7에서 조작되어야 합니다.

인용하다

관련 정보