SSL:所有内容都要两份......做错了

SSL:所有内容都要两份......做错了

这可能是一个 SO 问题,但听起来很无聊......

每当我设置一个使用 SSL 的网站(不是证书和服务器本身,只是上传文件)时,我总是会在 HTTP 位获得一个网站副本,在 HTTPS 部分获得另一个副本,并使用转发标头将用户来回发送。这也会导致两个副本难以维护。这让我觉得我做错了,因此写了这篇文章。

我理解 SSL 可以“阻止坏人”(或至少减慢一些速度),我知道主机上有用于 SSL 和非 SSL 的单独部分,但有人可以向我稍微介绍一下吗?或者推荐一些互联网上的文章?

...大菜鸟的眼泪...

非常感谢

编辑:Gimel 说详细一点就好了……

嗯,共享主机上的 LAMP,带有共享 SSL 证书,目前正在与 Zencart 作斗争,但希望得到更广泛的建议,我没有命令行访问权限,只有 FTP 和其他东西(unix 有点吓人)...这是你的意思吗?

答案1

假设您使用 apache vhosting,则只需将 DocumentRoot 设置为两者的相同位置即可。要使用符号链接(如Dan C 的回答)确保您已

Options +FollowSymLinks

在您的 httpdocs/.htaccess 文件或主 httpd.conf 中适当设置(在该目录中每次加载页面时都会查找和处理 .htaccess 文件,因此无需重新启动 apache,但是它们比在 httpd.conf 中实现相同的代码要慢,因为此文件仅在服务器启动时处理)。

这是一个 httpd.include,用于从与 HTTP 相同的位置提供 HTTPS 数据:

<VirtualHost *:80>
        ServerName   test.com
        ServerAlias  www.test.com
        UseCanonicalName Off
        DocumentRoot /var/www/vhosts/test.com/httpdocs
        CustomLog  /var/www/vhosts/test.com/logs/access_log common
        ErrorLog   /var/www/vhosts/test.com/logs/error_log
        <IfModule mod_ssl.c>
                SSLEngine off
        </IfModule>
        Include /var/www/vhosts/test.com/conf/vhost.conf
</VirtualHost>

<VirtualHost *:443>
        ServerName   test.com
        ServerAlias  www.test.com
        UseCanonicalName Off
        DocumentRoot /var/www/vhosts/test.com/httpdocs
        CustomLog  /var/www/vhosts/test.com/logs/access_log common
        ErrorLog   /var/www/vhosts/test.com/logs/error_log
        <IfModule mod_ssl.c>
                SSLEngine on
                SSLVerifyClient none
                # example ssl certs
                SSLCertificateFile /usr/local/apache/certs/my.ca.pem
                SSLCertificateKeyFile /usr/local/apache/certs/my.server.key.pem
        </IfModule>
        Include /var/www/vhosts/test.com/conf/vhost_ssl.conf
</VirtualHost>

有用的链接来自O'Reilly 的分步指南:在 Apache 下配置 SSLApache SSL 页面(冗长!)

编辑:

您应该能够通过 FTP 访问您的 conf/httpd.include 文件(它可能位于不同的目录中,但它将位于 /var/www/vhosts/test.com/ 的 vhost 子目录中或类似目录中 - 您可以在主 httpd.conf 中找到 vhost 目录)。

您还应该能够访问 .htaccess 文件 - 它们是 Linux 隐藏文件,因此您可能需要检查 FTP 客户端的文档。或者,尝试在虚拟主机的 httpdocs/ 目录中创建一个 .htaccess 文件 - 如果不能,则该文件可能已经存在。

最后的建议是:联系您的托管服务提供商!

答案2

我倾向于按如下方式存储文档:

html      (HTTP resources)
html_ssl  (HTTPS resources)

如果每个内容注定不相同,那么通常我会将一个内容符号链接到另一个内容。

ln -s html_ssl html

然后你只需要更新 中的文档html_ssl

或者,你可以将两个DocumentRoot指令指向同一位置。但这不太直观。

答案3

HTTP 和 HTTPS 有单独的设置,但它们由同一目录提供。如果请求通过 http 到达,则响应通过 http 提供,反之亦然。要阻止文档通过 http 提供,您必须设置具有单独 DocumentRoot 的虚拟主机并将其放在那里。

相关内容