在我的Apache2服务器上启用HTTPS之后-每个请求我都会收到404错误[关闭]


10

好的,所以我以前从没有使用SSL / HTTPS的经验,我只处理过标准的HTTP。最近,我开始在需要SSL的网站上工作。所以,当然,我出去研究了如何开始。我已经到了成功安装SSL证书的阶段-出现绿色的挂锁,并且服务器在端口443上响应HTTPS请求。我的问题是,无论如何我都无法使用HTTPS /来显示任何页面SSL,但是它们在端口80 / HTTP上看起来很好(直到我将HTTP重定向到HTTPS为止)。

简单地说,我可以很好地访问HTTPS站点,但是不会发送我的页面,而是为每个请求发送404。


/etc/apache2/sites-available/[name].conf

<VirtualHost *:80>
    ServerName [serverName]

    RewriteEngine On

    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
</VirtualHost>

<VirtualHost *:443>
    ServerName [serverName]
    ServerAdmin [email]
    DocumentRoot [docRoot]

    # I know the following SSL cert stuff is correct

    SSLEngine On
    SSLCertificateFile [...]/[domain].crt
    SSLCertificateKeyFile [...]/[certificate].key
    SSLCertificateChainFile [...]/[theotherone].crt

    ErrorLog ${APACHE_LOG_DIR}/[custom]_error.log
        CustomLog ${APACHE_LOG_DIR}/[custom]_access.log combined

        <Directory "[docRoot]">

                Options Indexes FollowSymLinks MultiViews

        AllowOverride All
        Order allow,deny
        allow from all

        </Directory>

</VirtualHost>

我不确定是否还有其他您想查看的内容或其他任何细节,但是如果有,请告诉我。

编辑:

在配置文件中进行了一些搜索之后,我发现由于某种原因,连接到HTTPS时,服务器使用默认配置(/ var / www /)中的文档根目录,但是a2ensite未启用此默认配置。我似乎无法弄清楚导致此问题的配置位于何处


您的Rewrite指令看起来像您正在尝试在配置错误的反向代理后面运行Apache。如果您的Apache在没有任何代理的情况下直接提供域服务,则应删除所有Rewrite指令并将其替换为单个Redirect。并为每个日志文件配置单独的日志文件,VirtualHost以便您可以准确查看VirtualHost每个请求的处理过程。
kasperd '16

至于Rewrite,我只是用它们来获得临时的rectct(当时我还不确定100%),现在我知道Redirect完全有能力做到这一点(是的,很糟糕,我不知道)。关于单独的日志文件,我已经做到了。我还弄清楚了问题所在,并将对此进行更新以反映这一点。
迈克尔·朗格斯特

Answers:


11

将所有http请求重定向到https绝对必要吗?因为似乎这就是您要在此处执行的操作。

我建议您首先从conf中删除以下几行:

RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]

我怀疑那里的语法可能是错误的。然后尝试再次连接每种http://和https://协议。


我确定我希望所有HTTP都重定向到HTTPS,因为我正在此域上创建管理面板,因此几乎所有请求都包含敏感信息。我知道语法是正确的,因为重定向可以正常工作。我发现问题在于服务器正在/ var / www / html中查找文件,而不是我指定的documentroot
Michael Longhurst,2013年

文档路径是否可以在没有重定向的情况下使用?值得一试IMO ...
伊万

我先尝试尝试其他答案,如果失败则将
Michael Longhurst,2013年

也尝试过,但无济于事
Michael Longhurst

好了,尝试将*:443中的星号替换为服务器的实际IP,端口80也是如此。还要检查文档的根路径的语法应以/开始
伊万

11

我记不清我是怎么想的,但是我偶然发现了建议放置的地方:

<VirtualHost _default_:443>

代替:

<VirtualHost *:443>

自替换以来,我的SSL一直运行良好。


10

尝试编辑文件,使其看起来像这样:

这是一个非常基本的conf,如果可以的话,请添加重定向,如果仍然需要的话。

如果这不起作用,请显示您的ssl.conf

NameVirtualHost *:80
NameVirtualHost *:443

<VirtualHost *:80>
         <Directory "[docRoot]">
        AllowOverride All
        </Directory>
        DocumentRoot [docRoot]
        ServerName [serverName]
</VirtualHost>

<VirtualHost *:443>
        SSLEngine on
       SSLCertificateFile [...]/[domain].crt
       SSLCertificateKeyFile [...]/[certificate].key
       SSLCertificateChainFile [...]/[theotherone].crt
         <Directory "[docRoot]">
        AllowOverride All
        </Directory>
        DocumentRoot [docRoot]
        ServerName [serverName]
</VirtualHost>

不,仍然不能正常工作,它仍显示我放置在/ var / www / html中的临时index.html。我将把一个pastebin与该会议相关联
Michael Longhurst,2013年


只是为了确认您要在更改后重新启动apache?
安东尼·佛尼托

是的,任何和一切我改变我重新启动
迈克尔·朗赫斯特

我已经打开了我可以想象的每个配置文件,并运行CTRL + F来查找DocumentRoot设置为“ / var / www / html”的任何位置,但没有任何结果。因此,对于我的一生,我无法理解为什么如果不告诉apache,则要从/ var / www / html中读取内容
Michael Longhurst,2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.