저는 localhost 3280에서 실행되는 웹 서비스를 가지고 있습니다. /some/long/url
localhost의 포트 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_proxy
Apache를 로드한 경우 포트 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.물리학 - (미디어, 신호 및 바이너리 전송)
iptables
Apache는 계층 #4에서 데이터를 처리하고 Apache는 계층 #7에서 데이터를 처리합니다. 데이터를 봉투와 유사하다고 생각하십시오. 봉투 외부에는 배달될 주소(포트 번호)가 포함되어 있습니다. 이는 OSI 모델의 계층 4입니다.
봉투의 내용(HTTP + URL)은 Apache에 의해 계층 7에서 조작되어야 합니다.