설정된 Apache 하위 도메인이 다른 하위 도메인으로 리디렉션됨

설정된 Apache 하위 도메인이 다른 하위 도메인으로 리디렉션됨

afor 및 bin 2개의 하위 도메인을 설정하려고 합니다 domain.com. 저는 두 개의 .conf 파일을 사용하는데, 이는 ServerName 및 ProxyPass의 변경 사항에 따라 거의 동일해 보입니다.

<VirtualHost *:80>
        ServerName a.domain.com #This was added as a try for a fix. 
        Redirect permanent /  https://a.domain.com/
</VirtualHost>

<VirtualHost *:443>

        ServerName a.domain.com
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/a

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        #SSL stuff

        #Proxies

        ProxyPass        /        https://a.domain.com:8444/
        ProxyPassReverse /        https://a.domain.com:8444/
        ProxyPass        /a/      https://a.domain.com:8444/
        ProxyPassReverse /a/      https://a.domain.com:8444/
        ProxyPass        /b/      https://b.domain.com:8445/
        ProxyPassReverse /b/      https://b.domain.com:8445/

</VirtualHost>

이것은 현재 프로덕션 환경에 있는 것과 유사한 것을 복제하여 테스트 환경에서 수행되고 있습니다. /etc/hosts에서 127.0.0.1에 a.domain.com및를 추가했습니다 b.domain.com. 프로덕션 중인 DNS에는 동일한 IP에 대한 기록이 있습니다 a.domain.com. b.domain.com(저는 이것을 테스트하는 컴퓨터에서도 이 작업을 수행했습니다.)

또한 루트 디렉터리의 콘텐츠는 제공하지 않습니다. 제목에 명시된 문제를 해결하려고 노력 중이라고 덧붙였습니다. 하지만 두 디렉토리 모두에 간단한 HTML이 있습니다.

실제 문제는 무엇입니까?

간단히 말해서 을 시도하면 결과는 예상대로 a.domain.com의 웹앱입니다 . localhost:8444시도하면 b.domain.com결과도 가 localhost:8444아닌 입니다 localhost:8445. a.conf및 가 모두 b.conf활성화되어 있으며 을 비활성화하면 a.conf가 올바르게 표시됩니다 localhost:8445. like를 시도하면 a.domain.com/b리디렉션이 다시 로 확인됩니다 a.domain.com.

나는 몇 가지 질문과 튜토리얼을 읽었으며 대부분은 내 구성에서 작동하는 것이 있거나 내 Apache 버전에는 필요하지 않은 NameVirtualHost를 추가했습니다. 또한 요청이 동일한 IP이기 b때문에 일치한다고 생각하여 포트 80에 ServerName을 추가했지만 a.conf그것도 작동하지 않았습니다.

내가 여기서 무엇을 놓치고 있는 걸까요? 내가 무시하고 있는 것 같은 mod_proxy 관련 문제인가요? 가능하다면 웹앱당 하나의 파일을 보관하고 싶습니다. 감사해요!

이것은 Ubuntu 18.04.2, Apache 2.4(mod_proxy 및 mod_ssl), Tomcat 9에 있습니다. 원하는 다른 정보가 있으면 최선을 다해 전달하겠습니다.

업데이트

이 구성으로도 시도했습니다. 동일한 바람직하지 않은 결과.

<VirtualHost *:80>
        ServerAlias a.domain.com
        Redirect permanent /  https://a.domain.com/
</VirtualHost>

<VirtualHost *:443>

        ServerName a.domain.com
        ServerAdmin webmaster@localhost

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        #SSL stuff

        #Proxies

        Redirect /b https://b.domain.com

        <Location />
                ProxyPass               https://localhost:8444/
                ProxyPassReverse        https://localhost:8444/
        </Location>

        <Location /a>
                ProxyPass               https://localhost:8444/
                ProxyPassReverse        https://localhost:8444/
        </Location>

</VirtualHost>

업데이트

좋아, 방금 매우 짜증나는 것을 발견했습니다. 브라우저를 사용하여 a.domain.com또는 중 하나를 입력하면 b.domain.com둘 다 로 확인됩니다 a.domain.com. 이것이 제가 원래 설명한 문제입니다. 그러나 try https://a.domain.com또는 인 경우 https://b.domain.com둘 다 올바른 서버인 ato 8444bto 로 확인됩니다 8445.

이것은 매우 실망스러운 일이므로 잠시 쉬고 분석해 보겠습니다.

업데이트

긴 브레이크를 밟은 후 무슨 일이 일어났는지 확인하기 위해 무작위로 몇 가지 다른 조정을 시도했지만 HTTPS를 사용할 때를 제외하고는 예상대로 아무 것도 작동하지 않았습니다. 요청에서 무엇이 전송되고 있는지 확인하기 위해 Postman을 설치했고 Postman에서 HTTP와 HTTPS가 모두 호스트를 올바르게 사용한다는 것을 알았습니다. 더 좋거나 나쁨: 실제 응답에는 a.domain.com및 에 대한 다른 시작 페이지가 표시됩니다. b.domain.com이는 Postman을 사용할 때 내 구성이 제대로 작동하고 있음을 의미합니다.

나는 이 모든 시련이 단지 캐시 문제일지도 모른다고 생각하지만, 내가 선택한 테스트 브라우저(Firefox 개발)는 항목을 캐시하지 않도록 설정되어 있습니다. 컬과 다른 브라우저를 사용하여 응답을 확인하겠습니다.

답변1

범죄자:캐시.

어느 시점에서 내 브라우저의 구성이 변경되었고(아마도 업데이트?) 하위 도메인으로 설정하려고 했던 테스트 사이트를 포함하여 3GB 이상의 캐시가 생겼습니다. 좋아요.

캐시를 지운 후 예상대로 내 URL에 도달하면 자체 서명된 인증서에 대한 경고가 표시됩니다. 위험을 감수한 후 적절한 사이트로 리디렉션되었습니다. 이는 b.domain.com프로토콜을 추가하지 않고 사용하는 것입니다 .

이것이 제대로 작동하는지 확인하기 위해 다른 7개의 브라우저를 모두 테스트하고(확인해야 함) 프로토콜 유무에 관계없이 컬링했으며 결과도 원하는 대로 나왔습니다.

결국 구성은 괜찮았습니다. 필요하신 경우를 대비해 여기에 게시하겠습니다.포트 80에서 포트 433으로 즉시 리디렉션되는 Proxy_mod를 사용하여 하위 도메인별로 특정 Tomcat 인스턴스로 프록싱하는 Apache 서버.

<VirtualHost *:80>
        ServerName a.domain.com
        Redirect permanent /  https://a.domain.com/
</VirtualHost>

<VirtualHost *:443>
        
        ServerName a.domain.com
        ServerAdmin [email protected]

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        #SSL stuff

        SSLEngine On
        SSLCertificateFile /etc/ssl/certs/DONT_USE_SELF_SIGNED.pem
        SSLCertificateKeyFile /etc/ssl/private/CERTS_IN_PRODUCTIve.key
        SSLVerifyClient none

        #Proxies
        ProxyRequests Off
        SSLProxyEngine on
        SSLProxyVerify none
        SSLProxyCheckPeerCN off
        SSLProxyCheckPeerName off
        SSLProxyCheckPeerExpire off

        #Redirections
        Redirect /b https://b.domain.com

        <Location />
                ProxyPass               https://localhost:8444/
                ProxyPassReverse        https://localhost:8444/
        </Location>

        <Location /a>
                ProxyPass               https://localhost:8444/
                ProxyPassReverse        https://localhost:8444/
        </Location>

</VirtualHost>

SSL 프록시 및 SSL에 대한 설정은 자체 서명된 인증서에 대한 것임을 고려하십시오. 생산적인 환경에 대해 이를 구현하는 경우 각각에 대한 관련 문서를 읽으십시오. 또한 이는 의 구성 파일입니다 a.domain.com. 해당 항목은 b.domain.com적절한 ServerName, ServerAlias, 리디렉션, 위치 및 localhost 포트와 정확히 동일합니다.

관련 정보