
192.168.81
저는 각각 VM에 매트릭스 홈 서버와 Django 웹 앱을 두고 있습니다 192.168.83
. 홈 서버는 다음과 같이 구축됩니다.매트릭스-docker-ansible-배포nginx에서 실행됩니다. 다음을 통해 SSL 인증서를 획득하고 갱신합니다.Traefik~와 함께암호화하자.
웹 앱은 자체 Let's Encrypt 인증서를 사용합니다. 독립적으로 작동하도록 할 수는 있지만 동일한 80 및 443 포트에서 함께 작동하도록 하는 데 어려움을 겪고 있습니다.
다음과 같이 웹앱 측에서 역방향 프록시를 설정하여 도메인에서 트래픽을 전환한 후:
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/mysite.org/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mysite.org/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/mysite.org/fullchain.pem
# Enable SSL Proxy Engine
SSLProxyEngine On
ProxyPass / https://192.168.1.83/
ProxyPassReverse / https://192.168.1.83/
나는 얻다:
[Wed Jan 17 07:13:21.567813 2024] [core:notice] [pid 33994:tid 125031783462784] AH00094: Command line: '/usr/sbin/apache2'
[Wed Jan 17 07:15:23.409061 2024] [proxy:error] [pid 34272:tid 125031640188608] (20014)Internal error (specific information not available): [client 192.168.1.85:44054] AH01084: pass request body failed to 192.168.1.83:443 (192.168.1.83)
[Wed Jan 17 07:15:23.409180 2024] [proxy:error] [pid 34272:tid 125031640188608] [client 192.168.1.85:44054] AH00898: Error during SSL Handshake with remote server returned by /
[Wed Jan 17 07:15:23.409209 2024] [proxy_http:error] [pid 34272:tid 125031640188608] [client 192.168.1.85:44054] AH01097: pass request body failed to 192.168.1.83:443 (192.168.1.83) from 192.168.1.85 ()
[Wed Jan 17 07:15:23.715825 2024] [proxy:error] [pid 34273:tid 125031648581312] (20014)Internal error (specific information not available): [client 192.168.1.85:44070] AH01084: pass request body failed to 192.168.1.83:443 (192.168.1.83), referer: https://192.168.1.83/
[Wed Jan 17 07:15:23.715945 2024] [proxy:error] [pid 34273:tid 125031648581312] [client 192.168.1.85:44070] AH00898: Error during SSL Handshake with remote server returned by /favicon.ico, referer: https://192.168.1.83/
[Wed Jan 17 07:15:23.715970 2024] [proxy_http:error] [pid 34273:tid 125031648581312] [client 192.168.1.85:44070] AH01097: pass request body failed to 192.168.1.83:443 (192.168.1.83) from 192.168.1.85 (), referer: https://192.168.1.83/
업데이트:
동일한 포트에서 두 서버를 실행하면 SSL 인증이 거의 확실하게 엉망이 되기 때문에(동일한 인증서를 공유하고 별도의 서버에서 역방향 프록시를 사용하여 별도의 도메인에서 자체 내부 서버로 트래픽을 리디렉션하지 않는 한) , 나는 싶습니다80 및 443 이외의 포트를 사용하십시오.내 웹 앱을 호스팅합니다.
이 작업을 수행하려면 어떻게 해야 합니까?
답변1
이는 백엔드에서 제공한 SSL/TLS 인증서 192.168.1.83:443이 유효하지 않기 때문입니다. 유효한 인증서의 경우 항상 도메인 이름이 필요하기 때문입니다.
나는 당신이 어디에서 열 수 있는지 믿습니다https://192.168.1.83/브라우저에서(물론 IP 192.168.1.83에 액세스할 수 있는 경우) "연결이 안전하지 않음" 경고가 표시됩니다.
선택할 수 있는 옵션은 다음과 같습니다(대략 난이도순).
- 백엔드 네트워크를 맹목적으로 신뢰하고 순방향 프록시에서만 SSL을 사용하여 일반 http를 통해 백엔드에 연결합니다. Apache 정방향 프록시가 해당 VM과 동일한 시스템에서 실행되고 있고 정방향 프록시와 VM을 모두 제어하는 경우 이것이 제가 수행할 작업입니다.
- 백엔드 네트워크를 신뢰하지 않고 프런트엔드와 백엔드 모두에서 암호화하는 경우 다음 중 하나를 수행해야 합니다.
- 인증서에 유효한 도메인 이름을 사용하여 백엔드에 연결하고(호스트 파일에서 도메인에 대한 IP를 구성할 수 있음) 인증서 자체가 유효하고 갱신되는지 확인하세요.
- Apache 구성에서 이 연결에 대해 명시적으로 인증서에 대한 신뢰를 설정합니다.
- 백엔드 서비스에 대한 자체 CA를 설정하고 순방향 프록시에서 신뢰할 수 있는 것으로 구성합니다(그러나 자체 CA를 처리하면 쉽게 위험 영역에 깊이 빠지게 된다는 점에 유의하세요!)
- 인증서를 적절하게 검증하지 않고(예: 옵션 비활성화) SSL을 통해 연결하도록 정방향 프록시를 구성하는 것을 권장하지 않습니다.
SSLProxy*
대신 백엔드 네트워크가 신뢰할 수 있는 경우 옵션 1로 이동하고 그렇지 않은 경우 위의 세 가지 중 하나를 선택합니다.
- 백엔드에서만 암호화하고 Apache 정방향 프록시 대신 SNI 로드 밸런싱을 사용하여 재암호화 없이 https 트래픽을 백엔드로 전달합니다(제 생각에는 옵션 1보다 고급 설정이며 Apache가 적합한지 여부는 모르겠습니다) 이 응용 프로그램의 경우).