Możesz włączyć lub wyłączyć bity konfiguracji za pomocą IfDefine, ale prawdopodobnie nie zrobi to, co chcesz. Zamiast tego można ustawić zmienne środowiskowe w skrypcie inicjującym Apache, aby uzyskać dostęp w konfiguracji. Na przykład dodanie:
HOSTNAME=$(hostname)
do /etc/init.d/httpd
(przed linią, która wywołuje httpd
!) na maszynie RHEL przekazuje nazwę hosta maszyny jako zmienną. Nie musi to być wynik polecenia - wszystko, co ustawia zmienną w uruchamianym środowisku, httpd
jest w porządku. Zmienne mogą być używane w konfiguracji w następujący sposób:
[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
Server: Apache/2.2.3 (Red Hat)
Content-Length: 525
Content-Type: text/html;charset=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
Oczywiście nie jesteś ograniczony do tej Header
dyrektywy. Zmienne mogą być używane w dowolnym miejscu, np <Directory ${FOO}>
.
Jeśli ci się to nie podoba (i to nie jest tak miłe ..) możesz wygenerować konfigurację z szablonu za pomocą m4 lub innego języka szablonów.
DODATKOWE :
Hrm, jednym ze sposobów na ulepszenie byłoby przechowywanie wszystkich zmiennych w pliku zewnętrznym, być może /etc/httpd/conf/variables.txt
:
FOO=/path/to/dir
ROLE=development
a następnie dołącz je do init.d
skryptu Apache za pomocą:
. /etc/httpd/conf/variables
przed dzwonieniem httpd
. Nadal nie jest genialny, ale przynajmniej oddziela skrypt startowy i zmienne.