如何配置Apache仅通过自定义域名mysite.biz提供Nextcloud服务?
问题描述
我在服务商处部署了Nextcloud,默认可以通过12345.hoster.com访问。已经购买了域名mysite.biz并将A记录指向服务器IP,运行Apache2的服务器配置了如下80端口的虚拟主机(443端口有等效配置,且这两个是唯一启用的配置):
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName mysite.biz DocumentRoot /var/www/nextcloud ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/nextcloud> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory> </VirtualHost>
但目前仍可通过浏览器访问12345.hoster.com,我希望站点仅通过mysite.biz提供服务。
补充信息:
/etc/hosts文件仅包含原主机名:
127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback # Auto-generated hostname. Please do not remove this comment. 123.123.123.123 12345.hoster.com 12345
- DNS记录正常,
dig mysite.biz返回正确的A记录指向服务器IP123.123.123.123。
解决方案
要实现仅通过mysite.biz提供服务,需要从Apache虚拟主机配置和Nextcloud自身配置两个层面入手:
1. 配置Apache默认虚拟主机拦截非授权域名请求
Apache的规则是:当收到的请求没有匹配到任何ServerName/ServerAlias时,会使用第一个加载的虚拟主机作为默认处理。我们可以创建一个默认虚拟主机,专门处理所有非mysite.biz的请求,直接返回403禁止访问。
- 在
/etc/apache2/sites-available/目录下创建000-default.conf(命名以000开头确保优先加载),内容如下:
<VirtualHost *:80> ServerName default Redirect 403 / ErrorLog ${APACHE_LOG_DIR}/default-error.log CustomLog ${APACHE_LOG_DIR}/default-access.log combined </VirtualHost> # HTTPS端口的默认拦截配置 <VirtualHost *:443> ServerName default # 可使用服务器自带的自签证书,仅用于拦截请求 SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key Redirect 403 / ErrorLog ${APACHE_LOG_DIR}/default-ssl-error.log CustomLog ${APACHE_LOG_DIR}/default-ssl-access.log combined </VirtualHost>
- 启用这个默认配置:
a2ensite 000-default.conf
- 确保你的
mysite.biz配置文件命名在000之后(比如001-mysite.conf),保证Apache先加载默认拦截配置,再加载业务域名配置。
2. 限制Nextcloud的可信域名
即使Apache放行,Nextcloud自身也可以通过配置限制仅允许指定域名访问。修改Nextcloud根目录下的config/config.php文件,找到trusted_domains项,只保留mysite.biz:
'trusted_domains' => [ 'mysite.biz', ],
这样如果有人通过12345.hoster.com访问,Nextcloud会直接拒绝,提示域名未被信任。
3. 重启Apache服务使配置生效
完成上述配置后,重启Apache:
systemctl restart apache2
额外检查点
- 确认没有其他启用的虚拟主机配置:运行
a2dissite命令禁用所有不需要的配置,只保留000-default.conf和你的mysite.biz配置。 - 检查Apache的虚拟主机加载顺序:可以运行
apache2ctl -S查看当前加载的虚拟主机顺序,确保默认配置在最前面。
内容的提问来源于stack exchange,提问作者Gregsen
相关产品推荐
相关产品推荐

