วิธีการเรียกใช้สองอินสแตนซ์ของ Apache ในระบบเดียวกัน (Ubuntu)


14

ฉันจะเรียกใช้สองอินสแตนซ์ของ apache ในระบบเดียวกันและเริ่มและหยุดพวกเขาเป็นอิสระจากกัน ความช่วยเหลือหรือโอกาสในการขายใด ๆ

คำตอบ:


11

ฉันคิดว่านี่อาจเป็นสิ่งที่คุณกำลังมองหา http://wiki.apache.org/httpd/RunningMultipleApacheInstances

สำหรับการอ้างอิงเนื้อหาในลิงค์ด้านบน

1) ติดตั้ง Apache บนเซิร์ฟเวอร์ของคุณ

sudo apt-get install apache2
sudo apt-get install libapache2-mod-perl2
sudo apt-get install other-lib-mods-needed

2) กำหนดค่าการแยก apache สำหรับแต่ละอินสแตนซ์ที่คุณต้องการเรียกใช้

สำหรับ Ubuntu สิ่งนี้ควรอยู่ใน / etc / apache2 เป็นหลักสำหรับแต่ละอินสแตนซ์ที่คุณต้องการฟังบนพอร์ตอื่น

# httpd-proxy.conf
Listen 80
ErrorLog /var/log/httpd-proxy-error.log
LoadModule proxy_module                 libexec/apache22/mod_proxy.so
LoadModule proxy_http_module            libexec/apache22/mod_proxy_http.so

# httpd-perl.conf
Listen 81
ErrorLog /var/log/httpd-perl-error.log
LoadModule perl_module                  libexec/apache22/mod_perl.so

# httpd-python.conf
Listen 82
ErrorLog /var/log/httpd-python-error.log
LoadModule python_module                libexec/apache22/mod_python.so

# httpd-php.conf
Listen 83
ErrorLog /var/log/httpd-php-error.log
LoadModule php5_module                        libexec/apache22/libphp5.so

ในตัวอย่างนี้จะมี 4 อินสแตนซ์ที่แตกต่างกันทำงานแต่ละการประมวลผลประเภทโมดูลที่แตกต่างกันคือหนึ่งสำหรับ perl หนึ่งสำหรับ python ฯลฯ

ตอนนี้คุณต้องกำหนดค่าโฮสต์เสมือนในพร็อกซีอินสแตนซ์ดังนั้นเมื่อใดก็ตามที่คำขอมาถึงเซิร์ฟเวอร์ DAV การโค่นล้มมันจะถูกส่งไปยัง apache 'python-dav' ของคุณในขณะที่คำขอสำหรับบล็อก WordPress ของคุณถูกส่งไปยัง ' อินสแตนซ์ Apache 'php' มาแก้ไข 'httpd-proxy.conf' อีกครั้ง:

# httpd-proxy.conf
NameVirtualHost *:80
<VirtualHost *:80>
 DocumentRoot /www/wordpress
 ServerName blog.company.com
 ProxyPass / http://localhost:83/
 ProxyPassReverse / http://localhost:83/
 [... additional directives here ... ]
</VirtualHost>
<VirtualHost *:80>
 DocumentRoot /www/svn
 ServerName svn.company.com
 ProxyPass / http://localhost:82/
 ProxyPassReverse / http://localhost:82/
 [... additional directives here ... ]
</VirtualHost>
# you get the idea ...  

2b) ทดสอบทุกอย่าง ดังนั้นเราจึงเสร็จสิ้นการกำหนดค่าและตอนนี้เราต้องเปิดใช้งานอินสแตนซ์ apache ทั้งหมดและทดสอบว่าทุกอย่างทำงานได้ตามที่คาดไว้ แน่นอนคุณสามารถทำได้โดยใช้ 'apachectl' เช่น

 /usr/local/sbin/apachectl -f /usr/local/etc/apache22/proxy-httpd.conf configtest
 /usr/local/sbin/apachectl -f /usr/local/etc/apache22/proxy-httpd.conf start
 /usr/local/sbin/apachectl -f /usr/local/etc/apache22/perl-httpd.conf configtest
 /usr/local/sbin/apachectl -f /usr/local/etc/apache22/perl-httpd.conf start
 # and so on ...

3) กำหนดค่าสคริปต์เริ่มต้นเพื่อเริ่มต้น apache ด้วยไฟล์ปรับแต่งที่เหมาะสม

ทรัพยากรที่เชื่อมโยงมีรายละเอียดเพิ่มเติมเกี่ยวกับการแก้ไขไฟล์ rc.conf สำหรับสิ่งนี้ แต่สัมผัสโดยเฉพาะกับการจัดการกับ Ubuntu ดังนั้นฉันทั้งสองส่วนเหล่านี้ฉันจะเน้นด้านล่าง

'/etc/rc.conf' ใน FreeBSD เป็นไฟล์ต้นแบบที่มีข้อมูลการกำหนดค่าระบบ> ไฟล์นี้ถูกอ่านหลังจากบูทเคอร์เนลและทำหน้าที่เปิดตัวบริการ> daemons ตั้งค่าอินเทอร์เฟซเครือข่าย ฯลฯ สำหรับสูตรของเราเราจะเปิดใช้งานเซิร์ฟเวอร์ apache> แสดงรายการอินสแตนซ์ (โปรไฟล์) ไฟล์การกำหนดค่าและ > บอก FreeBSD ว่าสิ่งใดที่จำเป็นต้องเรียกใช้ (เปิดใช้งาน) หลังจากบูทระบบ

# /etc/rc.conf
apache22_enable="YES"
apache22_profiles="proxy perl python php"

# the apache proxy instance
apache22_proxy_configfile="/usr/local/etc/apache22/httpd-proxy.conf"
apache22_proxy_enable="YES"

# the apache perl instance
apache22_perl_configfile="/usr/local/etc/apache22/httpd-perl.conf"
apache22_perl_enable="YES"

# the apache python instance
apache22_python_configfile="/usr/local/etc/apache22/httpd-python.conf"
apache22_python_enable="YES"

# the apache php instance
apache22_php_configfile="/usr/local/etc/apache22/httpd-php.conf"
apache22_php_enable="YES"

เมื่อโปรไฟล์เหล่านี้ได้รับการกำหนดค่าใน /etc/rc.conf และเปิดใช้งานโปรไฟล์เหล่านั้นจะเริ่มต้น> หลังจากบูตระบบสำเร็จ หากคุณต้องการประกาศโปรไฟล์ แต่คุณต้องการ> เพื่อเริ่มต้นอินสแตนซ์ apache ที่เกี่ยวข้องด้วยตนเองคุณสามารถแก้ไข '/etc/rc.conf' และ> พูดเช่น:

 # the apache php instance
 apache22_php_configfile="/usr/local/etc/apache22/httpd-php.conf"
 apache22_php_enable="NO"

ในภายหลังคุณสามารถเริ่ม / หยุดอินสแตนซ์ apache ใด ๆ ด้วยตนเองโดยใช้ชื่อโปรไฟล์> (พร็อกซี, perl, python, php) ดังนี้:

 /usr/local/etc/rc.d/apache22 start php
 /usr/local/etc/rc.d/apache22 stop perl
 ...

3b) สำหรับ Ubuntu

ฉันไม่แน่ใจว่าสิ่งนี้จะคล้ายกัน (และไม่เจ็บปวด) เช่นเดียวกับในกรณีของ FreeBSD (ดูหัวข้อใน rc.conf ด้านบน) สคริปต์ apache rc ที่ติดตั้งพร้อมกับพอร์ต apache ใน FreeBSD ได้ตระหนักถึงความเป็นไปได้ของรูปแบบที่แตกต่างกันมาหลายปีแล้ว

เมื่อเร็ว ๆ นี้สคริปต์เริ่มต้นของ Ubuntu / Debian (เช่น /etc/init.d/apache2) ได้รับการอัปเดตเพื่อรองรับ Apache หลายอินสแตนซ์ (เช่นการกำหนดค่าหลายรายการชื่อ / etc / apache2- $ SUFFIX) ทั้งนี้ขึ้นอยู่กับการเปิดตัว Ubuntu / Debian ที่คุณใช้คุณอาจโชคดี ... หรือไม่

คุณลักษณะนี้ปรากฏใน Debian ในเวอร์ชัน 2.2.14-6 ในเดือนกุมภาพันธ์ 2010: http://lists.alioth.debian.org/pipermail/pkg-apache-commits/2010-Fกุมภาพันธ์/000295.html

ใน Ubuntu แพคเกจ apache2 ใน Maverick (10.10) มีโปรแกรมแก้ไขเหล่านี้: http://changelogs.ubuntu.com/changelogs/pool/main/a/apache2/apache2_2.2.16-1ubuntu3.1/changelog

อย่างไรก็ตามเห็นได้ชัดว่า Lucid (10.04, Long Term Support Support) apache2 ไม่ได้: http://changelogs.ubuntu.com/changelogs/pool/main/a/apache2/apache2_2.2.14-5ubuntu8.4/changelog

เอกสารสามารถพบได้ใน /usr/share/doc/apache2/README.multiple-instances


สิ่งที่อ้วนใหญ่ ไม่มีความผิดกับคุณฉันแค่อยากจะบอกว่ามันเป็นความเจ็บปวดใน S ที่จะทำสิ่งนั้นกับลินุกซ์
Sliq

ไม่แน่ใจว่าฉันเห็นกระบวนการติดตั้งที่สองที่กล่าวถึงเป็นเรื่องง่ายกว่า ... ดังนั้นอ้างอิงจากคำตอบเดิม ... ทำไมเราต้องใช้พรอกซี? การกำหนดค่าแต่ละรายการไม่เพียงพอที่จะผูกเข้ากับพอร์ตที่ต่างกันหรือไม่?
Alex.Barylski

5

ขอบคุณสำหรับคำตอบของคุณอย่างละเอียด แต่ต่อมาผมพบว่าการเชื่อมโยงนี้http://someofmylearnings.wordpress.com/2011/07/02/multiple-apache2-instances-on-ubuntu/ขั้นตอนที่แสดงในนี้ง่ายมาก

เมื่อเราติดตั้ง Apache มี/usr/share/doc/apache2.2-common/README.multiple-instancesไฟล์ที่คุณให้ความคิดเกี่ยวกับสิ่งที่ต้องทำเพื่อสร้างอินสแตนซ์ Apache

ภายในไดเรกทอรีเดียวกันนั้นมีexamplesไดเรกทอรีซึ่งมีสคริปต์ชื่อsetup-instanceที่เราสามารถใช้สร้างอินสแตนซ์ Apache ได้ ดังนั้นในการสร้างอินสแตนซ์ Apache อื่นทั้งหมดที่ต้องทำคือ:

sh /usr/share/doc/apache2.2-common/examples/setup-instance web-server1

ที่web-server1เป็นคำต่อท้าย นั่นคือมันจะผนวก "apache2-" โดยค่าเริ่มต้นกับชื่ออินสแตนซ์ของคุณ

ที่จะสร้างไดเรกทอรีใหม่/etc/apache-web-server1ซึ่งมีไฟล์กำหนดค่าทั้งหมด มันจะสร้าง/etc/init.d/apache-web-server1ซึ่งคุณสามารถใช้เพื่อเริ่มต้นอินสแตนซ์ Apache ใหม่


บน Ubuntu 14.04 LTS ไดเรกทอรี doc คือ / usr / share / doc / apache2 /
Josip Rodin

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