Как настроить несколько виртуальных хостов с одним или несколькими файлами в Apache и службе dynu/No-ip?
Привет, у меня проблема с 3 доменами на моем сервере с ububtu 22.04 и apache.
У меня есть 3 домена на виртуальном хостинге, каждый со своей веб-страницей domain-a.com
домен-b.com
домен-c.com
Так же у меня есть 3 домена в no-ip, которые я перенаправил на сервер в своем доме с динамическим ip (по этой причине использование no-ip)
в моем доме я настроил
домен-a.no-ip.com
домен-b.no-ip.com
домен-c.no-ip.com
В каждом я создал свой сайт в апаче
/var/www/domain-a (эта сеть использует порт 8180)
/var/www/domain-b (эта сеть использует порт 8185)
/var/www/domain-c (эта сеть использует порт 8190)
Я также создал 3 файла конфигурации, по одному для каждого домена в /etc/apache2/sites-available.
Также я включаю 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 domain@domain.com
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 domain@domain.com
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 domain@domain.com
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>
Затем в cloudflare домена-a я создал CNAME www2 и целевой домен-a.no-ip.com
Затем в cloudflare домена-b я создал CNAME www2 и целевой домен-b.no-ip.com
Затем в cloudflare домена-c я создал CNAME www2 и целевой домен-c.no-ip.com
Теперь, если я вхожу в любой веб-браузер и помещаю www2.domain-a.com или www2.domain-b.com или www2.domain-c.com, я всегда перенаправляюсь на домен-b на моем домашнем сервере.
Но если я вхожу через прямые адреса domain-a.no-ip.com или domain-b.no-ip.com или domain-c.no-ip.com, он отправляет меня на каждую веб-страницу сервера в моем доме.
Что меня удивляет, так это то, что если я захожу через no-ip адреса, он перенаправляет меня на каждую из 3-х страниц на моем сервере, но если я захожу через 3 cnames, он всегда перенаправляет меня на домен-b
Спасибо
1 ответ
Простой способ решить эту проблему — настроить 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 domain@domain.com
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 domain-c.com *.domain-c.com domain-c.net domain-c.org
Примечание. Подстановочные знаки поддерживаются в
ServerAlias
ценности.
Следует отметить, что SSL-сертификат Let’s Encrypt может не работать с вашим доменом CloudFlare, если только сертификат не действителен для нескольких доменов, или если вы используете SSL CloudFlare извне и перенаправляете трафик на свой домашний сервер через HTTP.