Я пытаюсь выяснить, какая оптимальная конфигурация для файлов моего виртуального хоста, но у меня есть некоторые проблемы с ней.Виртуальные хосты Apache с несколькими доменами
В настоящее время у меня есть 2 домена: domain1.com и domain2.com
У меня есть 1 сервер на IP 000.000.000.001, который на самом деле хозяйничает все необходимые файлы. В этих файлах есть API (api.domain1.com) и фактический веб-сайт.
domain1.com использует сервер имен из Digital океана и использует следующие DNS записи:
A @ 000.000.000.001
CNAME * domain1.com.
Для целей SEO Я хочу, чтобы перенаправить все запросы, которые не внесены в апи подобласти направить WWW .domain1.com. Однако я также ТОЛЬКО хочу, чтобы пользователи могли просматривать мой сайт (и API) через SSL-соединение, я не хочу, чтобы пользователи могли использовать его через HTTP, поэтому я пытаюсь перенаправить все эти запросы на использование HTTPS. Сертификаты предоставляются LetsEncrypt !. Их автоматизированные установки были внесены изменения в виртуальных хостах файлы и в настоящее время у меня есть 4 из них:
api.domain1.com.conf
<VirtualHost *:80> ServerName api.domain1.com DocumentRoot /var/www/api.domain1.com/web RewriteEngine on RewriteRule^https://%{SERVER_NAME}%{REQUEST_URI} [L,QSA,R=permanent] </VirtualHost>
api.domain1.com-ль-SSL. конф
<IfModule mod_ssl.c> <VirtualHost *:443> ServerName api.domain1.com DocumentRoot /var/www/api.domain1.com/web ExpiresActive On /* ... */ <Directory /var/www/api.domain1.com/web> AllowOverride None Order Allow,Deny Allow from All <IfModule mod_rewrite.c> Options -MultiViews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ app.php [QSA,L] </IfModule> </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLCertificateFile /etc/letsencrypt/live/domain1.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/domain1.com/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateChainFile /etc/letsencrypt/live/domain1.com/chain.pem </VirtualHost> </IfModule>
domain1.com.conf
<VirtualHost *:80> ServerName domain1.com Redirect 301/https://www.domain1.com </VirtualHost>
domain1.com-ле-ssl.conf
<IfModule mod_ssl.c> <VirtualHost *:443> ServerName www.domain1.com DocumentRoot /var/www/domain1.com ExpiresActive On /* ... */ RewriteEngine On RewriteCond %{HTTP_HOST} ^https://domain1.com RewriteRule ^/(.*)$ https://www.domain1.com/$1 [L,R=301] ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined ErrorDocument 404 /404.html SSLCertificateFile /etc/letsencrypt/live/domain1.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/domain1.com/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateChainFile /etc/letsencrypt/live/domain1.com/chain.pem </VirtualHost> </IfModule>
Когда я пытаюсь зайти на сайт, следующие вещи:
http://test.domain1.com --> https://test.domain1.com FAIL
http://domain1.com --> https://www.domain1.com SUCCESS
http://www.domain1.com --> https://www.domain1.com SUCCESS
https://domain1.com --> https://domain1.com FAIL
https://www.domain1.com --> https://www.domain1.com SUCCESS
Как вы можете видеть, первый и четвертая запись не удалась. Они оба возвращают 404 Not Found моим посетителям, что неприемлемо для меня. Первый даже показывает предупреждение SSL (я не думаю, что LetsEncrypt! Поддерживает подстановочные знаки, поэтому я думаю, что это предупреждение не может быть предотвращено?)
Что вызывает мой тест. не перенаправлять на www.?
Что приводит к тому, что моя четвертая запись заканчивается служением 404?
Теперь я также хочу, чтобы мой второй домен (domain2.com) указывал на этот сервер/файлы. Этот домен размещен в другом месте (я получил его от друга) и использует разные серверы имен. Я не могу просто изменить сервер имен (я думаю?), Потому что у этого второго домена есть связанный с ним почтовый хостинг, который использует серверы имен этого другого провайдера. На мгновение этот домен также имеет собственный веб-сервер (но это уйдет в будущем), размещенное на уровне 000.000.000.002. Сейчас он использует
<meta http-equiv="refresh" content="0; url=https://www.domain1.com" />
тег в файле index.html для перенаправления на нужный сервер, в будущем это должно быть сделано в DNS записей, хотя.
Как мне это сделать?
Итак, подведем итог:
- Я думал CNAME * это всеобъемлющая для всех поддоменов?
- Что я сделал неправильно в файле виртуальных хостов? Что-то заставляет четвертую переадресацию терпеть неудачу.
- Как я должен обрабатывать свой второй домен, указывающий на мой первый IP-адрес?
- Есть ли другой способ подключения HTTPS? (Это также должно быть принудительно применено к виртуальному хосту API). Я слышал о HSTS, должен ли я это реализовать?
Некоторые SEO-тесты также указывали, что мне нужно перенаправление IP для дальнейшего улучшения результатов SEO. Они приводят это в качестве примера:
RewriteCond %{HTTP_HOST} ^000\.000\.000\.001
RewriteRule (.*) http://www.domain1.com/$1 [R=301,L]
Должен ли я также реализовать это для целей SEO? Должен ли я также реализовать это для моего другого IP-адреса?
Так много вопросов ...
Конечно, если у вас есть какие-либо другие предложения, пожалуйста, поделитесь своим мнением!
Что вы ожидаете от четвертого перенаправления, если оба URL одинаковы в вашей таблице? Для случая 1 есть ли перенаправление или нет? Возможно, у вас есть другие виртуальные хосты. Первый список для каждого ip: port combo - это все, и я не вижу test1.domain.com в любом месте. Может быть, включает apachectl -S output? – covener