IPTables 포트 리디렉션은 Apache를 중단해야 하지만 그렇지 않습니다.

IPTables 포트 리디렉션은 Apache를 중단해야 하지만 그렇지 않습니다.

Apache에서 로드 밸런싱을 설정했습니다 httpd.

<VirtualHost *:80>
        DocumentRoot /var/www/html
        ServerName xxx.xxx.xxx.com
        ProxyRequests           Off
        ProxyPreserveHost       On
        ProxyPass / http://xxx.xxx.xxx.xxx:8080/
        ProxyPassReverse / http://xxx.xxx.xxx.xxx:8080/
</VirtualHost>

:8080tomcat동일한 호스트에서 실행되는 Apache 애플리케이션 서버 입니다 . 내가 일하는 곳에서는 로그 보존 요구 사항이 있으므로 모든 것을 Apache로 변경하면 httpd분석하기에 꽤 좋을 것이라고 생각했습니다.

최종 사용자가 가질 수 있는 링크나 책갈피를 손상시키지 않고 모든 공개 요청이 포트 80을 통과하도록 하려고 합니다. 모든 것이 포트 80을 통해 애플리케이션으로 들어오는 것처럼 보이도록 일부 포트 변환을 수행하여 이 작업을 수행하겠습니다. 위의 로드 밸런싱을 고려하지 않고 테이블에 다음 규칙을 추가했습니다 nat.

-A PREROUTING -i eth0 -p tcp -m tcp --dport 8080 -j REDIRECT --to-ports 80
-A PREROUTING -i eth0 -p tcp -m tcp --dport 8081 -j REDIRECT --to-ports 80

문제는 httpd또는 를 통해 앱에 직접 액세스 할 수 있다는 것입니다 :8080. 각 규칙의 패킷 수도 증가하므로 분명히 일치합니다.

내 질문은 이것입니다:이것이 무한 루프를 생성하지 않는 이유는 무엇입니까?

:8080요청이 전달되고 요청 httpd자체가 를 통과하여 요청을 검색하려고 시도하므로 :8080새 이력서의 형식을 다시 지정할 때까지 루프가 계속 진행됩니다.

답변1

대답은 에 있습니다 -i eth0.

비록 당신 17.98.65.28이 IP라고 가정하고 연결하기 위해 httpd를 설정하더라도 eth0, 트래픽은 실제로 그것을 통해 흐르지 않고 eth0사용될 것입니다 lo.

그 이유는 상자 자체가 소유한 IP로 라우팅될 때 트래픽이 를 통해 흐르기 때문입니다 lo.

ip route get 17.98.65.28

dev lo해당 주소로 트래픽을 보내는 데 어떤 인터페이스가 사용될 것인지 알려주는 this 이 포함된 줄이 표시됩니다 .

예를 들어 내 노트북에는 다음이 wlan0있습니다 10.252.28.62.

$ ip route get 10.252.28.62
local 10.252.28.62 dev lo  src 10.252.28.62 
    cache <local> 

관련 정보