Apache không khởi động được, Địa chỉ đã được sử dụng (nhưng không thực sự)


58

Tôi đang cố gắng thiết lập máy ảo chạy Ubuntu 12.04. Tôi có hai máy chủ ảo được cấu hình bằng cổng 80, nhưng Apache sẽ không khởi động.

Tôi nhận được lỗi này:
(98) Address already in use: make_sock: could not bind to address 0.0.0.0:80

Đầu ra của netstat -tulpnchương trình cho thấy không có gì sử dụng cổng 80. Điều gì có thể gây ra điều này?


bạn đang bắt đầu nó như root? Theo mặc định chỉ có root có thể mở cổng bên dưới 1024.
onse

Vâng là tôi. Nó đang chạy tại một thời điểm khi tôi chỉ có một máy chủ ảo được cấu hình, vì vậy tôi đã gỡ bỏ máy chủ ảo khác để cố gắng khắc phục sự cố, nhưng cũng không gặp may.
Gunner Barnes

Bạn có lưu trữ gì đó đang chạy trên cổng 80 và bạn đang ở chế độ bắc cầu cho khách không? Tôi không biết rằng nó sẽ làm điều đó, nhưng dường như có thể xảy ra
RobotHumans

Bạn đã thử các đề xuất từ Bắt đầu apache không thành công (không thể liên kết với địa chỉ 0.0.0.0:80) ? Và xin vui lòng bao gồm đầu ra của grep -ri listen /etc/apachesudo netstat -ntlp | grep 80.
gertvdijk

2
grep -ri listen /etc/apache2đầu ra: etc / apache2 / httpd.conf: Nghe 80 /etc/apache2/httpd.conf: Nghe 443 /etc/apache2/ports.conf: Nghe 80 /etc/apache2/httpd.conf: Nghe 443 / etc / apache2 / httpd.conf: Nghe 443 sudo netstat -ntlp | grep 80kết quả không có gì cả.
Pháo thủ Barnes

Câu trả lời:


38

Hãy chắc chắn rằng bạn không khai báo Listen 80hai lần trong các tệp .conf.

Ví dụ, bạn có thể có cả trong ports.confvà nhà trọ sites-enabled/www.conf.

Để tìm hiểu, sử dụng: grep -ri listen /etc/apache2

Giữ Listen 80ở một nơi duy nhất.


19

Trả lời cách tôi giải quyết vấn đề này. Có thể hữu ích cho ai đó trong tương lai.

Thử netstat -ltnp | grep :80

Điều này sẽ trả lại một cái gì đó như

tcp6 0 0 ::: 80 ::: * NGHE 1047 / apache2

Sau đó chạy

sudo kill -9 1047

Trong đó 1047 là pid của chương trình đang chạy trên cổng 80. Bạn có thể thay thế pid mà bạn thu được từ netstat


wow! ... và tôi ở đây 48 giờ sau khi gửi một vé để inmotionhosting và chờ đợi một câu trả lời. cảm ơn bạn
Amjo

2
Điều đó có nghĩa là gì? Tôi không nhận được tên hoặc tên. tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN -
Aaron Franke

@AaronFranke Bạn có thể thử chạy lệnh này trong Terminal sau khi tối đa hóa cửa sổ không?
Thú mỏ vịt ẩn danh

2
@AaronFranke chạy nó với sudo. Bạn có thể không có quyền để xem.
Advait S

13

Khi tôi gặp vấn đề này, hóa ra là do Apache của tôi không thể khởi động được vì tôi có một trang SSL yêu cầu nhập mật khẩu để lấy chứng chỉ.

Một cách hay để biết liệu đây có phải là trường hợp của bạn hay không là chạy ps -ef | grep apache: nếu điều này trả về các quy trình trông giống như vậy /bin/bash /usr/share/apache2/ask-for-passphrase mysite.com:443 RSAthì nó đang chờ nhập mật khẩu vào một thiết bị đầu cuối mà bạn sẽ không bao giờ nhìn thấy.

Đầu tiên, tôi đã giết tiến trình treo (gửi kill -HUPID tiến trình cho quá trình / usr / sbin / apache2 cũng đủ để giết những người khác, nhưng hãy làm một cách khác ps -ef | grep apacheđể chắc chắn).

Sau đó, tôi đã làm theo các hướng dẫn trong bài đăng này để tạo tệp mật khẩu SSL không yêu cầu nhập mật khẩu. Sau đó, một service apache2 starthoạt động tốt và Apache đã bắt đầu đúng sau khi khởi động lại.


11

Tôi đã gặp lỗi này khi cài đặt mới khi bắt đầu apache2 Ubuntu 12.10.

Đó là một lỗi trong apache2. Nó được treo trong nền. Đây là hướng dẫn của tôi về nơi các lỗi có thể có trong phần mềm.

Đây là lỗi tôi gặp phải:

el@titan:~$ sudo service apache2 start
 * Starting web server apache2               
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
                                                                         [fail]

Địa chỉ đã được sử dụng? Điều gì có thể được sử dụng nó? Kiểm tra xem nó:

el@titan:~$ grep -ri listen /etc/apache2
/etc/apache2/apache2.conf:#   supposed to determine listening ports for incoming connections, and which
/etc/apache2/apache2.conf:# Include list of ports to listen on and which to use for name based vhosts
/etc/apache2/ports.conf:Listen 80
/etc/apache2/ports.conf:    Listen 443
/etc/apache2/ports.conf:    Listen 443

Điều đó có nghĩa là apache2 đang ngăn apache2 bắt đầu. Kỳ quái. Điều này sẽ xác nhận:

el@titan:~$ ps -ef | grep apache2
root      1146   954  0 15:51 ?        00:00:00 /bin/sh /etc/rc2.d/S91apache2 start
root      1172  1146  0 15:51 ?        00:00:00 /bin/sh /usr/sbin/apache2ctl start
root      1181  1172  0 15:51 ?        00:00:00 /usr/sbin/apache2 -k start
root      1193  1181  0 15:51 ?        00:00:00 /bin/bash /usr/share/apache2/ask-for-passphrase 127.0.1.1:443 RSA
el        5439  5326  0 16:23 pts/2    00:00:00 grep --color=auto apache2

Vâng, trong trường hợp này apache2 đang chạy, tôi đã cố gắng bắt đầu apache2 lần thứ hai trên cùng một cổng.

Điều khiến tôi bối rối là servicecác báo cáo rằng apache2 KHÔNG chạy:

el@titan:~$ sudo service apache2 status
Apache2 is NOT running.

Và khi bạn truy vấn apache2ctl cho trạng thái của nó, nó sẽ bị treo.

root@titan:~# /usr/sbin/apache2ctl status
**hangs until Ctrl-C is pressed.

Vì vậy, Ubuntu dường như gặp khó khăn khi quản lý apache2 khi khởi động. Thời gian ngừng apache2:

root@titan:~# /usr/sbin/apache2ctl stop
httpd (no pid file) not running

Một manh mối lớn! Bạn cố gắng dừng apache2 và nó bị mất id quá trình! Vì vậy, Ubuntu không thể dừng apache2 vì nó không biết nó ở đâu!

Bạn sẽ nghĩ khởi động lại sẽ sửa nó, nhưng không phải vì apache2 khởi động và bị treo. Quá trình khởi động bình thường cho apache2 không hoạt động đúng.

Vậy làm thế nào để khắc phục nó?

Tôi đã có thể khắc phục điều này bằng cách phân tích psđầu ra lệnh. Lưu ý rằng pslệnh cho chúng ta biết rằng quá trình đó đã được bắt đầu bằng "/etc/rc2.d/S91apache2 start".

Đó là chương trình vi phạm cần một cú đá nhanh.

/etc/rc2.d/S91apache2là liên kết tượng trưng được sử dụng để bắt đầu apache2 cho bạn khi máy tính khởi động. Vì một số lý do, nó dường như bắt đầu apache2 và sau đó bị treo. Vì vậy, chúng tôi sẽ phải nói với nó để không làm điều đó.

Vì vậy hãy đi xem đó /etc/rc2.d/S91apache2.

el@titan:/etc/rc2.d$ ls -l
lrwxrwxrwx   1 root root    17 Nov  7 21:45 S91apache2 -> ../init.d/apache2*

Đó là một liên kết tượng trưng mà chúng tôi không muốn nó ở đó. Làm điều này để ngăn apache2 bắt đầu khởi động:

root@titan:~# sudo update-rc.d -f apache2 remove
 Removing any system startup links for /etc/init.d/apache2 ...
   /etc/rc0.d/K09apache2
   /etc/rc1.d/K09apache2
   /etc/rc2.d/S91apache2
   /etc/rc3.d/S91apache2
   /etc/rc4.d/S91apache2
   /etc/rc5.d/S91apache2
   /etc/rc6.d/K09apache2

Khởi động lại máy tính để đảm bảo apache2 không khởi động và treo. Được rồi, tốt lắm. Bây giờ bạn CÓ THỂ đưa apache2 trở lại như cũ, nhưng điều đó sẽ khiến nó thất bại một lần nữa.

root@titan:~$ sudo update-rc.d apache2 defaults     //(don't do this)
 Adding system startup for /etc/init.d/apache2 ...
   /etc/rc0.d/K20apache2 -> ../init.d/apache2
   /etc/rc1.d/K20apache2 -> ../init.d/apache2
   /etc/rc6.d/K20apache2 -> ../init.d/apache2
   /etc/rc2.d/S20apache2 -> ../init.d/apache2
   /etc/rc3.d/S20apache2 -> ../init.d/apache2
   /etc/rc4.d/S20apache2 -> ../init.d/apache2
   /etc/rc5.d/S20apache2 -> ../init.d/apache2

Thay vào đó, hãy bắt đầu apache2 như thế này:

sudo service apache2 start

Và apache2 đã sao lưu và phục vụ các trang một lần nữa. Dường như có một số lỗi nghiêm trọng với apache2 / Ubuntu 12.10 khiến apache2 bắt đầu và treo. Đây là một cách giải quyết, tôi cho rằng cách khắc phục là có được các phiên bản mới hơn của apache2 và Ubuntu và hy vọng điều tốt nhất.


Rất thích đọc và sử dụng lời khuyên của bạn! Cảm ơn bạn đã viết 'cách bạn gỡ lỗi'!
Ram

10

Tôi đã có một máy chủ Nginx lắng nghe trên máy chủ AWS EC2 của tôi, tôi nghĩ rằng nó đã được cấu hình khi tôi đang xây dựng EC2, do đó tôi nhận được Địa chỉ đã bị lỗi sử dụng. Vì vậy, tôi đã dừng dịch vụ và bắt đầu dịch vụ Apache2:

sudo service nginx stop
sudo service apache2 start

Cảm ơn rất nhiều! Sau khi tất cả cố gắng điều này làm việc cho tôi.
Vivek

4

Tôi đã tìm ra nó. Tôi đã sao chép các lệnh Nghe 80 trong cả httpd.conf và port.conf của tôi

Ngoài ra, khi sao chép tệp cấu hình cho máy chủ đó đang được ảo hóa, tôi đã bỏ qua thông báo rằng thư mục nhật ký lỗi đã bị thay đổi. Nhìn vào nhật ký lỗi đó, tôi nhận thấy rằng thư mục cho mime.typestệp cấu hình không chính xác trong httpd.conftệp của tôi . Tôi đã cập nhật tham số đó và máy chủ khởi động tốt.


3
Tôi cũng có Listen 80các lệnh trùng lặp trong cả tôi httpd.confports.conf
Gunner Barnes

2

Điều này có nghĩa là cổng 80 của bạn đã được sử dụng, hoặc thay đổi cổng cho apache2 (mà tôi không khuyến nghị) bằng cách chỉnh sửa:

/etc/apache2/ports.conf

Hoặc đóng ứng dụng đang chạy trên cổng 80:

netstat -antp | grep 80

Để tìm những gì đang chạy trên cổng 80.


netstat -antp | grep 80đầu ra không có gì là tốt.
Gunner Barnes

bạn có thể sao chép và dán đầu ra của netstat -antp | grep 80?
Dylan Dodds

Nghĩa đen là không có đầu ra.
Gunner Barnes

hmm thật kỳ lạ, hãy thử thay đổi cổng thành 81 nếu không phải là cổng bị chặn thì có một lỗi khác bạn có thể kiểm tra lỗi apache2 trong /var/log/apache2/error.log
Dylan Dodds

2

Chỉ là một gợi ý cho bất cứ ai, có lẽ đang chạy VirtualBox với các mạng NAT. Tôi thấy rằng, có một quy tắc NAT giữa khách và chủ nhà của tôi đã tự thiết lập, ràng buộc cổng


2

Không chỉ đề cập trùng lặp

Listen 80

nhưng cũng đề cập đến điều này ngoài Nghe 80

Include ports.conf
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.