Apache2:将虚拟主机限制为一个域名
Apache2 : Limit virtual host to one domain name
我想做点什么,但我找不到答案(也许我秃头搜索了)。我不知道是否可以,如果不行就告诉我。
我想将 apache 虚拟主机限制为一个且唯一的域名:bde.yggdrasil.cafe。因此,如果用户尝试使用 90.90.3.57 或其他域名访问该网站,它将被列为不存在的网站。这是我的 extra/bde.conf 包含在 httpd.conf 中,你会明白问题所在:
<VirtualHost *:80>
ServerName bde.yggdrasil.cafe
ServerAdmin my@email.fr
DocumentRoot /srv/http/bdeweb
#Some django config
#[...]
RewriteEngine on
RewriteCond %{SERVER_NAME} =bde.yggdrasil.cafe
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
Listen 443
<VirtualHost *:443>
ServerName bde.yggdrasil.cafe
ServerAdmin my@email.fr
DocumentRoot /srv/http/bdeweb
#Some django config
#[...]
SSLEngine on
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/bde.yggdrasil.cafe/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/bde.yggdrasil.cafe/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
如果我使用此代码并尝试使用 http 协议连接到 90.90.3.57 或 yggdrasil.cafe 我的请求会被 django 捕获,其中 return 错误 400(这很好但不是什么我想得到)。如果我使用 http 连接到 bde.yggdrasil.cafe,它会将我正确重定向到 https。
DNS 重定向
我认为它很有用,所以我给你我的 DNS 重定向:
yggdrasil.cafe --> 90.90.3.57
bde.yggdrasil.cafe --> yggdrasil.cafe
删除 Django 配置
如果我删除 HTTP 虚拟主机中的 django 配置并使用以下文件:
<VirtualHost *:80>
ServerName bde.yggdrasil.cafe
RewriteEngine on
RewriteCond %{SERVER_NAME} =bde.yggdrasil.cafe
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
Listen 443
<VirtualHost *:443>
ServerName bde.yggdrasil.cafe
ServerAdmin my@email.fr
DocumentRoot /srv/http/bdeweb
#Some django config
#[...]
SSLEngine on
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/bde.yggdrasil.cafe/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/bde.yggdrasil.cafe/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
如果我尝试使用 90.90.3.57 或 yggdrasil.cafe 连接到我的服务器,我会陷入 "Indexes of /"(这很糟糕,真的很糟糕)。
如果用户不使用子域 "bde.yggdrasil.cafe",我希望 apache 忽略连接。
我为什么要这样做?
这个域是我所有的东西,包括我想在 "yggdrasil.cafe" 域名(没有子域)上托管的未来个人展示网站。
所以重要的不是结果,但我想知道是否可以在 "yggdrasil.cafe" 域名上添加另一个 VirtualHost 而不会被 django 捕获。
感谢您的宝贵时间:)
解决方案
正如Dusan Basic所说
Of course, just add another VirtualHost with ServerName yggdrasil.cafe
; for the beginning you can have simple RewriteRule ^ - [F]
它解决了问题:)
我想做点什么,但我找不到答案(也许我秃头搜索了)。我不知道是否可以,如果不行就告诉我。
我想将 apache 虚拟主机限制为一个且唯一的域名:bde.yggdrasil.cafe。因此,如果用户尝试使用 90.90.3.57 或其他域名访问该网站,它将被列为不存在的网站。这是我的 extra/bde.conf 包含在 httpd.conf 中,你会明白问题所在:
<VirtualHost *:80>
ServerName bde.yggdrasil.cafe
ServerAdmin my@email.fr
DocumentRoot /srv/http/bdeweb
#Some django config
#[...]
RewriteEngine on
RewriteCond %{SERVER_NAME} =bde.yggdrasil.cafe
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
Listen 443
<VirtualHost *:443>
ServerName bde.yggdrasil.cafe
ServerAdmin my@email.fr
DocumentRoot /srv/http/bdeweb
#Some django config
#[...]
SSLEngine on
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/bde.yggdrasil.cafe/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/bde.yggdrasil.cafe/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
如果我使用此代码并尝试使用 http 协议连接到 90.90.3.57 或 yggdrasil.cafe 我的请求会被 django 捕获,其中 return 错误 400(这很好但不是什么我想得到)。如果我使用 http 连接到 bde.yggdrasil.cafe,它会将我正确重定向到 https。
DNS 重定向
我认为它很有用,所以我给你我的 DNS 重定向:
yggdrasil.cafe --> 90.90.3.57
bde.yggdrasil.cafe --> yggdrasil.cafe
删除 Django 配置
如果我删除 HTTP 虚拟主机中的 django 配置并使用以下文件:
<VirtualHost *:80>
ServerName bde.yggdrasil.cafe
RewriteEngine on
RewriteCond %{SERVER_NAME} =bde.yggdrasil.cafe
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
Listen 443
<VirtualHost *:443>
ServerName bde.yggdrasil.cafe
ServerAdmin my@email.fr
DocumentRoot /srv/http/bdeweb
#Some django config
#[...]
SSLEngine on
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/bde.yggdrasil.cafe/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/bde.yggdrasil.cafe/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
如果我尝试使用 90.90.3.57 或 yggdrasil.cafe 连接到我的服务器,我会陷入 "Indexes of /"(这很糟糕,真的很糟糕)。
如果用户不使用子域 "bde.yggdrasil.cafe",我希望 apache 忽略连接。
我为什么要这样做?
这个域是我所有的东西,包括我想在 "yggdrasil.cafe" 域名(没有子域)上托管的未来个人展示网站。 所以重要的不是结果,但我想知道是否可以在 "yggdrasil.cafe" 域名上添加另一个 VirtualHost 而不会被 django 捕获。
感谢您的宝贵时间:)
解决方案
正如Dusan Basic所说
Of course, just add another VirtualHost with
ServerName yggdrasil.cafe
; for the beginning you can have simpleRewriteRule ^ - [F]
它解决了问题:)