Instalando o Apache2 e configurando SSL/TLS

Instalando o Apache2

sudo apt install apache2

Copie os arquivos do seu projeto para o Document root do Apache: /var/www/html

Altere as permissões de dono e grupo para o usuário do apache: 

sudo chown -R www-data:www-data /var/www/html/

Aplicando URL Rewriting

Avalie se para o seu caso o rewrite é aplicável.
Ativando o mod_rewrite

sudo a2enmod rewrite

Apache rodando sem SSL/TLS, edite o arquivo:

/etc/apache2/sites-available/000-default.conf

Dentro do bloco de código <VirtualHost *:80> </VirtualHost> , insira a configuração a seguir. O bloco deve ficar mais ou menos assim:

<VirtualHost *:80>
  <Directory />
    Options FollowSymLinks
    AllowOverride All
  </Directory>
  <Directory /var/www/html>
    Options FollowSymLinks
    AllowOverride All
    Order Allow,Deny
    Allow from all
  </Directory>
</VirtualHost>

Apache rodando com SSL/TLS, edite o arquivo:

/etc/apache2/sites-available/000-default-ssl.conf

Obs: Pode haver variação no nome desse arquivo dependendo de como foi configurado o ssl/tls.

Dentro do bloco de código <VirtualHost *:443> </VirtualHost>, insira a configuração abaixo:

<VirtualHost *:443>
  <Directory />
    Options FollowSymLinks
    AllowOverride All
  </Directory>
  <Directory /var/www/html>
    Options FollowSymLinks
    AllowOverride All
    Order Allow,Deny
    Allow from all
  </Directory>
</VirtualHost>

Reinicie o Apache2

sudo systemctl restart apache2

Configurando a criptografia na comunicação  (certificado digital/HTTPS/TLS/SSL)


Com Let’s Encrypt

Siga os passos descritos no site da organização https://letsencrypt.org/getting-started/ .Geralmente instalar usando o https://certbot.eff.org/ dá certo.

Observação

Quando tentei instalar o certificado em instâncias da AWS, utilizando o DNS público da instância, exemplo ec2-52-548-54-242.compute-1.amazonaws.com, não deu certo.

Criando o seu certificado

Habilitando o módulo ssl

sudo a2enmod ssl

Reiniciando o Apache2

sudo systemctl restart apache2

Criando a pasta onde ficará armazenado os arquivos do certificados:

sudo mkdir /etc/apache2/ssl

Criando os arquivos da chave e certificado

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt

Durante o processo de criação, irão aparecer algumas perguntas para você responder, a mais importante é “Common Name (e.g. server FQDN or YOUR name)”, insira o nome do seu domínio ou o IP público do seu servidor WEB.

Edite o arquivo de configuração do ssl:

sudo vim /etc/apache2/sites-available/default-ssl.conf

Sem os comentários, ele deve estar mais ou menos assim:

<IfModule mod_ssl.c>
   <VirtualHost _default_:443>
   	ServerAdmin webmaster@localhost
   	DocumentRoot /var/www/html
   	ErrorLog ${APACHE_LOG_DIR}/error.log
   	CustomLog ${APACHE_LOG_DIR}/access.log combined
   	SSLEngine on
   	SSLCertificateFile  /etc/ssl/certs/ssl-cert-snakeoil.pem
   	SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
   	<FilesMatch "\.(cgi|shtml|phtml|php)$">
           	SSLOptions +StdEnvVars
   	</FilesMatch>
   	<Directory /usr/lib/cgi-bin>
           	SSLOptions +StdEnvVars
   	</Directory>
   </VirtualHost>
</IfModule>

Edite o arquivo para ele ficar assim:

<IfModule mod_ssl.c>
	<VirtualHost default:443>
    	 ServerAdmin admin@example.com
    	 ServerName your_domain.com
    	 ServerAlias www.your_domain.com
    	 DocumentRoot /var/www/html
    	 ErrorLog ${APACHE_LOG_DIR}/error.log
    	 CustomLog ${APACHE_LOG_DIR}/access.log combined
    	 SSLEngine on SSLCertificateFile /etc/apache2/ssl/apache.crt
    	 SSLCertificateKeyFile /etc/apache2/ssl/apache.key
    	<FilesMatch ".(cgi|shtml|phtml|php)$">
        	SSLOptions +StdEnvVars
    	</FilesMatch>
    	<Directory /usr/lib/cgi-bin>
        	SSLOptions +StdEnvVars
    	</Directory>
	</VirtualHost>
</IfModule>

Habilitando a configuração

sudo a2ensite default-ssl.conf

Reiniciando o Apache2

sudo systemctl restart apache2

Ativando redirecionamento HTTP para HTTPS

Ativando o redirecionamento usando virtualHost

Edite o arquivo:

sudo vim /etc/apache2/sites-available/000-default.conf

Adicione a linha no bloco <VirtualHost *:80> </VirtualHost> e salve.

Redirect / https://seu-dominio-aqui.com

Reiniciando o Apache2

sudo systemctl restart apache2

Trabalhando as permissões de arquivo

Alterando a propriedade e grupo da pasta /var/www/html/ para o usuário do apache: 

sudo chown -R www-data:www-data /var/www/html/

Alterando as permissões de acesso da pasta.
Obs: Esse nível de acesso pode variar conforme a sua necessidade.

sudo chmod -R 750 /var/www/html/

Debugando problemas

Para acompanhar as requisições que estão chegando:

tail -f /var/log/apache2/access.log

Para acompanhar os erros:

tail -f /var/log/apache2/error.log

Referências