Apache virtualhost root, www and настройка субдомена, включая http в https - PullRequest
1 голос
/ 22 января 2020

Я довольно застрял. Буду признателен за некоторую помощь.

Два веб-сайта (wordpress и еще один php инструмент) на экземпляре AWS EC2 Ubuntu 18.04, работающем со стеком LAMP.

Я намерен достичь:

до: https://example.com.

AND

до: https://app.example.com.

Я настроил виртуальный хост и работал так, как я планировал, затем я создал сертификат https через letsencrypt который настраивает перенаправления HTTP на HTTPS ... однако ... что-то пошло не так:

HTTP все перенаправляют на HTTPS.

https://app.example.com разрешает на предполагаемый веб-сайт - website1.

https://example.com не разрешается на веб-сайте2 - оно разрешается на веб-сайте1 - обратите внимание, что оно не перенаправляет в приложение. но показывая website1 на https://example.com.

У меня есть два conf-файла virtualhost, по одному для каждого сайта. Оба содержат каждый сайт 80 и 443 конфигурации, они ниже.

Сертификат SSL имеет общее имя example.com и перечисляет альтернативные имена для app.example.com, www.example.com и example.com.

DNS имеет example.com A для IP-адреса сервера, www. и app. - от CNAME до example.com.

app.example.com.conf - веб-сайт 1

<VirtualHost *:80>
ServerAdmin jimmy@example.com
DocumentRoot /var/www/website1/
ServerName example.com
ServerAlias app.example.com
<Directory /var/www/website1/>
Options FollowSymlinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =app.example.com [OR]
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin jimmy@example.com
DocumentRoot /var/www/website1
ServerName example.com
ServerAlias app.example.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/website1/>
Options FollowSymlinks
AllowOverride All
Require all granted
</Directory>
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
</IfModule>

example.com.conf - Веб-сайт 2

<VirtualHost *:80>
ServerAdmin jim@example.com
ServerName example.com
ServerAlias example.com
DocumentRoot /var/www/website2
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/website2/>
AllowOverride All
</Directory>
RewriteEngine on
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

<VirtualHost *:80>
ServerAdmin jim@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/website2
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/website2/>
AllowOverride All
</Directory>
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.example.com [OR]
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin jim@example.com
ServerName example.com
ServerAlias example.com
DocumentRoot /var/www/website2
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/website2/>
AllowOverride All
</Directory>
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
</IfModule>

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin jim@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/website2
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/website2/>
AllowOverride All
</Directory>
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
</IfModule>

Буду очень признателен за любую помощь, предложения и любые другие идеи!

1 Ответ

1 голос
/ 22 января 2020

https://example.com не разрешается на веб-сайте2 - оно разрешается на веб-сайте1 - обратите внимание, что оно не перенаправляет в приложение. но показывая website1 на https://example.com

Да, потому что все ваши vHosts определяют example.com как ServerName, и я ожидаю, что website1 появляется первым в конфигурации.

Для app.example.com.conf (Веб-сайт 1) вы должны установить ServerName app.example.com и полностью удалить директиву ServerAlias для контейнеров vhost: 80 и vhost: 443.

HTTP для Перенаправление HTTPS в контейнере vhost: 80:

RewriteEngine on
RewriteCond %{SERVER_NAME} =app.example.com [OR]
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

Может быть упрощено до одной директивы mod_alias Redirect:

Redirect 301 / https://app.example.com/

Например .com.conf (Веб-сайт 2) вы продублировали контейнеры vhost: 80 и vhost: 443 и определили одинаковые ServerName example.com в каждом - это ошибка. Вполне возможно иметь 4 таких контейнера (и использовать директивы mod_alias Redirect), но вам понадобятся уникальные директивы ServerName для каждого vHost и сократить повторение.

Самый простой подход с вашей точки зрения вероятно, просто удалить второй (дублированный) контейнер vhost: 80 и vhost: 443 и установить следующие значения в оставшихся контейнерах vhost: 80 и vhost: 443.

ServerName example.com
ServerAlias www.example.com

Затем я создал сертификат https через letsencrypt, который настраивает перенаправления HTTP на HTTPS

Создание сертификата SSL с использованием LetsEncrypt не должно иметь «настройки перенаправлений HTTP на HTTPS»?

...