기본 HTTP 포트를 애플리케이션으로 리디렉션

기본 HTTP 포트를 애플리케이션으로 리디렉션

내 CentOS 서버에는 mydomain.com포트 8880에서 실행되는 svn 웹 애플리케이션이 있습니다. 포트를 숨기고 싶습니다. 이 시점에서 누군가 액세스를 원하면 를 통해 액세스해야 합니다 http://thisdomain.com:8880/svn. 애플리케이션을 액세스 가능하게 만들고 싶습니다 http://thisdomain.com/.

답변1

옵션 1: NAT 포트 전달

여기서 해야 할 일은 외부 포트 80의 요청을 포트 8880에서 실행되는 내부 프로그램으로 리디렉션하는 것뿐이라면 다음을 사용할 수 있습니다.iptables포워드 포트이를 위해:

# iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -j REDIRECT --to 127.0.0.1:8880

이해해야 할 몇 가지 사항은 다음과 같습니다.

  1. 내 생각엔 당신이 어떤 종류의 일을 하고 있는 것 같아요가상 사설 서버이므로 eth0인터페이스 이름이 정확하지 않을 수 있습니다. 그렇다면 교체해야합니다.

    그런데 공유 호스팅을 사용 중이거나 VPS에서 이를 허용하지 않는 경우 iptables다음 옵션으로 건너뛰세요.

  2. 위에서 언급한 대로 이 규칙은 이 내부 프로그램이 localhost 인터페이스에서만 수신하도록 구성했다고 가정합니다 127.0.0.1. 이렇게 하면 요청한 "숨겨진" 동작이 수행됩니다.

  3. 기존 방화벽 규칙이 현재 작성된 규칙을 방해할 수 있습니다. 현재 규칙을 수정하기 전까지는 바꿀 수 있는 방법이 없습니다 iptables. 하지만 그래도 작동하지 않으면 맹목적으로 다음과 같은 다른 규칙을 추가해 볼 수 있습니다.

    # iptables -A FORWARD -p tcp -i eth0 --dport 80 -j ACCEPT
    

    FORWARD기본 체인 규칙이 인 경우 DENY이와 유사한 것이 필요합니다.

  4. 시작 시 이러한 규칙이 있는지 확인해야 합니다.

    충분히 주의를 기울이면 /etc/sysconfig/iptablesCentOS에서 편집하여 이 작업을 수행할 수 있습니다. 이 파일은 명령줄 언어와 유사한 구문을 사용하지만 동일하지는 않습니다 iptables. 실수로 공용 서버에서 자신을 잠글 가능성을 줄이려면 로컬 가상 머신에서 이를 테스트해야 합니다.

    명령을 에 넣는 것이 더 안전 /etc/rc.local하지만 iptables서비스를 다시 시작하면(예: service iptables reload) 사용자 정의 규칙이 삭제됩니다( /etc/sysconfig/iptables.

이 내용을 모두 읽고 왜 이 옵션 1을 만들었고 아래 옵션 2를 더 간단하게 만들었는지 궁금하시다면, 이는 더 효율적이기 때문입니다. 포트 전달을 설정하면 리소스에 관한 한 기본적으로 "무료"입니다.

옵션 2: HTTP 프록시

또 다른 방법은 일종의HTTP 프록시. 나는 사용했다소규모 에이전트이런 일을 위해서. NAT 포트 전달보다 더 유연하며 운영 체제의 방화벽을 깨뜨릴 필요가 없습니다.

CentOS용으로 패키지되어 있습니다.에펠, EPEL 저장소를 활성화한 후에는 간단하게 yum install tinyproxy.

재고 파일에서 다음과 같이 변경하십시오 /etc/tinyproxy/tinyproxy.conf.

Port 80
Upstream localhost:8880

또한 AllowTinyproxy가 외부 IP로부터의 연결을 허용하도록 다음 줄을 주석 처리하세요.

# Allow 127.0.0.1

service httpd stopservice tinyproxy start이( )를 시작하려고 할 때 Apache가 포트 80을 사용하므로 실행 중이 아닌지 확인해야 합니다( ) .

Tinyproxy에 대한 문서는 간결한 참조이므로 이 사용법이 UpstreamTinyproxy의 해킹을 사용하는 것보다 더 나은 대안인지 확실하지 않습니다.역방향 프록시특징. 하지만 나에게는 효과가 있었고 구성 파일을 덜 변경해야 했기 때문에 그렇게 했습니다.

왜 처음부터 이것을 위해 Apache를 사용하지 않았는지 궁금하다면 그 이유는 단순히 더 복잡하고 더 많은 리소스가 필요하기 때문입니다.Apache에는 프록시 기능이 있습니다. 그러나 Apache의 모든 기능이 필요하지 않은 한 Tinyproxy를 사용할 이유가 없습니다.

NAT 포트 전달과 달리 Tinyproxy를 실행하려면 일부 시스템 리소스가 필요합니다. 약간의 RAM이 필요하며 트래픽 수준이 충분히 높으면I/O 제한. 그러나 서버가 특별히 바쁘지 않은 경우에는 서버가 실행 중이라는 사실조차 눈치채지 못할 수도 있습니다.

답변2

이는 httpd.conf 파일에서 가상 호스트로 수행됩니다. 그것은 다음과 같습니다:

<VirtualHost thisdomain.com:8880>
DocumentRoot /www/docs/svn/myapp
ServerName thisdomain.com
</VirtualHost

Apache가 올바른 포트에서 수신 대기하고 있는지 확인하십시오. 해당 위치를 찾아 listen 80포함 listen 8880

관련 정보