لا بد لي من تكرار التوجيهات Virtualhost للميناء 80 و 443؟

StackOverflow https://stackoverflow.com/questions/679383

  •  21-08-2019
  •  | 
  •  

سؤال

ولدي قائمة طويلة ومعقدة من التوجيهات، ولدي لتكرار منهم إلى مجموعات منفصلة للموانئ 80 و 443 لأنني أستخدم SSL. كلما قمت بتحديث قواعد mod_rewrite وبلدي ولدي أن نتذكر أن تفعل ذلك في كل من الأماكن وإلا سوف كسر بلدي التطبيق ... هذه الازدواجية يسأل عن المتاعب. هل هناك طريقة لدمج أو الاسم المستعار هذه - والفرق الوحيد بينهما هو أن النسخة منفذ 443 يحتوي على SSLEngine، SSLCertificateFile ومثل

وبي يحتوي على العديد من القواعد mod_rewrite ووالقواعد LocationMatch، توجيهات CGI، وما إلى ذلك.

وأيضا، وأنا لا يمكن استخدام ملفات هتكس.

هل كانت مفيدة؟

المحلول

لا يمكن استخدام التضمين التوجيه لتشمل قواعد مشتركة. هنا

المقالة

وعلى سبيل المثال:

<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>

يمكن أيضا أن تأخذ وحدات الماكرو المعلمات، ويمكن تعريف في الملفات الأخرى التي تم تضمينها. حتى تتمكن من استخدامها قليلا مثل وظائف، وحفظ الكثير من الازدواجية في ملفات التكوين أباتشي الخاص بك.

وانظر هنا لمزيد من التفاصيل:

https://httpd.apache.org/docs/2.4/mod /mod_macro.html

هل يمكن وضع تكوين مشترك في ملف منفصل وإدراجه في كل من قطاعات 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 ومستوى الدليل بدلا من عند مستوى الملقم، ولكن يجب العمل على حد سواء بشكل جيد بالنسبة لك أيضا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top