![如何在不同的 IP 上托管 CloudFlare DNS 子域](https://linux22.com/image/744637/%E5%A6%82%E4%BD%95%E5%9C%A8%E4%B8%8D%E5%90%8C%E7%9A%84%20IP%20%E4%B8%8A%E6%89%98%E7%AE%A1%20CloudFlare%20DNS%20%E5%AD%90%E5%9F%9F.png)
我使用 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