在Apache服务器上安装了SSL,页面无响应

时间:2018-10-06 21:27:07

标签: apache ssl web configuration ssl-certificate

我的问题是关于SSL安装的。我为在Apache 2.4.29的Ubuntu 16.04机器上托管的网站购买了新的SSL。我能够安装此程序,但没有出现任何错误,但我的页面未重定向。我遵循了一些指南(DigitalOcean),但是感觉到我缺少一些东西。

我已经检查了站点可用的文件(000-default.conf,default-ssl.conf和example.com.conf),但没有发现任何引起我注意的内容,但是我感觉自己缺少一些东西。我检查了Apache的状态,没有收到任何错误,并且已经多次重启服务,但无济于事。

这是我所拥有的大致分类。我想念什么吗?设置是否需要其他信息?

000-default.conf

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www
    Redirect "/" "https://example.com/"
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

default-ssl.conf

<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
            ServerAdmin webmaster@localhost
            DocumentRoot /var/www
            SSLCertificateFile /root/example.com.crt
            SSLCertificateKeyFile /root/www.example.com.key
            SSLCACertificateFile /root/intermediate.crt

            <FilesMatch "\.(cgi|shtml|phtml|php)$">
                            SSLOptions +StdEnvVars
            </FilesMatch>

            <Directory /usr/lib/cgi-bin>
                            SSLOptions +StdEnvVars
            </Directory>

            </VirtualHost>
 </IfModule>4

mydomain.com.conf

<VirtualHost *:443>
    ServerAdmin admin@somedomain.com
    ServerName mydomain.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/html
    Redirect permanent / https://example.com
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

1 个答案:

答案 0 :(得分:0)

这是我尝试组合配置的尝试。请注意,我没有用于测试的设置,但是在生产服务器上使用了类似的配置。

首先定义端口80 VirtualHost(设置中为000-default.conf):

Listen 80

<VirtualHost *:80>

    Redirect "/" "https://example.com/"

    LogLevel debug
    ErrorLog  "${APACHE_LOG_DIR}/80_error.log"
    CustomLog "${APACHE_LOG_DIR}/80_access.log" combined
</VirtualHost>

因为您重定向了所有内容,所以不需要DocumentRoot

然后将default-ssl.conf注释掉。该文件是您可以设置启用SSL的VirtualHost的示例。如果您使用该文件和端口443上的另一个VirtualHost,则将始终使用该文件,因为Apache使用了它发现与客户端请求匹配的第一个VirtualHost(此处为端口443)。

另一方面,VirtualHost没有彼此“添加”在一起。每个独立于其他,并且必须包含完整的配置。这意味着您不能将某些配置放在端口443上的VirtualHost上,而不能将某些配置放在端口上并希望它能正常工作。

然后创建您的example.com.conf文件:

Listen 443

<VirtualHost *:443>
    ServerName  example.com
    ServerAlias www.example.com

    ServerAdmin admin@example.com

    SSLCertificateFile    "/root/example.com.crt"
    SSLCertificateKeyFile "/root/example.com.key"
    SSLCACertificateFile  "/root/intermediate.crt"

    LogLevel debug
    ErrorLog  "logs/443_error_log"
    CustomLog "logs/443_access_log" combined

    DocumentRoot "/var/www/example.com/html"
    DirectoryIndex index.html
    <Directory "/var/www/example.com/html">
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>

</VirtualHost>

一些注意事项:

  • 我将LogLevel置于调试状态,因此您可以进行故障排除,但是一旦运行,请将其更改为错误。否则,您将很快拥有巨大的日志文件!
  • 出于相同的原因,我将端口80和端口443的日志分开。每个VirtualHost应该具有自己的日志。
  • 证书文件必须与域名匹配。不是文件名(尽管它使匹配更容易),而是证书本身。
  • 如果您希望证书覆盖example.com www.example.com,则必须将两个名称都添加到证书的备用名称中。
  • 我不明白为什么您的配置中有Redirect permanent / https://example.com。您已经在https的端口443 VirtualHost中。
  • 如果需要,可以在默认的ssl配置中添加基于<FilesMatch>指令的选项。

此设置将确保所有http请求都将重定向到https://example.com。然后它将使用:443 VirtualHost,为该域使用适当的证书,并提供DocumentRoot目录中的内容。