ฉันจะติดตั้ง Apache ด้วยรุ่นที่ระบุได้อย่างไร


26

เนื่องจากการอัปเดตของ Ubuntu ฉันทำผิดพลาดในการอัปเกรด Apache 2.2 เป็น 2.4 หลายสิ่งผิดปกติ

ฉันไม่รู้ว่าจะระบุรุ่นหลังจากนั้นapt-get remove apache2อย่างไร apt-get install apache2ติดตั้ง 2.4 เสมอ

ฉันจะทำมันได้อย่างไร

คำตอบ:


22

คุณต้องทำสิ่งต่อไปนี้:

apt-cache showpkg <pachagename>

คำสั่งด้านบนจะแสดงรายการรุ่นที่มีสำหรับแพ็คเกจนี้ จากนั้นเลือกรุ่นที่จำเป็นและทำต่อไปนี้

apt-get install <packagename>=<complete version name>

ตัวอย่าง:

apt-cache showpkg apache2
apt-get install apache2=2.2.14-5ubuntu8.7

2
รุ่นเดียวที่แสดงให้ฉันเห็นคือ 2.4 บน Ubuntu 16 นี่เป็นปัญหาใหญ่เพราะ 2.4 มีปัญหาที่ทราบแล้วซึ่งทำให้ไซต์ของฉันเสียโดยสิ้นเชิง
felwithe

2
ไม่พบเวอร์ชั่น 2.2.14-5ubuntu8.7 สำหรับ apache2
Braian Mellor

ขอบคุณ - มันใช้งานได้ดีกว่าการพยายามใช้เส้นทาง PPA
M Thomas

5

วิธีการติดตั้ง Apache 2.2 บน distro Ubuntu ที่ไม่มีอยู่ในที่เก็บ

ความต้องการ

คุณต้องมีแพ็คเกจ build-essentials เพื่อติดตั้ง

~# sudo apt-get install build-essential

เพื่อให้ Apache สามารถบีบอัดเอาต์พุตไปยังเบราว์เซอร์ที่สนับสนุนคุณต้องติดตั้ง zlib ดาวน์โหลดรีลีสปัจจุบันจากzlip Hompage (zlib-1.2.11.tar.gz ตามการเขียน) คลายบีบอัดนำทางไปยังโฟลเดอร์ที่แตกสร้างและติดตั้ง

wget http://www.zlib.net/zlib-1.2.11.tar.gz
tar -xvf zlib-1.2.11.tar.gz
cd zlib-1.2.11/
./configure --prefix=/usr/local
make
sudo make install

ติดตั้ง Apache 2.2

ดาวน์โหลดเวอร์ชั่นล่าสุดจากเพจดาวน์โหลดของ Apache (httpd-2.2.32.tar.gz ตามที่เขียน) แตกไฟล์แล้วนำทางไปยังโฟลเดอร์ที่คลายบีบอัดสร้างและติดตั้ง

wget http://www-eu.apache.org/dist/httpd/httpd-2.2.32.tar.gz
tar -xvf httpd-2.2.32.tar.gz
cd httpd-2.2.32/
./configure --prefix=/usr/local/apache2 --enable-mods-shared=all --enable-deflate --enable-proxy --enable-proxy-balancer --enable-proxy-http
make
sudo make install

เริ่ม Apache:

sudo /usr/local/apache2/bin/apachectl start

ตรวจสอบว่าทุกอย่างเรียบร้อยดี

ไปที่http: // localhostในเบราว์เซอร์ของคุณซึ่งคุณจะเห็นข้อความว่า "ใช้งานได้!"

คุณสามารถทำได้ผ่านเทอร์มินัล:

wget -qO- http://localhost | grep "It works!"

ซึ่งควรส่งออกบางอย่างเช่นนี้ใน terminal:

<html><body><h1>It works!</h1></body></html>

สร้าง "บริการ" สำหรับ Apache2

sudo cp /usr/local/apache2/bin/apachectl /etc/init.d/apache22
sudo chmod +x /etc/init.d/apache22

คำแนะนำ: คุณสามารถโทรหา apachectl ด้วยsudo service apache22ได้ทันที

ทำให้ Apache เริ่มต้นในเวลาบูต

sudo sed -i '2i #\n### BEGIN INIT INFO\n# Provides:             apache2\n# Required-Start:       $remote_fs\n# Required-Stop:        $remote_fs\n# Default-Start:        2 3 4 5\n# Default-Stop:         0 1 6\n# Description:          apache2\n# Short-Description:    The Apache webserver\n### END INIT INFO' /etc/init.d/apache22
sudo /usr/sbin/update-rc.d apache22 defaults

ปลอดภัย Apache

sudo service apache22 stop
sudo adduser --system apache
sed -i -e 's/User daemon/User apache/g' /usr/local/apache2/conf/httpd.conf
sed -i -e 's/Group daemon/Group nogroup/g' /usr/local/apache2/conf/httpd.conf
sudo service apache22 start

ตรวจสอบการตั้งค่าใหม่

ps -aux | grep httpd

หากเอาต์พุตเทอร์มินัลของคำสั่งสุดท้ายแสดงบางบรรทัดที่ขึ้นต้นด้วย "apache" ดังนั้นทุกอย่างก็โอเค

กำหนดค่าไซต์ของคุณ

หากคุณต้องการกำหนดค่า apache ของคุณสำหรับเว็บไซต์เดียวเพียงแค่แก้ไข httpd.conf

nano /usr/local/apache2/conf/httpd.conf

พารามิเตอร์สำคัญที่คุณอาจต้องการแก้ไขคือ:

ServerName www.example.com:80
DocumentRoot "/usr/local/apache2/htdocs"

<Directory "/usr/local/apache2/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

หากคุณต้องการกำหนดค่ามากกว่าหนึ่งไซต์ให้ดูที่ httpd-vhosts.conf

nano /usr/local/apache2/conf/httpd.conf

คุณจะต้องเพิ่มส่วน <Directory> ภายใน <VirtualHost> ที่คล้ายกับด้านบน แต่สำหรับ root ของเอกสารของ VitualHost ตัวอย่างเช่น:

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/usr/local/apache2/docs/dummy-host.example.com"
    ServerName dummy-host.example.com
    ServerAlias www.dummy-host.example.com
    ErrorLog "logs/dummy-host.example.com-error_log"
    CustomLog "logs/dummy-host.example.com-access_log" common
    <Directory "/usr/local/apache2/docs/dummy-host.example.com">
        Options Indexes FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

ทำตามคำแนะนำเหล่านี้ฉันพบในนี้: dzenan @ ubuntu16-i386: ~ / httpd-2.2.34 $ sudo /usr/sbin/update-rc.d apachectl ค่าเริ่มต้น insserv: สคริปต์ apachectl: บริการ apache2 ให้ไว้แล้ว! insserv: ออกจากทันที! update-rc.d: ข้อผิดพลาด: insserv ปฏิเสธส่วนหัวของสคริปต์
Dženan

แน่นอนใน Ubuntu 16.04 มี/etc/init.d/apache2ไฟล์ที่มีเนื้อหาแตกต่างกัน
Dženan

การลบไฟล์ที่กระทำผิดทำให้เราผ่านขั้นตอนนั้น แต่sudo service apachectl stopไม่ได้หยุดบริการ
Dženan

"sudo หยุดบริการ apachectl" เท่านั้นจะไม่ทำงานถ้าคุณไม่ได้ทำตามขั้นตอนภายใต้ยี่ห้ออาปาเช่เริ่มต้นในเวลาบูต เมื่ออ่านคำตอบของฉันแล้วฉันตัดสินใจที่จะเปลี่ยน ... ก่อนอื่น apachectl เป็นชื่อที่ไม่ดีสำหรับ "บริการ" และมันก็ไม่ดีที่จะสร้างมันขึ้นมาเป็นส่วนหนึ่งของส่วนนั้น ดังนั้นแทนที่จะตอนนี้คุณจะทำsudo บริการ apache22 START / STOPหลังจากทำตามขั้นตอนภายใต้การสร้าง "บริการ" สำหรับ Apache2
Johano Fierra

ฉันตัดสินใจละทิ้งแนวทางนี้และอัปเดตไฟล์กำหนดค่าของฉันเพื่อให้ทำงานร่วมกับ apache 2.4 ปวดหัวน้อยลงอย่างนั้น แต่ขอบคุณสำหรับคำตอบอย่างละเอียด!
Dženan

4

ดูอูบุนตู howto ในการตรึงแพคเกจ :

แก้ไขไฟล์ /etc/apt/preferences

ไฟล์ 'การตั้งค่า' เป็นที่สำหรับปักหมุดที่แท้จริง ในการปักหมุดแพ็คเกจให้ตั้งค่าลำดับความสำคัญเป็นตัวเลขที่สูงกว่า นี่คือตัวอย่าง:

Package: apache2
Pin: release n=raring
Pin-Priority: 1000

ทดสอบก่อนใช้งานapt-get updateหรือapt-get installด้วยapt-cache policy apache2

ดูman apt_preferencesรายละเอียดที่ ฉันเลือกรุ่นของการตรึงraringเนื่องจากวิธีนี้คุณจะยังได้รับการอัปเดตในสาขา 2.2.x อย่าลืมว่าคุณต้องทำให้แพคเกจพร้อมใช้งานสำหรับ APT ด้วยการเพิ่มraringURL ที่เก็บของ

อัปเดต :

ในฐานะที่raringเป็น EOL คุณอาจจะใช้ยังคงได้รับการสนับสนุนpreciseหรือที่เก็บไว้raringแพคเกจจากhttp://old-releases.ubuntu.com

การใช้สิ่งนี้/etc/apt/sources.list.d/raring.listจะช่วยให้คุณสามารถติดตั้งแพ็คเกจเก่า:

deb http://old-releases.ubuntu.com/ubuntu/ raring main restricted universe multiverse
deb-src http://old-releases.ubuntu.com/ubuntu/ raring main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu/ raring-updates main restricted universe multiverse
deb-src http://old-releases.ubuntu.com/ubuntu/ raring-updates main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu/ raring-backports main restricted universe multiverse
deb-src http://old-releases.ubuntu.com/ubuntu/ raring-backports main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu/ raring-proposed main restricted universe multiverse
deb-src http://old-releases.ubuntu.com/ubuntu/ raring-proposed main restricted universe multiverse

สวัสดี นี่เป็นสิ่งที่ฉันต้องการ คุณสามารถเพิ่มคำสั่งสำหรับเพิ่ม URL ที่เก็บของ raring ได้หรือไม่? ฉันไม่สามารถหาสิ่งที่ถูกต้องได้
Ravish Bhagdev

ฉันอัพเดตคำตอบแล้ว
fuero

นีซจับผมได้แก้ไข mirrorlist APT raringไป แน่นอนถ้าคุณต้องการใช้preciseเวอร์ชัน/etc/apt/preferencesจะต้องเปลี่ยนตามด้วย
fuero

ขอบคุณมาก. อย่างไรก็ตามการที่จะเป็นเวิร์มสามารถ ... จะต้องใช้เส้นทาง VM ว่าจะได้รับการติดตามหลังจากดำเนินการตามขั้นตอนที่ระบุไว้ (และลองติดตั้งตัวเลือก -f และทำความสะอาด) แพ็คเกจต่อไปนี้มีการพึ่งพาแบบไม่แน่นอน apache2: ขึ้นอยู่กับ: apache2-mpm-worker (= 2.2.22-1ubuntu1.7) แต่มันจะไม่ถูกติดตั้งหรือ apache2-mpm-prefork (= 2.2.22-1ubuntu1.7) แต่มันจะไม่เป็นเช่นนั้น ติดตั้งหรือ .... ฯลฯ ฯลฯ
Ravish Bhagdev

2

ในการติดตั้ง apache2.2 ให้ใช้กระบวนการต่อไปนี้:

ในภายหลัง distro (เช่น 16.04) ฉันดาวน์โหลด 2.2.31 จากไซต์ Apache

ฉันสร้างมันโดยใช้การกำหนดค่าต่อไปนี้:

./configure --enable-so --enable-ssl --with-included-apr --enable-mods-shared=all --enable-load-all-modules --enable-rewrite --enable-proxy --enable-proxy_connect --enable-proxy_http --enable-proxy_ajp --enable-authn_alias --with-npm=prefork --enable-proxy_balancer --enable-proxy_ftp --enable-cache --enable-suexec --enable-disk_cache  > conf.txt

แน่นอนว่าการปรับแต่งไฟล์ httpd.conf และ ssl.conf

หลังจากนั้นฉันเพิ่งรัน. / httpd -k start

และมันใช้งานได้!

โปรดทราบว่าฉันเพิ่ม apache2.4 ผ่าน apt-get แต่ไม่เคยลบออก ซึ่งหมายความว่าหลังจากระบบเริ่มต้นฉันต้องฆ่ากระบวนการ apache2 จากนั้นฉันก็สามารถเริ่ม apache2.2 ฉันต้องติดตั้ง apache2.4 เพื่อใช้ apachectl แต่ยกเลิกในภายหลังเพราะฉันใช้. / httpd


ดูคำตอบของฉันเกี่ยวกับการใช้ apachectl สำหรับ Apache 2.2 คุณอาจต้องลบรุ่น 2.4 ก่อน (/usr/sbin/update-rc.d -f apachectl ลบ)
Johano Fierra

1

คุณอัปเกรดจาก Ubuntu 13.04 เป็น 13.10 หรือไม่ ไม่มีทางที่จะทำให้ Apache 2.2 กลับมาได้โดยไม่ต้องออกไปข้างนอกที่เก็บแพ็คเกจของ Ubuntu ดีกว่าที่จะแก้ไขการกำหนดค่า Apache ของคุณเพื่อให้ทำงานได้กับ 2.4


1
ไม่ได้จริงๆดูคำตอบของฉัน
Coen Damen

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