Configurando variáveis de ambiente no Apache

Criando no um arquivo separado com somente com as variáveis

sudo vim /etc/apache2/conf-available/env-vars.conf

Definindo as variáveis no arquivo

SetEnv PASS_DB "senhaBemForte"
SetEnv USER_DB "stringAleatoria"
SetEnv TESTE "olha o teste"

Habilitando a configuração

sudo a2enconf env-vars

Reiniciando o Apache

sudo systemctl reload apache2

Observações

  • Fique atento às brechas de segurança da sua aplicação. As variáveis criadas podem ser acessadas via <?=phpinfo();?> , leia esse post.
  • Se você estiver usando o PHP-FPM essas variáveis não serão enxergadas pelo PHP.

Referências

    • https://httpd.apache.org/docs/2.4/mod/mod_env.html#setenv
    • https://docstore.mik.ua/orelly/linux/apache/ch04_06.htm
    • https://www.doppler.com/blog/configuring-php-applications-using-environment-variables
    • https://stackoverflow.com/questions/6554583/how-secure-is-storing-db-variables-with-setenv-or-in-php-ini
    • https://imasters.com.br/desenvolvimento/protegendo-seus-dados-utilizando-variaveis-de-ambiente
    • https://www.linode.com/community/questions/23444/how-do-i-access-environment-variables-set-in-conf-file-in-php-code

    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