你好,我的服务器上有 3 个域名,安装了 ububtu 22.04 和 apache,但遇到了这个问题
我在共享主机中有 3 个域名,每个域名都有自己的网页 domain-a.com
域名-b.com
域名-c.com
我也有 3 个 no-ip 域名,我已将它们重定向到我家里具有动态 ip 的服务器(出于这个原因,使用 no-ip)
在我家我已经配置了
domain-a.no-ip.com
domain-b.no-ip.com
domain-c.no-ip.com
在每个网站中,我都在 apache 中创建了自己的网站
/var/www/domain-a(该网站使用端口 8180)
/var/www/domain-b(该网站使用端口 8185)
/var/www/domain-c(该网站使用端口 8190)
我还在 /etc/apache2/sites-available 上创建了 3 个配置文件,每个域一个
我还启用了 3 个 conf 文件
sudo a2dissite 000-默认
sudo a2ensite 域-a.conf
sudo a2ensite 域-b.conf
sudo a2ensite 域-c.conf
sudo 服务 apache2 重启
<VirtualHost *:80>
ServerName domain-a.no-ip.com
Redirect / https://domain-a.no-ip.com
RewriteEngine on
RewriteCond %{SERVER_NAME} =domain-a.no-ip.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerName domain-a.no-ip.com
ServerAdmin [email protected]
DocumentRoot /var/www/domain-a/
ProxyPass / http://localhost:8180/
ProxyPassReverse / http://localhost:8180/
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/domain-a.no-ip.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domain-a.no-ip.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
<VirtualHost *:80>
ServerName domain-b.no-ip.com
Redirect / https://domain-b.no-ip.com/
RewriteEngine on
RewriteCond %{SERVER_NAME} =domain-b.no-ip.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerName domain-b.no-ip.com
ServerAdmin [email protected]
DocumentRoot /var/www/domain-b/
ProxyPass / http://localhost:8185/
ProxyPassReverse / http://localhost:8185/
SSLEngine on
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/domain-b.no-ip.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domain-b.no-ip.com/privkey.pem
</VirtualHost>
</IfModule>
<VirtualHost *:80>
ServerName domain-c.no-ip.com
Redirect / https://domain-c.no-ip.com/
RewriteEngine on
RewriteCond %{SERVER_NAME} =domain-c.no-ip.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerName domain-c.no-ip.com
ServerAdmin [email protected]
DocumentRoot /var/www/domain-c
ProxyPass / http://localhost:8190/
ProxyPassReverse / http://localhost:8190/
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/domain-c.no-ip.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domain-c.no-ip.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
然后在域 a 的 cloudflare 中我创建了一个 CNAME www2 和目标域 a.no-ip.com
然后在 domain-b 的 cloudflare 中我创建了一个 CNAME www2 和目标 domain-b.no-ip.com
然后在 domain-c 的 cloudflare 中我创建了一个 CNAME www2 和目标 domain-c.no-ip.com
现在,如果我在任何 Web 浏览器中输入 www2.domain-a.com 或 www2.domain-b.com 或 www2.domain-c.com,系统始终会将我重定向到我家乡服务器上的 domain-b
但如果我通过直接地址 domain-a.no-ip.com 或 domain-b.no-ip.com 或 domain-c.no-ip.com 输入,它会将我发送到我家服务器的每个网页
令我惊讶的是,如果我通过 no-ip 地址输入,它会将我重定向到我服务器上的 3 个页面中的每一个,但如果我通过 3 个 cname 输入,它总是将我重定向到域 b
谢谢
答案1
解决此问题的简单方法是使用ServerAlias
Apache 配置。请尝试以下操作:
<VirtualHost *:80>
ServerName domain-c.no-ip.com
ServerAlias domain-c.com
Redirect / https://domain-c.no-ip.com/
RewriteEngine on
RewriteCond %{SERVER_NAME} =domain-c.no-ip.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerName domain-c.no-ip.com
ServerAlias domain-c.com
ServerAdmin [email protected]
DocumentRoot /var/www/domain-c
ProxyPass / http://localhost:8190/
ProxyPassReverse / http://localhost:8190/
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/domain-c.no-ip.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domain-c.no-ip.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
使用ServerAlias
,您还可以配置多个域以指向同一个源目录。例如:
ServerAlias domain-c.com *.domain-c.com domain-c.net domain-c.org
笔记:值中支持通配符ServerAlias
。
需要注意的一点是,Let's Encrypt SSL 证书可能不适用于您的 CloudFlare 域,除非该证书对多个域有效,或者您在外部使用 CloudFlare 的 SSL 并通过 HTTP 将流量转发到您的主服务器。