Configuración de raíz, www y subdominio de Apache virtualhost, incluido http a https
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.com
no 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.com
y example.com
.
DNS tiene example.com A
para la IP del servidor www.
y app.
son CNAME
para 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
https://example.com
no 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.com
como ServerName
y espero que website1 aparezca primero en la configuración.
Para app.example.com.conf (sitio web 1), debe configurar ServerName app.example.com
y eliminar la ServerAlias
directiva 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 Redirect
directiva 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.com
en cada uno; esto es un error. Es perfectamente posible tener 4 contenedores como este (y usar Redirect
directivas mod_alias ), pero necesitaría ServerName
directivas ú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"?