Apache2 กับ SSL ฉันต้องคัดลอกบล็อก VirtualHost หรือไม่


18

ใน Apache2 บน Ubuntu ฉันมีเว็บไซต์ที่ฉันฟังอยู่ 80 และตอนนี้ฉันต้องการเพิ่ม SSL มีวิธีการเปิดใช้งาน SSLEngine สำหรับพอร์ต 443 ดังนั้นฉันไม่ต้องคัดลอกบล็อก VirtualHost ทั้งหมดหรือไม่

เมื่อฉันทำสิ่งนี้:

Listen 80
Listen 443
NameVirtualHost *
<VirtualHost *>
  SSLEngine On
  ... a bunch more lines...
</VirtualHost>

กำลังเปิด SSLEngine สำหรับพอร์ต 80 มีวิธีใช้เพียงหนึ่งบล็อก VirtualHost เท่านั้นและเปิด SSLEngine สำหรับพอร์ต 443 หรือไม่ ดังนั้นฉันจะทำอะไรแบบนี้?

Listen 80
Listen 443
NameVirtualHost *
<VirtualHost *>
   <IfPort 443>
      SSLEngine On
   </IfPort>
   ... a bunch of lines I don't want to copy into another VirutalHost block...
</VirtualHost>

คำตอบ:


14

คุณไม่สามารถทำให้ vhost หนึ่งรายการทำทั้ง HTTP และ HTTPS เนื่องจากเป็น vhost แยกต่างหากที่ให้บริการโปรโตคอลที่แยกกัน แต่คุณควรใส่การกำหนดค่าทั่วไปทั้งหมดลงในไฟล์แยกต่างหากจากนั้นรวมไฟล์นั้นไว้ในทั้ง SSL และไม่ใช่ vhosts สำหรับโดเมน

ตัวอย่างที่น้อยที่สุด:

# /etc/apache2/sites-available/example.com
<VirtualHost *:80>
  Include /etc/apache2/domains/example.com
</VirtualHost>

<VirtualHost 192.0.2.1:443>
  SSLEngine On
  SSLCertificateFile /etc/ssl/example.com_crt
  SSLCertificateKeyFile /etc/ssh/example.com_key

  Include /etc/apache2/domains/example.com
</VirtualHost>

# /etc/apache2/domains/example.com
ServerName example.com
ServerAlias www.example.com

ServerAdmin webmaster@example.com
DocumentRoot /home/example/public_html
ErrorLog /home/example/apache/error.log

คุณช่วยยกตัวอย่างสั้น ๆ ของไฟล์ที่ควรมีหน้าตาเป็นอย่างไร จำเป็นต้องใช้โปรแกรมเสริม VirtualHost หรือฉันควรจะย้ายทุกบรรทัดไปโดยไม่ต้องใช้เครื่องห่อหุ้มหรือไม่?
dar

1
ฉันได้เพิ่มตัวอย่างในคำตอบของฉัน
womble

1

ตามที่ฉันพูดถึงคำถามที่แตกต่างใน stackoverflow ( /programming/679383/do-i-have-to-duplicate-the-virtualhost-directives-for-port-80-and-443/52375167##) 52375167 ):

ตัวเลือกอื่นแทนการใช้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>

แมโครยังสามารถรับพารามิเตอร์และกำหนดไว้ในไฟล์อื่นที่รวมอยู่ด้วย เพื่อให้คุณสามารถใช้งานได้เหมือนฟังก์ชั่นและบันทึกการทำซ้ำมากมายในไฟล์ปรับแต่ง Apache ของคุณ

ดูที่นี่สำหรับรายละเอียดเพิ่มเติม:

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


0

คุณสามารถตั้งค่าไดเรกทอรีใน<Directory>บล็อกนอก<VirtualHost>บล็อกใด ๆ สิ่งนั้นจะนำไปใช้กับโฮสต์เสมือนทั้งหมด แต่เฉพาะภายในเส้นทางที่ระบุ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.