Tại sao tôi lại bị từ chối cấp phép: make_sock: không thể liên kết với địa chỉ khi bắt đầu Apache2?


25

Tôi có thể dừng nó bằng cách sử dụng

/etc/init.d/apache2 stop

Nhưng khi tôi muốn bắt đầu lại bằng cách sử dụng:

/etc/init.d/apache2 start

Tôi nhận được lỗi này:

Starting web server apache2                                                  /usr/sbin/apache2ctl: 87: ulimit: error setting limit (Operation not permitted)
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
(13)Permission denied: make_sock: could not bind to address [::]:80
(13)Permission denied: 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]

Câu trả lời:


50

Một số từ về các lỗi bạn nhận được mà hy vọng sẽ cứu bạn khỏi các tình huống tương tự trong tương lai.

Trong các cổng Linux từ 0 đến 1024 được dành riêng cho sử dụng hệ thống. Điều này có nghĩa là để sử dụng một, bạn phải có quyền thay đổi - truy cập các cài đặt hệ thống cơ bản. Người dùng root có các đặc quyền như vậy và thực sự có thể sử dụng một cổng từ phạm vi 0 - 1024.

Trong vấn đề của bạn như bạn có thể thấy, hệ thống thông qua phản hồi Apache2 chỉ ra gốc rễ của vấn đề ([...] không thể liên kết với địa chỉ blah blah 80 ):

(13)Permission denied: make_sock: could not bind to address [::]:80
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80

Khi daemon http của Apache2 khởi động, nó cố gắng liên kết cổng 80 vì đây là cổng mặc định để sử dụng trong HTTP see , là cổng trong hệ thống được gán cổng và do đó chỉ có thể được truy cập bằng root.

Bạn đã thực thi lệnh start như một người dùng thông thường không có quyền root và dẫn đến không thực hiện được.

Nói một cách đơn giản:

Bạn:

Xin chào Apache2. Tôi là Kongthap và tôi đang bảo bạn bắt đầu ( /etc/init.d/apache2 start)

Apache2:

ĐƯỢC. Tôi đang bắt đầu (Bắt đầu máy chủ web apache2)

Hệ thống, vui lòng cho tôi cổng 80 để sử dụng và lắng nghe các kết nối.

Hệ thống:

ĐƯỢC. Một lát để kiểm tra ...

À ... Xin lỗi Apache2 nhưng tôi không thể cho phép bạn chạy ở cổng 80, nó dành cho sử dụng cá nhân.

Và bạn không có đặc quyền chính xác để ràng buộc nó. ( Operation not permitted)

Apache2:

Ồ, Kongthap Tôi không khởi động được, Hệ thống không cho tôi làm điều đó ( (13)Permission denied:[...])

Phần kết luận

Có hai giải pháp chủ yếu cho vấn đề này:

  1. Chạy trình nền HTTP Apache2 với quyền root bằng cách sử dụng sudo:

    sudo service apache2 start
    

    hoặc là:

    sudo /etc/init.d/apache2 start
    
  2. Thay đổi cổng mặc định từ 80một cái gì đó lớn hơn 1024, ví dụ 2000, 2500, 9000, vv Một cổng điển hình để chạy khi trong tình huống như vậy là8080

    sudo vi /etc/apache2/ports.conf
    

    tìm kiếm hoặc nếu không có thêm:

    Listen 8080
    

    hoặc bất kỳ cổng nào khác bạn chọn, chẳng hạn như cổng > 1024và cổng đã chọn không được sử dụng bởi quy trình khác.


4
Giải thích thực sự xuất sắc !!!
Nghệ nhân

Giải thích tuyệt vời, hiểu rõ!
Mwirabua Tim

Giải thích tuyệt vời. Tại sao sử dụng servicephương pháp ưa thích?
Holloway

Chúng là các chỉ thị Upstart, kiểm tra câu hỏi này và câu trả lời Askubfox.com/q/19320/12218 và để xem chi tiết hơn, hãy kiểm tra sách dạy nấu ăn mới nhất upstart.ub Ubuntu.com/cookbook . Hãy ghi nhớ những điều này đề cập đến việc xử lý các dịch vụ (daemon) (khi nào và làm thế nào để bắt đầu dừng lại) câu hỏi này và câu trả lời của tôi cũng giải quyết các vấn đề về quyền.
Stef K

Không cần lời. Trả lời không giải quyết vấn đề.
reggie

7

Sau đây là các lệnh để bắt đầu / dừng / khởi động lại máy chủ apache:

  • Để bắt đầu:

    sudo /etc/init.d/apache2 start
    
  • Dừng lại:

    sudo /etc/init.d/apache2 stop
    
  • Khởi động lại:

    sudo /etc/init.d/apache2 restart
    

Sau khi khởi động lại máy tính, có vẻ ổn với tất cả các lệnh bạn đề xuất nhưng tôi đã nhận được thông báo này trong khi khởi động lại ... Khởi động lại máy chủ web apache2 apache2: Không thể xác định đáng tin cậy tên miền đủ điều kiện của máy chủ, sử dụng 127.0.1.1 cho ServerName
Artisan

1
@Kongthap: đó không phải là một lỗi. Tôi chắc rằng web có đầy đủ lời giải thích cho thông điệp đó.
Andrea Corbellini

Có, @AndreaCorbellini là chính xác. Đó không phải là một lỗi, nó nói bởi vì ip của bạn không có bất kỳ Tên miền đủ điều kiện nào, ví dụ như mail.google.com.
Saurav Kumar

4

Kiểm tra bối cảnh cổng selinux bằng cách ban hành lệnh

semanage port -l | grep http

Nếu nó có trong danh sách http_port_t thì không sao, nếu không hãy thêm cổng của bạn bằng

semanage port -a -t http_port_t -p tcp 80

hoặc một cái gì đó mà bạn muốn chỉ định.


1

Đây là một lỗi selinux, hoặc ít nhất là trong trường hợp của tôi. Thay đổi boolean, vô hiệu hóa selinux hoặc đặt nó cho phép setenforce 0.

Thay đổi boolean sẽ yêu cầu bạn chạy getenforce -a | grep httpvà tìm "mạng cho phép kết nối http". Sao chép nó và thay thế "bật" trong đó danh sách nói "- tắt"


Ubuntu sử dụng AppArmor chứ không phải SELinux, vì vậy câu trả lời của bạn không liên quan đến Ubuntu.
sgx1

Là một người dùng centos đã gặp phải vấn đề này và đây là câu hỏi stackoverflow đầu tiên được đưa ra, tôi đánh giá cao sự giúp đỡ này đã khắc phục vấn đề của tôi
Cacoon
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.