我有多个域( example1.com , example2.com , ... )托pipe在同一个IP上。 其中一个域( example3.com )有一个SSL证书,我想通过HTTPS提供服务,同时保持所有其他网站在HTTP上。 到目前为止,我已经设置并正常工作。
我的问题是https://www.example1.com (请注意)的请求正在通过example3.com (开始<VirtualHost *:443> )的apacheconfiguration部分处理,这会导致问题,因为这是Django的网站,除了其他事情,它会产生一个400错误的请求,因为example1.com不在Django的ALLOWED_HOSTS设置。
我知道SSL的本质意味着Host:头部在build立安全连接之前是未知的。 但有没有办法让Apache拒绝HTTPS的任何请求是不是 example3.com ?
我期望在SSL虚拟主机中使用ServerName指令来限制该部分仅仅是指定的主机,但仔细检查文档后 ,似乎只有基于名称的虚拟主机才是这种情况。
编辑:我已经尝试添加一个全部默认作为第一部分,如下所示:
<VirtualHost *:443> ServerName default.only <Location /> Require all denied </Location> </VirtualHost>
这会导致以下错误:
[Thu Dec 04 10:31:27.922801 2014] [mpm_event:notice] [pid 10498:tid 3074255488] AH00491: caught SIGTERM, shutting down [Thu Dec 04 10:31:29.928483 2014] [ssl:emerg] [pid 30518:tid 3074300544] AH02240: Server should be SSL-aware but has no certificate configured [Hint: SSLCertificateFile] ((null):0) [Thu Dec 04 10:31:29.928551 2014] [ssl:emerg] [pid 30518:tid 3074300544] AH02312: Fatal error initialising mod_ssl, exiting.
您发布的错误表明您没有为您的域添加相关的必要SSLconfiguration; 对于您希望通过SSL访问的任何域名/子域名,您需要在相关域名的VirtualHostconfiguration中为证书等提供相关信息,例如:
<VirtualHost _default_:443> DocumentRoot /var/www/html/example1.com ServerName example1.com SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AES:RSA+3DES:HIGH:!aNULL:!MD5:!DSS SSLHonorCipherOrder on SSLCertificateFile /etc/pki/tls/certs/example1certificate.crt SSLCertificateKeyFile /etc/pki/tls/private/example1privatekey.key SSLCertificateChainFile /etc/pki/tls/certs/certificatechainfile.pem SSLCACertificateFile /etc/pki/tls/certs/certificateauthority.pem </VirtualHost>
然后,您需要为其余的域创build适当的VirtualHost段,但是在这些中,您当然只configuration监听端口为80,没有SSLconfiguration选项,例如:
<VirtualHost _default_:80> DocumentRoot /var/www/html/example2.com ServerName example2.com </VirtualHost>
希望这可以帮助!
PS, SSLCipherSuite和SSLProtocol的上述configuration都很好 – 如果您愿意,可以使用它们来节省您研究其他可能的configuration的时间。
正如@Polosson在评论中所说的,你需要创build两个端口443的虚拟主机来结束这个安排。
你列出的第一个将是对443端口上的任何东西的全面捕捉 – 这是隐含的,首先列出它。 第二个将用于通过ServerName托pipeexample3.com。