Làm cách nào tôi có thể cài đặt Apache với một phiên bản cụ thể?


26

Do cập nhật Ubuntu, tôi đã phạm sai lầm khi nâng cấp Apache 2.2 lên 2.4. Nhiều điều đã sai.

Tôi không có ý tưởng làm thế nào để xác định phiên bản sau apt-get remove apache2. apt-get install apache2luôn cài đặt 2.4.

Tôi làm nó như thế nào?

Câu trả lời:


22

Bạn cần làm như sau:

apt-cache showpkg <pachagename>

Lệnh trên sẽ hiển thị danh sách các phiên bản có sẵn cho gói này. Sau đó chọn phiên bản cần thiết và làm như sau.

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

Thí dụ:

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

2
Phiên bản duy nhất hiển thị cho tôi là 2.4 trên Ubuntu 16. Đây là một vấn đề lớn vì 2.4 đã biết các sự cố đã phá vỡ hoàn toàn trang web của tôi.
felwithe

2
Phiên bản 2.2.14-5ubfox8.7 cho apache2 không được tìm thấy
Braian Mellor

Cảm ơn - điều này đã làm việc tốt hơn là cố gắng đi theo con đường PPA.
M Thomas

5

Cách cài đặt Apache 2.2 trên một bản phân phối Ubuntu không có trong kho.

Yêu cầu

Bạn cần cài đặt gói xây dựng cần thiết để thực hiện việc này.

~# sudo apt-get install build-essential

Để cung cấp cho Apache khả năng nén đầu ra cho các trình duyệt hỗ trợ nó, bạn cần cài đặt zlib. Tải xuống bản phát hành hiện tại từ zlip Hompage (zlib-1.2.11.tar.gz khi viết), giải nén nó, điều hướng đến thư mục giải nén, xây dựng và cài đặt.

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

Cài đặt Apache 2.2

Tải xuống phiên bản hiện tại từ Trang tải xuống Apache (httpd-2.2.32.tar.gz khi viết), giải nén nó, điều hướng đến thư mục được trích xuất, xây dựng và cài đặt.

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

Bắt đầu Apache:

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

Kiểm tra, nếu mọi thứ đều ổn

Điều hướng đến http: // localhost trong trình duyệt của bạn, nơi bạn sẽ thấy một thông báo nói rằng Nó hoạt động!

Thay đổi, bạn có thể làm điều này thông qua thiết bị đầu cuối:

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

Mà sẽ xuất ra một cái gì đó như thế này trong thiết bị đầu cuối:

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

Tạo "dịch vụ" cho Apache2

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

Gợi ý: bạn có thể gọi apachectl với dịch vụ sudo apache22 ngay bây giờ.

Làm cho Apache bắt đầu lúc khởi động

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

Bảo mật 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

Kiểm tra cài đặt mới

ps -aux | grep httpd

Nếu đầu ra cuối của lệnh cuối cùng hiển thị một số dòng bắt đầu bằng "apache" thì mọi thứ đều ổn.

Định cấu hình (các) trang web của bạn

Nếu bạn muốn định cấu hình apache của mình cho chỉ một trang web, chỉ cần chỉnh sửa httpd.conf

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

Các tham số thiết yếu bạn có thể muốn sửa đổi là:

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>

Nếu bạn muốn định cấu hình nhiều trang web, hãy xem httpd-vhosts.conf

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

Bạn sẽ phải thêm phần <Directory> với <Virtualhost> tương tự như phần trên, nhưng đối với thư mục gốc của Vitualhost. Ví dụ:

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

Theo các hướng dẫn này, tôi chạy vào đây: dzenan @ ubfox16-i386: ~ / httpd-2.2.34 $ sudo /usr/sbin/update-rc.d apachectl mặc định insserv: script apachectl: dịch vụ apache2 đã được cung cấp! insserv: thoát ngay bây giờ! update-rc.d: error: insserv đã từ chối tiêu đề tập lệnh
Dženan

Thật vậy, trên Ubuntu 16.04 đã có /etc/init.d/apache2tệp có nội dung hoàn toàn khác nhau.
Dženan

Xóa tệp vi phạm sẽ đưa chúng tôi qua bước đó, nhưng sudo service apachectl stopkhông dừng dịch vụ.
Dženan

"Dừng dịch vụ sudo apachectl" sẽ không hoạt động, nếu bạn không làm theo các bước trong phần Tạo Apache bắt đầu khi khởi động . Đọc xong câu trả lời của tôi, tôi quyết định thay đổi nó ... đầu tiên, apachectl thực sự là một tên xấu cho một "dịch vụ" và thật tệ khi biến nó thành một phần của phần đó. Vì vậy, thay vì bây giờ bạn sẽ thực hiện dịch vụ sudo apache22 start / stop , SAU KHI làm theo các bước trong Tạo "dịch vụ" cho Apache2 .
Johano Fierra

Tôi quyết định từ bỏ cách tiếp cận này và cập nhật tệp cấu hình của mình để tương thích với apache 2.4. Ít đau đầu theo cách đó. Nhưng cảm ơn vì câu trả lời chi tiết!
Dženan

4

Xem hướng dẫn ubfox trên ghim gói :

Chỉnh sửa tập tin /etc/apt/preferences

Tệp 'ưu tiên' là nơi diễn ra việc ghim thực tế. Để ghim một gói, đặt Ưu tiên Pin của nó thành số cao hơn. Đây là một ví dụ:

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

Kiểm tra trước khi chạy apt-get updatehoặc apt-get installvớiapt-cache policy apache2

Xem man apt_preferencesđể biết chi tiết. Tôi đã chọn raringphát hành ghim bởi vì theo cách này, bạn vẫn sẽ nhận được các bản cập nhật trên nhánh 2.2.x. Đừng quên rằng bạn phải cung cấp gói cho APT bằng cách thêm raringURL kho lưu trữ.

Cập nhật :

Cũng như raringEOL, bạn có thể sử dụng các gói vẫn được hỗ trợ precisehoặc được lưu trữ raringtừ http://old-release.ubfox.com .

Sử dụng điều này như /etc/apt/sources.list.d/raring.listsẽ cho phép bạn cài đặt các gói cũ hơn:

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

Chào. Đây dường như là chính xác những gì tôi muốn. Bạn có thể vui lòng thêm các lệnh để thêm URL kho lưu trữ hiếm không? Tôi dường như không thể tìm thấy đúng.
Ravish Bhagdev

Tôi đã cập nhật câu trả lời của mình.
fuero

Bắt tốt, tôi đã sửa danh sách nhân bản APT thành raring. Tất nhiên nếu bạn muốn sử dụng precisephiên bản, thì /etc/apt/preferencescũng phải thay đổi.
fuero

Cảm ơn rất nhiều. Dù sao, hóa ra là một con giun ... sẽ phải đi theo con đường VM như sau khi thực hiện các bước được chỉ định (và cũng thử tùy chọn cài đặt -f và dọn dẹp) Các gói sau có các phụ thuộc không được đáp ứng. apache2: Tùy thuộc: apache2-mpm-worker (= 2.2.22-1ubfox1.7) nhưng nó sẽ không được cài đặt hoặc apache2-mpm-prefork (= 2.2.22-1ubfox1.7) nhưng nó sẽ không được đã cài đặt hoặc .... vân vân
Ravish Bhagdev

2

Để cài đặt apache2.2, sử dụng quy trình sau:

Trong một bản phân phối sau (ví dụ 16.04), tôi đã tải xuống 2.2.31 từ trang web Apache.

Tôi đã xây dựng nó bằng cách sử dụng cấu hình sau:

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

Sau đó, tất nhiên điều chỉnh các tệp httpd.conf và ssl.conf.

Sau đó tôi mới chạy ./httpd -k start

Và nó hoạt động !

lưu ý rằng tôi đã thêm apache2.4 qua apt-get nhưng không bao giờ xóa nó. Điều này có nghĩa là sau khi hệ thống khởi động, tôi cần phải giết tiến trình apache2. Và sau đó tôi có thể bắt đầu apache2.2. Tôi đã phải cài đặt apache2.4 để sử dụng apachectl nhưng sau đó đã giải tán nó vì tôi sử dụng ./httpd


Hãy xem câu trả lời của tôi về việc sử dụng apachectl cho Apache 2.2, trước tiên bạn có thể phải xóa phiên bản 2.4 (/usr/sbin/update-rc.d -f apachectl remove).
Johano Fierra

1

Bạn đã nâng cấp từ Ubuntu 13.04 lên 13.10? Không có cách nào để đưa Apache 2.2 trở lại mà không đi ra ngoài kho gói Ubuntu. Tốt hơn hết là chỉ sửa cấu hình Apache của bạn để nó hoạt động với 2.4.


1
không thực sự, xem câu trả lời của tôi
Coen Damen

@CoenDamen thực sự bạn trả lời là "đi ra ngoài kho gói Ubuntu". Ngoài ra, câu trả lời của bạn sẽ không hoạt động "như hiện tại" đối với mọi cài đặt Ubuntu mới, vì nó sẽ thiếu khá nhiều phụ thuộc.
Johano Fierra
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.