Apache 역방향 프록시 - 단일 도메인을 여러 IP로 설정하는 방법

Apache 역방향 프록시 - 단일 도메인을 여러 IP로 설정하는 방법

Apache 2.4와 함께 Debian 10 사용하기

일부 가상 머신을 실행하는 서버가 있습니다. 웹에서 액세스할 수 있게 만들고 싶지만 도메인 이름과 무료 SSL 인증서(고가의 와일드카드 인증서 아님)를 사용하고 URL 문자열의 오른쪽 절반(뒤쪽에".com")을 사용하여 매핑해야 하는 IP를 구분합니다.

내가 이해하는 바로는 역방향 프록시가 이를 달성할 수 있습니다. 그러나 설정하려고 하면 실패하고https://mydomain.com/nextcloud또는https://mydomain.com/rocketchat

루트 수준(https://mydomain.com) /var/www/html/에서 색인 페이지를 가져옵니다. 따라서 역방향 프록시는 아무런 효과가 없습니다.

그래서 내 질문은: default-ssl.conf파일을 작동시키려면 어떻게 인코딩해야 합니까?

나는 다음과 같은 것을 시도했습니다 :

ProxyPreserveHost On
ProxyPass         /rocketchat/         http://192.168.1.33:3000/
ProxyPassReverse  /rocketchat/         http://192.168.1.33:3000/

ProxyPass         /nextcloud/     http://192.168.1.16/nextcloud/
ProxyPassReverse  /nextcloud/     http://192.168.1.16/nextcloud/

내가 원하는 일의 예:

만약 내가 간다면https://mydomain.com/nextcloud그런 다음 192.168.1.16에 연결됩니다.

만약 내가 간다면https://mydomain.com/rocketchat그런 다음 192.168.1.33:3000에 연결됩니다.


나는 내 문제를 알아 내려고 노력하고 있습니다. 이 다이어그램이 제가 원하는 것을 확고히 하는 데 도움이 되기를 바랍니다.

차트


편집: Apache 오류 로그(v61.local 시스템은 로켓챗 시스템입니다):

[Tue Apr 27 17:23:44.975875 2021] [ssl:error] [pid 22473] [remote 192.168.1.16:443] AH01961: SSL Proxy requested for v61.local:443 but not enabled [Hint: SSLProxyEngine]
[Tue Apr 27 17:23:44.976000 2021] [proxy:error] [pid 22473] AH00961: HTTPS: failed to enable ssl support for 192.168.1.16:443 (192.168.1.16)
[Tue Apr 27 17:27:16.346092 2021] [mpm_prefork:notice] [pid 22340] AH00169: caught SIGTERM, shutting down
[Tue Apr 27 17:27:16.488467 2021] [ssl:warn] [pid 22634] AH01909: v61.local:443:0 server certificate does NOT include an ID which matches the server name
[Tue Apr 27 17:27:16.577206 2021] [ssl:warn] [pid 22636] AH01909: v61.local:443:0 server certificate does NOT include an ID which matches the server name
[Tue Apr 27 17:27:16.587100 2021] [mpm_prefork:notice] [pid 22636] AH00163: Apache/2.4.38 (Debian) OpenSSL/1.1.1d configured -- resuming normal operations
[Tue Apr 27 17:27:16.587260 2021] [core:notice] [pid 22636] AH00094: Command line: '/usr/sbin/apache2'
[Tue Apr 27 17:27:39.035976 2021] [mpm_prefork:notice] [pid 22636] AH00169: caught SIGTERM, shutting down
[Tue Apr 27 17:27:39.165342 2021] [ssl:warn] [pid 22653] AH01909: v61.local:443:0 server certificate does NOT include an ID which matches the server name
[Tue Apr 27 17:27:39.269657 2021] [ssl:warn] [pid 22655] AH01909: v61.local:443:0 server certificate does NOT include an ID which matches the server name
[Tue Apr 27 17:27:39.286080 2021] [mpm_prefork:notice] [pid 22655] AH00163: Apache/2.4.38 (Debian) OpenSSL/1.1.1d configured -- resuming normal operations
[Tue Apr 27 17:27:39.286292 2021] [core:notice] [pid 22655] AH00094: Command line: '/usr/sbin/apache2'
[Tue Apr 27 17:27:44.967985 2021] [ssl:error] [pid 22656] [remote 192.168.1.16:443] AH01961: SSL Proxy requested for v61.local:443 but not enabled [Hint: SSLProxyEngine]
[Tue Apr 27 17:27:44.968100 2021] [proxy:error] [pid 22656] AH00961: HTTPS: failed to enable ssl support for 192.168.1.16:443 (192.168.1.16)
[Tue Apr 27 17:27:47.329941 2021] [ssl:error] [pid 22657] [remote 192.168.1.16:443] AH01961: SSL Proxy requested for v61.local:443 but not enabled [Hint: SSLProxyEngine]

답변1

거의 다 왔습니다. 당신은 테스트 중입니다https://mydomain.com/nextcloud하지만 테스트를 해봐야 해요https://mydomain.com/nextcloud/(끝 부분에 슬래시가 있음을 참고하십시오).

그 이유는 디렉토리가 없기 때문에 /var/www/html/nextcloud자동 "디렉토리를 처리하기 위해 후행 슬래시를 추가하겠습니다" 코드가 트리거되지 않고 대신 404가 표시되기 때문입니다.

일단 가지고 있으면https://mydomain.com/nextcloud/작동하려면 리디렉션하는 규칙이 필요합니다.https://mydomain.com/nextcloud도착하다https://mydomain.com/nextcloud/(디렉토리를 만들 nextcloud거나 사용하십시오 . 이것이 더 깨끗한 솔루션이 Redirect아니라면 중요하지 않습니다 .)Redirect

답변2

Apache의 구성은 프록시되는 웹 애플리케이션에 따라 크게 달라집니다. 웹 애플리케이션이 다음을 사용하는 경우 추가 지시어가 필요할 수 있습니다.websockets, 예를 들어 요즘에는 매우 흔한 일입니다. 또한 많은 웹 애플리케이션은 HTTP 호스트 내의 디렉터리 경로에서의 실행을 지원하지 않으며 /전체 루트 경로를 자체적으로 소유한다고 암시적으로 가정합니다. 예를 들어, 경로에서 이러한 애플리케이션을 실행하려면 /webapp웹 애플리케이션의 내부와 신중하게 만들어진 일부 Apache 재작성 규칙에 대한 깊은 이해가 필요합니다.

그러나 우연히 nextcloud가 이러한 설정을 지원한다는 것을 알고 있습니다. 꼭 필요하긴 하지만그에 따라 nextcloud 자체를 구성하십시오.. Rocketcat에 대해서는 많이 말할 수 없습니다. 모든 웹 애플리케이션에 적용되는 범용 구성은 없습니다. 각 웹 애플리케이션에 대한 문서를 찾아보아야 할 것 같습니다. 그렇더라도 애플리케이션이 전체 (하위)도메인에 배포되도록 설계된 경우 예상치 못한 동작이 발생할 수 있습니다.

즉, 동일한 (하위)도메인 내의 경로에서 nextcloud 및 Rocketchat과 같은 복잡한 애플리케이션을 실행하지 않도록 강력히 권장해야 한다고 생각합니다. 기본적으로동일 원산지 정책, 이러한 애플리케이션은 결국 큰 보안 문제인 인증 쿠키를 포함하여 서로의 리소스에 액세스하게 될 수 있습니다.

와일드카드 인증서는 "비싸지" 않습니다. 실제로 Let's Encrypt는 완전 무료입니다(DNS-01 챌린지), 귀하가 도메인을 소유하고 DNS 레코드를 제어하는 ​​경우에 한합니다.

관련 정보