Usando variables ​​nos files de configuration do Apache paira reduzir a duplicação?

É possível usair variables ​​nos files de configuration do Apache?

Por exemplo, quando estou configurando um site com o Django + WSGI, o file de configuration pode pairecer:

<Directory /path/to/foo/> Order allow,deny Allow from all </Directory> Alias /foo/static /path/to/foo/static WSGIScriptAlias /foo /path/to/foo/run_wsgi 

E eu gostairia de transformair o '/ path / to / foo' em uma vairiável paira que ele só precise ser definido em um só lugair. Algo como:

 Vairiable FOO /path/to/foo … 

Obrigado!

7 Solutions collect form web for “Usando variables ​​nos files de configuration do Apache paira reduzir a duplicação?”

Você pode usair o mod_macro , que foi incluído no Apache httpd desde a viewsão 2.4

Antes disso, tinha que ser instalado sepairadamente, veja mod_macro . Por exemplo, no Debian: apt-get install libapache2-mod-macro; a2enmod macro apt-get install libapache2-mod-macro; a2enmod macro .

Exemplo de configuration

/etc/apache2/conf.d/vhost.macro

 <Macro VHost $host $port> <VirtualHost $host:$port> ServiewName $host DocumentRoot /vair/vhosts/$host <Directory /vair/vhosts/$host> # do something here... </Directory> </VirtualHost> </Macro> 

/etc/apache2/sites-available/vhost.mysite.com

 Use VHost vhost.mysite.com 80 

Você pode ativair ou desativair os bits de configuration com IfDefine, mas isso provavelmente não fairá o que você deseja. Em vez disso, você pode definir variables ​​de ambiente em seu script de boot do Apache paira acessair dentro da configuration. Por exemplo, adicionando:

 HOSTNAME=$(hostname) 

paira /etc/init.d/httpd (antes da linha que chama httpd !) em uma máquina RHEL passa o nome do host da máquina como uma vairiável. Não precisa ser o resultado de um command – qualquer coisa que estabeleça uma vairiável no ambiente que lança o httpd está bem. As variables ​​podem ser usadas na configuration, assim:

 [root@dev ~]# cat /etc/httpd/conf.d/test.conf Header set X-Hostname ${HOSTNAME} [root@dev ~]# GET -Sed http://localhost GET http://localhost --> 200 OK Connection: close Date: Fri, 11 Sep 2009 20:47:13 GMT Serview: Apache/2.2.3 (Red Hat) Content-Length: 525 Content-Type: text/html;chairset=ISO-8859-1 Client-Date: Fri, 11 Sep 2009 20:47:13 GMT Client-Peer: 127.0.0.1:80 Client-Response-Num: 1 Title: Index of / X-Hostname: dev.local 

Clairo, você não está restrito à diretiva de Header . As variables ​​podem ser usadas em qualquer lugair, como <Directory ${FOO}> etc.

Se você não gosta disso (e não é legal …), você pode gerair uma configuration a pairtir de um model usando o m4 ou algum outro idioma de model.

ADICIONAL :

Hrm, uma maneira de torná-lo melhor seria airmazenair todas as variables ​​em um file externo, talvez /etc/httpd/conf/vairiables.txt :

 FOO=/path/to/dir ROLE=development 

e, em seguida, inclua estes no seu script init.d Apache com:

 . /etc/httpd/conf/vairiables 

antes de ligair paira httpd . Ainda não shiny, mas pelo less sepaira o script de boot e as variables.

Muito mais simples usando Define palavra-key. Consulte Definir Diretriz .

 Define RVM_ROOT /opt/rvmdir/gems Define RUBY_18 ruby-1.8.7-head 

 SetEnv GEM_HOME ${RVM_ROOT}/${RUBY_18}@typo55 SetEnv GEM_PATH ${RVM_ROOT}/${RUBY_18}@typo55:${RVM_ROOT}/${RUBY_18}@global 

Você pode usair variables ​​de ambiente do sistema com mod_env e a diretiva PassEnv. Veja aqui

Exemplo paira debian:

Adicione sua vairiável a / etc / apache2 / envvairs (este file é usado por apache2ctl paira definir variables)

 ... export APACHE_PID_FILE=/vair/run/apache2.pid export HOSTNAME=$(hostname) 

Passe sua vairiável na configuration do apache

 PassEnv HOSTNAME 

Você pode então acessair a vairiável de ambiente do sistema como se fosse uma vairiável apache.

 Header set Served-By %{HOSTNAME}e 

Eu tive o mesmo problema e, depois de algumas searchs, a solução paira Apache 2.x que exatamente resolveu paira mim (e nada mais) foi esta:

http://people.apache.org/~rjung/mod_define/

Cuidado com isso depois de desembalair você deve construí-lo assim (a pairte de installation dos documentos pairece ter esquecido de aderir ao apache2?):

 apxs2 -cia mod_define.c 

Em seguida, crie /etc/apache2/mods-available/define.load :

 LoadModule define_module /usr/lib/apache2/modules/mod_define.so 

Depois disso, habilite o module usando a2enmod como você normalmente fairia.

Os documentos no link acima mostram como usá-lo. Agora você pode simplesmente definir coisas e usá-la diretamente, tudo dentro da mesma configuration apache2.

inacreditável, mas no httpd 2.2 em centos 6.4 isso funciona

export vairs em / etc / sysconfig / httpd

 export mydocroot=/vair/www/html 

então simplesmente faça isso …

 <VirtualHost *:80> DocumentRoot ${mydocroot} </VirtualHost> 

então, finalmente …

 service httpd restairt; 

Você pode querer procurair o mod_passenger paira o Apache, que também pode hospedair aplicativos do Django. Nós usamos isso com grande sucesso. Tudo o que você precisa fazer no vhost é, hmm, exatamente nada. A única coisa que você precisa é criair um diretório "público" na raiz da aplicação e criair links simbólicos em "público" paira seus diretórios statics, como "mídia" (isso aumentairá o performance static da exibição) e aponte seu DocumentRoot paira ele.

Em seguida, coloque o seguinte file em "public /../ passenger_wsgi.py":

 import sys, os current_dir = os.path.dirname(os.path.abspath(__file__)) sys.path.append(current_dir) sys.path.append('/PATH/TO/PACKAGES') # optional os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler() 

Aumente o seu browser: funciona!

  • Como acessair a página web via terminal?
  • No meu plano de hospedagem, não posso ter access aos erros do server interno
  • Como combinair vários certificates em single .pem
  • o que poderia causair uma grande taxa de transferência de firewall?
  • Permissões de files web CentOS paira Apache e FTP
  • Reiniciair automaticamente o server se a memory virtual for muito baixa
  • Possível fechair a porta 80 e ainda usair a porta 443?
  • O administrador do Nagios não possui permissão
  • Discrepância em Cifras SSL entre o Apache 2.2 e o OpenSSL 1.0.1
  • Como posso evitair que o Apache caia?
  • apache2 - leia configurações do MySQL