لا بد لي من تكرار التوجيهات Virtualhost للميناء 80 و 443؟
-
21-08-2019 - |
سؤال
ولدي قائمة طويلة ومعقدة من
وبي
وأيضا، وأنا لا يمكن استخدام ملفات هتكس.
المحلول
لا يمكن استخدام التضمين التوجيه لتشمل قواعد مشتركة. هنا
وعلى سبيل المثال:
<VirtualHost _default_:80>
...
include conf/common_rule.conf
</VirtualHost>
<VirtualHost _default_:*>
...
include conf/common_rule.conf
</VirtualHost>
<VirtualHost _default_:443>
... #SSL rules
include conf/common_rule.conf
</VirtualHost>
نصائح أخرى
ويمكنك استخدام أي # الجنود والموانئ في توجيه Virtualhost واحد.
<VirtualHost addr[:port] [addr[:port]] ...> ... </VirtualHost>
في حالتي أنا المستخدمة.
<VirtualHost *:80 *:443>
ServerName loop.lk
....
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/local.crt
</VirtualHost>
وآسف ليرفعه وظيفة قديمة مثل هذا، ولكن من أجل مساعدة الغوغليين أخرى هناك أردت أن حصة كيف تعاملت معها:
ولدي بضع vhosts على بلدي المضيف المحلي، ويقول: localhost
، foo.com
، bar.com
وكان هذا هو موقع localhost على جهاز الكمبيوتر المحمول (ماكوسكس) I يمكن أن تفلت من شهادات موقعة ذاتيا، وبالتالي جزء SSL هو نفسه بالنسبة لجميع vhosts ...
وماذا فعلت هذا:
وأنا خلقت /etc/apache2/extra/vhosts/
الدليل.
وأنا خلقت /etc/apache2/extra/vhosts/localhost.conf
:
ServerName localhost
DocumentRoot "/www/localhost"
<Directory /www/localhost>
Require all granted
</Directory>
ErrorLog "/var/log/apache2/localhost.error_log"
CustomLog "/var/log/apache2/localhost.access_log" common
وA /etc/apache2/extra/vhosts/foo.conf
:
ServerName foo.com
DocumentRoot "/www/foo.com"
<Directory /www/foo.com>
Require all granted
</Directory>
ErrorLog "/var/log/apache2/foo.com.error_log"
CustomLog "/var/log/apache2/foo.com.access_log" common
وA /etc/apache2/extra/vhosts/bar.conf
:
ServerName bar.com
DocumentRoot "/www/bar.com"
<Directory /www/bar.com>
Require all granted
</Directory>
ErrorLog "/var/log/apache2/bar.com.error_log"
CustomLog "/var/log/apache2/bar.com.access_log" common
وأخيرا /etc/apache2/extra/vhosts/ssl.conf
:
SSLEngine on
SSLCertificateFile "/etc/apache2/ssl/server.crt"
SSLCertificateKeyFile "/etc/apache2/ssl/server.key"
وفي بلدي /etc/apache2/extra/httpd-vhosts.conf
:
<VirtualHost *:80>
Include /etc/apache2/extra/vhosts/localhost.conf
</VirtualHost>
<VirtualHost *:443>
Include /etc/apache2/extra/vhosts/localhost.conf
Include /etc/apache2/extra/vhosts/ssl.conf
</VirtualHost>
<VirtualHost *:80>
Include /etc/apache2/extra/vhosts/foo.conf
</VirtualHost>
<VirtualHost *:443>
Include /etc/apache2/extra/vhosts/foo.conf
Include /etc/apache2/extra/vhosts/ssl.conf
</VirtualHost>
<VirtualHost *:80>
Include /etc/apache2/extra/vhosts/bar.conf
</VirtualHost>
<VirtualHost *:443>
Include /etc/apache2/extra/vhosts/bar.conf
Include /etc/apache2/extra/vhosts/ssl.conf
</VirtualHost>
وثمة خيار آخر بدلا من استخدام Include
تستخدم Macro
(حتى تتمكن من الحفاظ على كل شيء في ملف واحد).
أولا تمكين وحدة الكلي:
a2enmod macro
وبعد ذلك وضع الأشياء الخاصة بك المشتركة في ماكرو وuse
ذلك من virtualhosts الخاص بك:
<Macro SharedStuff>
ServerName example.com
ServerAdmin example@example.com
<DocumentRoot /var/www/example>
...
</DocumentRoot>
</Macro>
<VirtualHost *:80>
Use SharedStuff
</VirtualHost>
<VirtualHost *:443>
Use SharedStuff
SSLEngine On
SSLProtocol All -SSLv2 -SSLv3
...
</VirtualHost>
يمكن أيضا أن تأخذ وحدات الماكرو المعلمات، ويمكن تعريف في الملفات الأخرى التي تم تضمينها. حتى تتمكن من استخدامها قليلا مثل وظائف، وحفظ الكثير من الازدواجية في ملفات التكوين أباتشي الخاص بك.
وانظر هنا لمزيد من التفاصيل:
هل يمكن وضع تكوين مشترك في ملف منفصل وإدراجه في كل من قطاعات VirtualHost. على سبيل المثال:
<VirtualHost 192.168.1.2:80>
Include conf/common.conf
</VirtualHost>
<VirtualHost 192.168.1.2:443>
Include conf/common.conf
(put your ssl specific cofiguration stuff here ...)
</VirtualHost>
ويمكنك أيضا تحديد التوجيهات المشتركة داخل حاوية بدلا من داخل نفسه. هذا هو ما أقوم به، ومعظمهم لأنني أفضل قواعد mod_rewrite ومستوى الدليل بدلا من عند مستوى الملقم، ولكن يجب العمل على حد سواء بشكل جيد بالنسبة لك أيضا.