하위 도메인을 동일한 서버의 다른 포트로 리디렉션하려면 어떻게합니까?


67

동일한 서버의 특정 포트로 리디렉션하려는 하위 도메인이 있습니다. 내가 가지고 있다고

dev.mydomain.com 

내가 원하는 dev.mydomain.com투명로 리디렉션 mydomain.com:8080나는 원래 하위 도메인 이름을 브라우저의 URL을 보존하려는.

Apache 2.2에서이 작업을 어떻게 수행합니까? 기본 포트에서 Apache 2.2를 실행하고 80있습니다. 이 작업을 수행하기 위해 쓰기 구성을 파악할 수 없습니다.

이미 dev.mydomain.comDNS에서를 해결하도록 설정했습니다 mydomain.com.

이것은 라우팅 할 수없는 IP 주소를 가진 인트라넷 개발 서버를위한 것이므로 공개적으로 직면하는 서버를 손상시키는 악용 및 보안에 대해서는 걱정하지 않습니다.

답변:


69

해결책

Miles Erickson이 올바른 방향으로 설정 한 후 마침내 생각해 냈습니다. 주소 표시 줄에 리디렉션 된 서버와 포트가 아닌 요청의 원래 하위 도메인 / 도메인을 반영하기를 원했지만 그는 나를 사용하여 솔루션을 제공하는 올바른 경로를 VirtualHost찾았으며 마침내의 사용을 포함하는 솔루션을 찾았습니다 mod_proxy.

<VirtualHost *:80>
    ServerAdmin me@mydomain.com
    ServerName dev.mydomain.com
    ProxyPreserveHost On

    # setup the proxy
    <Proxy *>
        Order allow,deny
        Allow from all
    </Proxy>
    ProxyPass / http://localhost:8888/
    ProxyPassReverse / http://localhost:8888/
</VirtualHost>

7
이 답변이 효과가없는 모든 사람들을 위해 모드 mod_proxy뿐만 아니라 모드 도 활성화해야합니다 proxy_http.
matewka

9

dev.mydomain.com을 mydomain.com의 IP로 확인할 수 있다고 가정하면 httpd.conf에 다음을 추가 할 수 있습니다.

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName dev.mydomain.com
    redirect / http://mydomain.com:8080/
</VirtualHost>

관련 아파치 문서 :

  1. 이름 기반 가상 호스트 생성 가이드
  2. VirtualHostNameVirtualHost를 포함한 핵심
  3. 리디렉션

관련 질문 : 호스트 이름을 기반으로하는 Apache 리디렉션

(참고 :이 답변의 원래 버전은 @ChrisS가 지적했듯이 URL의 도메인 부분을 구문 분석 할 수없는 RedirectMatch의 사용을 잘못 제안했습니다.)


1
내가 실제로 사용한 것에 대한 자체 제공 답변을 참조하십시오. 리디렉션 대신에 원래 호스트를 보존하기 위해 mod_proxy를 사용하는 VirtualHost의 아이디어입니다. 이것은 내부 서버이므로 mod_proxy의 보안 또는 악용에 관심이 없습니다.

1
다른 많은 제안을 찾았지만 궁극적으로 Windows Server 2008 R2 / Apache 2.2.25에서 효과적이었습니다.
HPWD

1
이 솔루션의 문제점은 형제에게는 첫 번째 도메인에 머 무르지 않고 두 번째 도메인에 302를 얻는다는 것입니다.
Pleymor

7

터미널에서 다음 줄을 실행하십시오 (도메인 및 하위 도메인 이름을 올바르게 지정하십시오)

sudo nano /etc/apache2/sites-available/subdomain.example.com.conf 

다음 코드를 붙여 넣고 요구 사항으로 변경하십시오.

<VirtualHost *:80>
        ServerAdmin admin@example.com
        ServerName subdomain.example.com
        ServerAlias subdomain.example.com
        ProxyRequests Off

        #ProxyPass / http://localhost:8080/
        <Location />
                ProxyPreserveHost On
                ProxyPass http://example.com:8080/
                ProxyPassReverse http://example.com:8080/
        </Location>
     # Uncomment the line below if your site uses SSL.
     #SSLProxyEngine On
</VirtualHost>

터미널에서 다음 행을 실행하십시오 (도메인 및 서브 도메인 이름을 올바르게 지정하십시오)

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2ensite subdomain.example.com.conf
sudo service apache2 restart

3
이 답변과 허용되는 답변간에 근본적인 차이가 있습니까?
kasperd

1
대부분의 사람들은 추가를 잊어 버려 sudo a2enmod proxy_http제대로 달리기가 어려워집니다. 또한 더 많은 학습을 돕기 위해 처음부터 끝까지 전체 프로세스를 제공하려고합니다. 질문 해 주셔서 감사합니다.
MAK Ripon

1
"ProxyRequests Off"를 언급하여 +1
Sebastian

1
이것은 나를 위해 작동하지 않습니다. 'sudo a2enmod subdomain.domain.com.conf'에 "오류 : xyz 모듈이 없습니다!" '기본'구성에서 언급해야합니까?
Dirk Schumacher

2
등록 하위 도메인의 보정 sudo a2ensite sub.yourdomain.com
알리 아즈 하르

5

기본 vhost 구성에 다음 줄을 추가하십시오.

ProxyPreserveHost On
ProxyPass / http://example.com:8080/
ProxyPassReverse / http://example:8080/

여기에는 Apache에서 mod_proxy가 필요합니다.


이것은 리디렉션이 아닙니다. 연결을 프록시합니다. 주의 깊게 구성하지 않으면 mod_proxy를 사용하는 것은 매우 쉽게 악용 될 수 있습니다. 나는 이것을 반대하는 것이 좋습니다.
Chris S

4
OP에 따라 리디렉션을 원하지 않습니다. 그는 원래 URL이 주소 표시 줄에 남아 있기를 원합니다. 이것은 mod_proxy 또는 mod_rewrite를 사용한다는 것을 의미하며, mod_rewrite를 피하는 것이 좋습니다.
어댑터

4

당신은 mod_rewrite를 찾고 있습니다. 다음기본고급 구성에 대한 많은 예를 포함 하는 Apache 설명서에 대한 링크입니다 .

설명서를 직접 해석 할 수없는 경우 httpd.conf에 추가하십시오.

RewriteEngine on
RewriteCond %{HTTP_HOST} ^dev\.example\.com$ [NC]        
RewriteRule ^(.*)$ http://example.com:8080$1 [R=301]    

그리고 이것이 분명한 예가 아니라면, 여기 mod_rewrite 초보자 가이드 링크 도 있습니다.


1
공유 호스팅에 있습니다. 재 작성이 유일한 옵션입니다. .htaccess 파일을 만들 수 있지만 프록시 나 가상 호스트는 만들 수 없습니다.
abalter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.