아파치 VirtualHost (동일한 서버에서 실행되는 아파치)를 통해 모두 제공되는 여러 웹 응용 프로그램으로 서버를 설정하려고합니다. 내 주요 제약 조건은 각 웹 응용 프로그램이 SSL 암호화를 사용해야한다는 것입니다. 인터넷 검색을 한 후 stackoverflow에 대한 다른 질문을 살펴본 후 VirtualHost에 대한 다음 구성을 작성했습니다.
<VirtualHost 1.2.3.4:443>
ServerName host.example.org
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
SSLProxyEngine On
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / https://localhost:8443/
ProxyPassReverse / https://localhost:8443/
</VirtualHost>
비록 https://host.example.org:8443가 접근, https://host.example.org는 내 가상 호스트 설정의 목적을 패배하는 없습니다. Firefox는 서버에 성공적으로 연결되었지만 연결이 중단되었다고 불평합니다. 또한 Apache의 error.log에 다음 경고가 표시됩니다.
proxy: no HTTP 0.9 request (with no host line) on incoming request and preserve host set forcing hostname to be host.example.org for uri
웹 애플리케이션 (Tomcat 서버)에서 액세스 로그에 이상한 액세스 요청이 표시됩니다.
"?O^A^C / HTTP/1.1" 302
다음은 https://host.example.org:8443에 직접 연결할 때 얻는 올바른 액세스 요청입니다 .
"GET / HTTP/1.1" 302
마지막으로 SSL을 사용하지 않으면 가상 호스트가 완벽하게 작동한다고 언급해야합니다.
이 작업을 어떻게 수행 할 수 있습니까?
답변
마침내 나는 그것을 작동시키는 방법을 찾았다. 먼저 Dave Cheney 제안을 시도 했으므로 Tomcat 비 SSL 포트로 리디렉션 된 Apache 서버에 대한 다른 인증서를 설치했습니다 (따라서 프록시는 http : // localhost : 8080 / 로 리디렉션되었습니다 ). 불행히도 웹 브라우저에서 https가 연결 즉시 http로 변환 된 것처럼 완전히 작동하지 않았습니다. 그래서 https : // localhost : 8443 / 사용으로 돌아 갔고 마지막으로 SSLProxyEngine을 다시 추가했습니다.
결과 VirtualHost 구성은 다음과 같습니다.
<VirtualHost 1.2.3.4:443>
ServerName host.domain.org
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
SSLEngine on
SSLProxyEngine On
SSLCertificateFile /etc/apache2/ssl/certificate.crt
SSLCertificateKeyFile /etc/apache2/ssl/certificate.key
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / https://localhost:8443/
ProxyPassReverse / https://localhost:8443/
</VirtualHost>
답변
이 구성을 사용해보십시오
<VirtualHost 1.2.3.4:443>
ServerName host.domain.org
SSLEngine On
# include other ssl options, like cert and key here
ProxyRequests Off
ProxyPreserveHost On
<Location />
ProxyPass http://localhost:8443/
</Location>
</VirtualHost>
애플리케이션이 프록시 연결에서 SSL 정보에 액세스해야하는 경우 mod_proxy_ajp 및 tomcat ajp1.3 커넥터 사용을 고려해야합니다.
답변
그러나 목표라면 동일한 서버에서 여러 개의 SSL 지원 웹 응용 프로그램을 실행하는 것입니다. 아파치를 앞에 추가하면 위의 구성을 사용하여 균형을 잡을 수 없으며 여전히로드 밸런서가 필요하거나 아파치의 프록시 밸런서 모듈을 다음과 같이 사용할 수 있습니다.
ProxyRequests Off
<Proxy balancer://someapplication>
BalancerMember http://127.0.0.1:18443 keepalive=on max=2 retry=30
BalancerMember http://127.0.0.1:18444 keepalive=on max=2 retry=30
BalancerMember http://127.0.0.1:18445 keepalive=on max=2 retry=30
</Proxy>
<VirtualHost 1.2.3.4:443>
SSLEngine on
SSLCipherSuite SSLv2:-LOW:-EXPORT:RC4+RSA
SSLCertificateFile /path/to/cert.pem
SSLCertificateKeyFile //path/to/key.pem
SSLVerifyClient optional
RequestHeader set X-Client-DN %{SSL_CLIENT_S_DN}e
RequestHeader set X-Client-Verify %{SSL_CLIENT_VERIFY}e
<Location />
SetHandler balancer-manager
Order allow,deny
Allow from all
</Location>
ProxyPass / balancer://someapplication:443/
ProxyPassReverse / balancer://someapplication:443/
ProxyPreserveHost on
답변
글쎄, 내가 여기서 이해하지 못하는 것은 아파치에서 동일한 컴퓨터에있는 것처럼 보이는 응용 프로그램에 대한 SSL 연결이 필요한 이유입니다 ( http : // localhost : 8443 / ).
이와 같은 것을 설정하는 일반적인 방법은 인터넷과 같은 “고객”측에 SSL 암호화를 제공하고 응용 프로그램에 암호화되지 않은 연결을하는 것입니다. 또한 응용 프로그램 응답을보다 자유롭게 디버깅 할 수 있습니다.
Dave Cheney가 언급 한 다른 것은로드 밸런싱 및 기타 기능을 위해 기본 Tomcat 커넥터를 사용하는 것입니다.
답변
실제로 HTTPS 서비스를 프록시해야합니까? localhost에서 SSL이 아닌 서비스로 프록시하려고 할 수 있습니다.
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
답변
먼저 localhost에서 localhost : 8443으로 요청을 할 수 있는지 확인하고 성공했는지 확인하십시오 (IE는 GET 또는 http : // localhost : 8443을 수행하십시오 )
왜 havin ga 가상 호스트가 포트 443을 수신하고 다른 SSL 호스트로 프록시하는지 왜 잘 모르겠습니다.
왜 응용 프로그램이 기본적으로 443을 사용할 수 없습니까? 변경할 수 없으면 iptables를 사용하여 포트를 리디렉션 할 수 있습니다.
답변
SSL 오류 로그를 확인하고 CA 인증서 체인을 확인할 수 없다는 오류가 없는지 확인하십시오.