如何在不同的 IP 上托管 CloudFlare DNS 子域

如何在不同的 IP 上托管 CloudFlare DNS 子域

我使用 CloudFlare 作为 DNS 并使用 Digital Ocean 作为服务器。

假设我的网站为“example.com”。它运行良好。

我现在创建了第二台服务器,它具有不同的 IP。我希望新的子域名“staging.example.com”指向这个第二个 IP。

在 CloudFlare 中,我尝试创建第二个“A”记录。以下是我的设置导出(部分内容已删除,也已更改为使用示例域名):

;; A Records
example.com.    1   IN  A   192.■■■.135.106
staging.example.com.    1   IN  A   157.■■■.174.87

浏览 example.com 仍然有效。

但是,浏览 staging.example.com 会导致“错误 522 连接超时”。

我做错了什么?如何让子域名指向与其父域名不同的 IP?

聚苯乙烯想法也许我的 Nginx 配置有问题,但现在我怀疑这不是问题,因为我可以暂时将其更改为 example2.com 而不是 staging.example.com,然后暂时更改我拥有的这个其他域(example2.com)的 CloudFlare DNS,并且它加载正常。


PPS 现在出于调试目的,我的 Nginx 配置如下:

server_name staging.example.com example2.com;

并且我已将 CloudFlare DNS 中的子域“A”记录保留为“仅 DNS”(灰色云)。

然后在我的 CloudFlare DNS example2.com(我拥有的另一个域)中,我暂时将其指向 157.■■■.174.87。

浏览 staging.example.com 会导致“无法访问此站点。staging.example.com 响应时间过长。ERR_CONNECTION_TIMED_OUT”。

但浏览 example2.com 却可以。

这让我相信 Nginx 配置没有问题。对吧?那么问题出在哪里呢?

答案1

我认为第一个问题是我的页面规则将 http 重定向到 https,并且我暂时注释掉了 Nginx 配置中的 SSL 部分。

取消注释 SSL 部分后,现在浏览到https://staging.example.com/结果是:

400 错误请求

未发送所需的 SSL 证书

这是一个完全独立的问题,我现在要去解决。

答案2

您可以使用以下脚本在您的服务器上创建子域

#!/bin/bash
echo "Enter Subdomain You want to add (Eg:blog)"
read subdomain
echo "Enter your domain name (Eg:example.com)"
read domain
sudo chmod -R 755 /etc/apache2/
cd /etc/apache2/sites-available/
cat <<EOF >$subdomain.$domain.conf
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/$subdomain
    ServerAlias  $subdomain.$domain
    ServerName $subdomain.$domain

    <Directory /var/www/$subdomain>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride all
        Order allow,deny
# remove following four lines if http authentication not required or not set up#
        AuthType Basic 
        AuthName "Restricted Content"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
    </Directory>

 </VirtualHost>
EOF
mkdir /var/www/html/$subdomain
echo " Add your files to /var/www/html/$subdomain "
echo "enabling subdomain................"
sudo a2ensite $subdomain.$domain
echo "Reloading apache2 ................"
sudo service apache2 reload

相关内容