Как настроить несколько виртуальных хостов с одним или несколькими файлами в 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.

Другие вопросы по тегам