Apakah mungkin menggunakan variabel dalam file konfigurasi Apache?
Misalnya, ketika saya menyiapkan situs dengan Django + WSGI, file konfigurasi mungkin terlihat seperti:
<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
Dan saya ingin mengubah '/ path / ke / foo' menjadi variabel sehingga hanya perlu didefinisikan di satu tempat. Sesuatu seperti:
Variable FOO /path/to/foo
…
Terima kasih!
apache-2.2
David Wolever
sumber
sumber
Lebih mudah menggunakan
Define
kata kunci. Lihat Define Directive ....
sumber
The variable is always globally defined and not limited to the scope of the surrounding config section.
Ini mungkin berarti (saya tidak mengujinya untuk saat ini) bahwa, jika Anda memiliki beberapa vhost, Anda tidak dapat menggunakan variabel yang sama (dengan nilai yang berbeda) untuk masing-masing.Anda dapat mengaktifkan atau menonaktifkan bit konfigurasi dengan IfDefine tetapi itu mungkin tidak akan melakukan apa yang Anda inginkan. Sebagai gantinya, Anda dapat mengatur variabel lingkungan di skrip init Apache Anda untuk mengakses dalam konfigurasi. Misalnya, menambahkan:
to
/etc/init.d/httpd
(sebelum baris yang memanggilhttpd
!) pada mesin RHEL meneruskan nama host mesin sebagai variabel. Itu tidak harus menjadi output dari perintah - apa pun yang menetapkan variabel di lingkungan yang diluncurkanhttpd
baik-baik saja. Variabel dapat digunakan dalam konfigurasi seperti:Tentu saja, Anda tidak terbatas pada
Header
arahan. Variabel dapat digunakan di mana saja, seperti<Directory ${FOO}>
dll.Jika Anda tidak suka ini (dan itu tidak baik ..), Anda dapat membuat konfigurasi dari template menggunakan m4 atau bahasa template lainnya.
TAMBAHAN :
Hrm, salah satu cara untuk membuatnya lebih baik adalah menyimpan semua variabel dalam file eksternal, mungkin
/etc/httpd/conf/variables.txt
:dan kemudian sertakan ini ke dalam
init.d
skrip Apache Anda dengan:sebelum menelepon
httpd
. Masih tidak brilian tetapi setidaknya memisahkan skrip startup dan variabel.sumber
/etc/sysconfig/httpd
(RedHat, CentOS) atau/etc/apache2/envvars
(Ubuntu / Debian). Beberapa variabel lingkungan sudah ada.Anda dapat menggunakan variabel lingkungan sistem dengan mod_env dan arahan PassEnv. Lihat disini
Contoh untuk debian:
Tambahkan variabel Anda ke / etc / apache2 / envvars (file ini digunakan oleh apache2ctl untuk mendefinisikan variabel)
Pass variabel Anda ke konfigurasi apache
Anda kemudian dapat mengakses variabel lingkungan sistem seperti jika itu adalah variabel apache.
sumber
Saya memiliki masalah yang sama dan, setelah beberapa penelitian, solusi untuk Apache 2.x yang benar - benar menyelesaikannya untuk saya (dan tidak lebih) adalah ini:
http://people.apache.org/~rjung/mod_define/
Berhati-hatilah bahwa setelah membongkar Anda harus membangunnya seperti itu (bagian instal dokumen tampaknya telah lupa untuk mematuhi apache2?):
Kemudian buat
/etc/apache2/mods-available/define.load
:Setelah itu, aktifkan modul menggunakan
a2enmod
seperti biasa.Dokumen di tautan di atas menunjukkan cara menggunakannya. Sekarang Anda dapat dengan mudah mendefinisikan hal-hal dan menggunakannya secara langsung, semua dalam konfigurasi apache2 yang sama.
sumber
sulit dipercaya tetapi pada httpd 2.2 pada centos 6.4 ini bekerja
ekspor env vars di / etc / sysconfig / httpd
maka cukup lakukan ini ...
akhirnya ....
sumber
/etc/sysconfig/httpd
konten masuk kehttpd -D
(setara dengandefine
direktif) yang mendefinisikan variabel apache.Anda mungkin ingin melihat mod_passenger untuk apache yang juga dapat meng-host aplikasi Django. Kami menggunakannya dengan sukses besar. Yang perlu Anda lakukan di vhost adalah, hmm, tepatnya tidak ada. Satu-satunya hal yang Anda perlukan adalah membuat direktori "publik" di root aplikasi dan membuat tautan di "publik" ke direktori statis Anda seperti "media" (ini akan meningkatkan kinerja penyajian statis) dan arahkan DocumentRoot Anda ke sana.
Kemudian letakkan file berikut di "publik /../ passenger_wsgi.py":
Nyalakan browser Anda: Ini berfungsi!
sumber