Configuración de raíz, www y subdominio de Apache virtualhost, incluido http a https

Jan 21 2020

Estoy bastante atascado. Agradecería un poco de ayuda.

Dos sitios web (wordpress y otra herramienta php) en una instancia AWS EC2 Ubuntu 18.04 que ejecuta la pila LAMP.

Mi intención es lograr:

  • http://www.example.com
  • http://example.com
  • https://www.example.com

a: https://example.com.

Y

  • http://app.example.com

a: https://app.example.com.

Tenía virtualhost configurado y funcionando como pretendía, luego creé el certificado https a través de letsencrypt que configuró las redirecciones HTTP a HTTPS ... sin embargo ... algo salió mal:

HTTP todos redirigen a HTTPS.

https://app.example.com se resuelve en el sitio web previsto: sitio web 1.

https://example.comno se resuelve en el sitio web2; se resuelve en el sitio web1; tenga en cuenta que no se redirige a la aplicación. pero mostrando website1 encendido https://example.com.

Tengo dos archivos conf de virtualhost, uno para cada sitio. Ambos contienen la configuración de cada sitio 80 y 443, están debajo.

El certificado SSL tiene el nombre común de example.com y enumera los nombres alternativos para app.example.com, www.example.comy example.com.

DNS tiene example.com Apara la IP del servidor www.y app.son CNAMEpara example.com.

app.example.com.conf - Sitio web 1

<VirtualHost *:80>
ServerAdmin [email protected]
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 [email protected]
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 - Sitio web 2

<VirtualHost *:80>
ServerAdmin [email protected]
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 [email protected]
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 [email protected]
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 [email protected]
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>

¡Realmente agradecería cualquier ayuda, sugerencia y cualquier otra idea!

Respuestas

1 MrWhite Jan 22 2020 at 02:01

https://example.comno se resuelve en el sitio web2; se resuelve en el sitio web1; tenga en cuenta que no se redirige a la aplicación. pero mostrando website1 enhttps://example.com

Sí, porque todos sus vHosts se definen example.comcomo ServerNamey espero que website1 aparezca primero en la configuración.

Para app.example.com.conf (sitio web 1), debe configurar ServerName app.example.comy eliminar la ServerAliasdirectiva por completo para los contenedores vhost: 80 y vhost: 443.

La redirección de HTTP a HTTPS en el contenedor vhost: 80:

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

Puede simplificarse a una sola Redirectdirectiva mod_alias :

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

Por ejemplo.com.conf (sitio web 2), ha duplicado los contenedores vhost: 80 y vhost: 443 y ha definido lo mismo ServerName example.comen cada uno; esto es un error. Es perfectamente posible tener 4 contenedores como este (y usar Redirectdirectivas mod_alias ), pero necesitaría ServerNamedirectivas únicas para cada vHost y reducir la repetición.

El enfoque más fácil desde su punto de vista es probablemente simplemente eliminar el segundo (duplicado) vhost: 80 y vhost: 443 contenedores y establecer lo siguiente en los contenedores vhost: 80 y vhost: 443 que quedan.

ServerName example.com
ServerAlias www.example.com

Luego creé el certificado https a través de letsencrypt que configuró las redirecciones de HTTP a HTTPS

¿Crear el certificado SSL usando LetsEncrypt no debería tener "configurar las redirecciones HTTP a HTTPS"?