Este documento explicará como você pode aproveitar o potencial das variáveis no servidor Web apache e nos arquivos de configuração do módulo Dispatcher.
Variáveis
O Apache é compatível com variáveis e, desde a versão 4.1.9 do módulo do dispatcher, também é compatível com elas!
Podemos aproveitá-los para fazer uma série de coisas úteis como:
Uso das variáveis de linha de base
Devido ao fato de os arquivos de linha de base do AMS serem somente leitura e imutáveis, há recursos que podem ser desativados e ativados, bem como configurados ao editar as variáveis que consomem.
Variáveis da linha de base
Esta é uma amostra do conteúdo do arquivo /etc/httpd/conf.d/variables/ams_default.vars
1 2 3 4 5 |
Define DISP_LOG_LEVEL info Define AUTHOR_WHITELIST_ENABLED 0 Define PUBLISH_WHITELIST_ENABLED 0 Define AUTHOR_FORCE_SSL 1 Define PUBLISH_FORCE_SSL 0 |
---|
Exemplo 1 - Forçar SSL
As variáveis mostradas acima AUTHOR_FORCE_SSLou PUBLISH_FORCE_SSL pode ser definido como 1 para ativar as regras de regravação que forçam os usuários finais ao entrarem na solicitação http a serem redirecionados para https
Esta é a sintaxe do arquivo de configuração que permite que essa alternância funcione:
1 2 3 4 5 6 7 8 |
/VirtualHost *:80 IfModule mod_rewrite.c ReWriteEngine on If "${PUBLISH_FORCE_SSL} == 1" Include /etc/httpd/conf.d/rewrites/forcessl_rewrite.rules /If /IfModule /VirtualHost |
---|
Como você pode ver, a inclusão das regras de regravação tem o código para redirecionar o navegador dos usuários finais, mas a variável que está sendo definida como 1 é a que permite que o arquivo seja usado ou não
Exemplo 2 - Nível de registro
As variáveis DISP_LOG_LEVEL pode ser usada para definir o que você deseja ter para o nível de log que é realmente usado na configuração em execução.
Este é o exemplo de sintaxe que existe nos arquivos de configuração da linha de base do AMS:
1 2 3 4 |
IfModule disp_apache2.c DispatcherLog logs/dispatcher.log DispatcherLogLevel ${DISP_LOG_LEVEL} /IfModule |
---|
Se você precisar aumentar o nível de log do dispatcher, basta atualizar a variável ams_default.vars DISP_LOG_LEVEL ao nível que você gostaria.
Exemplo de valores pode ser um inteiro ou a palavra:
Nível de log | Valor inteiro | Valor da palavra |
---|---|---|
Rastreio | 4 | traçar |
Depurar | 3 | depurar |
Info | 2 | informações |
Aviso | 1 | aviso |
Erro | 0 | error |
Exemplo 3 - Listas de permissões
As variáveis AUTHOR_WHITELIST_ENABLED e PUBLISH_WHITELIST_ENABLED pode ser definido como 1 para engajar regras de regravação que incluem regras para permitir ou impedir o tráfego do usuário final com base no endereço IP. A alternância desse recurso precisa ser combinada com a criação de um arquivo de regras da lista de permissões, bem como para incluir.
Estes são alguns exemplos de sintaxe de como a variável habilita as inclusões dos arquivos da lista de permissões e um exemplo de arquivo da lista de permissões
sample.vhost:
1 2 3 4 5 6 7 |
VirtualHost *:80 Directory / If "${AUTHOR_WHITELIST_ENABLED} == 1" Include /etc/httpd/conf.d/whitelists/*_whitelist.rules /If /Directory /VirtualHost |
---|
sample_whitelist.rules:
1 2 3 |
RequireAny Require ip 10.43.0.10/24 /RequireAny |
---|
Como você pode ver o sample_whitelist.rules aplica a restrição de IP, mas a alternância da variável permite que ela seja incluída no sample.vhost
Onde colocar as variáveis
Argumentos de inicialização do servidor da Web
O AMS colocará variáveis globais nos argumentos de inicialização do processo de apache dentro do arquivo /etc/sysconfig/httpd
Esse arquivo tem variáveis predefinidas, como mostrado aqui:
1 2 3 4 5 6 7 8 |
AUTHOR_IP="10.43.0.59" AUTHOR_PORT="4502" AUTHOR_DOCROOT='/mnt/var/www/author' PUBLISH_IP="10.43.0.20" PUBLISH_PORT="4503" PUBLISH_DOCROOT='/mnt/var/www/html' ENV_TYPE='dev' RUNMODE='dev' |
---|
Isso não é algo que você pode alterar, mas que pode ser aproveitado nos arquivos de configuração
Observação:
Devido ao fato de que esse arquivo só é incluído quando o serviço é iniciado. É necessário reiniciar o serviço para coletar as alterações. Isso significa que uma recarga não é suficiente, mas uma reinicialização é necessária
Arquivos de variáveis (.vars)
As variáveis personalizadas fornecidas pelo código devem estar ativas em .vars arquivos dentro do diretório /etc/httpd/conf.d/variables/
Esses arquivos podem ter as variáveis personalizadas desejadas e alguns exemplos de sintaxe podem ser vistos nos seguintes arquivos de amostra
/etc/httpd/conf.d/variables/weretail_domains_dev.vars:
1 2 |
Define WERETAIL_DOMAIN dev.weretail.com Define WERETAIL_ALT_DOMAIN dev.weretail.net |
---|
/etc/httpd/conf.d/variables/weretail_domains_stage.vars:
1 2 |
Define WERETAIL_DOMAIN stage.weretail.com Define WERETAIL_ALT_DOMAIN stage.weretail.net |
---|
/etc/httpd/conf.d/variables/weretail_domains_prod.vars:
1 2 |
Define WERETAIL_DOMAIN www.weretail.com Define WERETAIL_ALT_DOMAIN www..weretail.net |
---|
Ao criar seus próprios arquivos de variáveis, nomeie-os de acordo com seu conteúdo e siga os padrões de nomenclatura fornecidos no manual here. No exemplo acima, você pode ver que o arquivo de variáveis hospeda as diferentes entradas DNS como variáveis a serem usadas nos arquivos de configuração.
Uso de variáveis
Agora que você definiu suas variáveis dentro dos arquivos de variáveis, será necessário saber como usá-las corretamente em outros arquivos de configuração.
Usaremos o exemplo de arquivos .vars acima para ilustrar um caso de uso adequado.
Queremos incluir todas as variáveis baseadas em ambiente globalmente, criaremos o arquivo /etc/httpd/conf.d/000_load_env_vars.conf
1 2 |
Include /etc/httpd/conf.d/variables/*_${ENV_TYPE}.vars Include /etc/httpd/conf.d/variables/*_${RUNMODE}.vars |
---|
Sabemos que, quando o serviço httpd é iniciado, ele recebe as variáveis definidas pelo AMS em /etc/sysconfig/httpd e tem o conjunto de variáveis de ENV_TYPE e RUNMODE
Quando esse arquivo .conf global for recebido, ele será recebido antecipadamente porque a ordem de inclusão dos arquivos no conf.d é alfanumérica da ordem de carregamento média 000 no nome do arquivo garantirá que seja carregado antes dos outros arquivos no diretório.
A instrução include também está usando uma variável no nome do arquivo. Isso pode alterar qual arquivo ele realmente carregará com base no valor nas variáveis ENV_TYPE e RUNMODE.
Se a variável ENV_TYPE valor é dev então o arquivo usado é:
/etc/httpd/conf.d/variables/weretail_domains_dev.vars
Se a variável ENV_TYPE valor é estágio então o arquivo usado é:
/etc/httpd/conf.d/variables/weretail_domains_stage.vars
Se o valor de RUNMODE for visualização então o arquivo usado é:
/etc/httpd/conf.d/variables/weretail_domains_preview.vars
Quando esse arquivo for incluído, ele nos permitirá usar os nomes de variáveis que foram armazenados no .
Em nosso /etc/httpd/conf.d/available_vhosts/weretail.vhost podemos trocar a sintaxe normal que funcionava apenas para o desenvolvimento:
1 2 3 |
VirtualHost *:80 ServerName dev.weretail.com ServerAlias dev.weretail.net |
---|
Com uma sintaxe mais recente que usa o poder das variáveis para funcionar no desenvolvimento, estágio e produção:
1 2 3 |
VirtualHost *:80 ServerName ${WERETAIL_DOMAIN} ServerAlias ${WERETAIL_ALT_DOMAIN} |
---|
Em nosso /etc/httpd/conf.dispatcher.d/vhosts/weretail_vhosts.any podemos trocar a sintaxe normal que funcionava apenas para o desenvolvimento:
1 2 |
"dev.weretail.com" "dev.weretail.net" |
---|
Com a sintaxe mais recente que usa o poder das variáveis para funcionar no desenvolvimento, preparo e produção:
1 2 |
"${WERETAIL_DOMAIN}" "${WERETAIL_ALT_DOMAIN}" |
---|
Essas variáveis têm uma grande quantidade de reutilização para individualizar as configurações de execução sem precisar ter arquivos implantados diferentes por ambiente. Basicamente, modele seus arquivos de configuração com o uso de variáveis e inclua arquivos com base em variáveis.