우분투의 Apache2에서는 80을 청취하는 사이트가 있으며 이제 SSL을 추가하려고합니다. 전체 VirtualHost 블록을 복사 할 필요가 없도록 포트 443에 대해 SSLEngine을 활성화하는 방법이 있습니까?
내가 이것을 할 때 :
Listen 80
Listen 443
NameVirtualHost *
<VirtualHost *>
SSLEngine On
... a bunch more lines...
</VirtualHost>
포트 80에 대해 SSLEngine을 켜고 있습니다. 하나의 VirtualHost 블록 만 사용하고 포트 443에 대해서만 SSLEngine을 켜는 방법이 있습니까? 그래서 이런 식으로 할 수 있습니까?
Listen 80
Listen 443
NameVirtualHost *
<VirtualHost *>
<IfPort 443>
SSLEngine On
</IfPort>
... a bunch of lines I don't want to copy into another VirutalHost block...
</VirtualHost>
답변
하나의 호스트가 별도의 프로토콜을 서비스하는 별도의 호스트이므로 HTTP와 HTTPS를 모두 수행 할 수 없습니다. 대신 모든 공통 구성을 별도의 파일에 넣은 다음 해당 파일을 도메인의 SSL 및 비 SSL 가상 호스트 모두에 포함시켜야합니다.
최소 예 :
# /etc/apache2/sites-available/example.com
<VirtualHost *:80>
Include /etc/apache2/domains/example.com
</VirtualHost>
<VirtualHost 192.0.2.1:443>
SSLEngine On
SSLCertificateFile /etc/ssl/example.com_crt
SSLCertificateKeyFile /etc/ssh/example.com_key
Include /etc/apache2/domains/example.com
</VirtualHost>
# /etc/apache2/domains/example.com
ServerName example.com
ServerAlias www.example.com
ServerAdmin webmaster@example.com
DocumentRoot /home/example/public_html
ErrorLog /home/example/apache/error.log
답변
내가 stackoverflow에 대한 다른 질문에 언급했듯이 ( https : //.com/questions/679383/do-i-have-to-duplicate-the-virtualhost-directives-for-port-80-and-443/52375167# 52375167 ) :
사용하는 대신 다른 옵션을 사용하는 것 Include
입니다 Macro
(따라서 한 파일에 모두 보관할 수 있음).
먼저 매크로 모듈을 활성화하십시오 :
a2enmod macro
그런 다음 공유 내용을 매크로에 넣고 use
가상 호스트에서 가져옵니다.
<Macro SharedStuff>
ServerName example.com
ServerAdmin example@example.com
<DocumentRoot /var/www/example>
...
</DocumentRoot>
</Macro>
<VirtualHost *:80>
Use SharedStuff
</VirtualHost>
<VirtualHost *:443>
Use SharedStuff
SSLEngine On
SSLProtocol All -SSLv2 -SSLv3
...
</VirtualHost>
매크로는 매개 변수를 사용할 수 있으며 포함 된 다른 파일에 정의 될 수도 있습니다. 함수처럼 사용하고 Apache 설정 파일에서 많은 중복을 저장할 수 있습니다.
자세한 내용은 여기를 참조하십시오.
답변
<Directory>
블록 외부의 블록 에 디렉토리 설정을 넣을 수 있습니다 <VirtualHost>
. 그러면 모든 가상 호스트에 적용되지만 지정된 경로 내부에만 적용됩니다.