为什么我似乎无法使用 Apache 和 Route 53 访问托管在我域上的网站?

为什么我似乎无法使用 Apache 和 Route 53 访问托管在我域上的网站?

我在 EC2 实例上安装了 Apache 来为我的网站提供服务。我从 GoDaddy 购买了该网站的域名。

为了在 AWS 托管的 EC2 实例上为网站提供服务,我在 Route53 中为从 GoDaddy 购买的域名创建了一个托管区域。

我更新了在 GoDaddy DNS 面板中的 Route53 中创建托管区域后获得的名称服务器。

更新此名称服务器后,我在 Route53 的托管区域中创建了一条 A 记录,指向为服务我的网站而创建的 EC2 实例的公共 IP。

但是仍然无法通过域使用 Apache 访问 EC2 实例上提供的网站。

在此处输入图片描述

我于周一(2024 年 2 月 26 日)更新了 GoDaddy 面板中的名称服务器,自更新以来已经过去了近 2 天,但该网站仍然未在预期的域上提供服务。

这是我的 Apache 配置文件:

<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

        ServerAdmin webmaster@localhost
        ServerName test.instabook.app
        DocumentRoot /var/www/html

        <Directory /var/www/html>
                Options Indexes FollowSymLinks
                AllowOverride All
                Require all granted
        </Directory>

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
        RewriteEngine on
        RewriteCond %{SERVER_NAME} =test.instabook.app
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

我不明白为什么尽管执行了所有需要的任务,网站却没有提供服务。

答案1

Apache 配置仅设置为 HTTP (80),并且浏览器正尝试通过 HTTPS (443) 进行连接。

最好的解决方案是购买 SSL 证书并将其安装在服务器上。您可以使用自签名 SSL 证书进行测试。

检查 DNS 传播DNS 检查器显示 DNS 已正确传播;所有节点都指向目标地址:

3.110.225.226

我通过运行以下 Curl 命令进一步测试了您的网站;它通过基本 HTTP 快速返回了干净的响应标头:

curl -ILk http://test.instabook.app

结果是:

HTTP/1.1 200 OK
Date: Thu, 29 Feb 2024 04:14:16 GMT
Server: Apache/2.4.52 (Ubuntu)
Last-Modified: Wed, 28 Feb 2024 11:33:38 GMT
ETag: "1268-6126f83916814"
Accept-Ranges: bytes
Content-Length: 4712
Vary: Accept-Encoding
Content-Type: text/html

但它总是如果我使用 HTTPS,则会挂起直到超时:

curl -ILk https://test.instabook.app

挂起一段时间然后返回:

curl: (28) Failed to connect to test.instabook.app port 443: Operation timed out

问题很可能是,当您仅在纯 HTTP 上运行服务器(当前)时,您的浏览器正尝试强制使用 HTTPS。

最好的解决方案是购买 SSL 证书并将其安装在服务器上。您可以使用自签名 SSL 证书测试 Apache 设置;但请为您的网站获取真正的证书。

相关内容