Điểm:0

Tôi có thể làm cho Apache chỉ khởi động khi hệ thống nhận được địa chỉ của nó từ DHCP không?

lá cờ au

Tôi đang chạy Ubuntu trong máy ảo với mục đích cài đặt Wordpress cục bộ, cần thiết để thực hiện một số thử nghiệm cục bộ.

Cuối cùng, tôi đã định cấu hình chế độ mạng của máy này trong VirtualBox thành cầu nối, định cấu hình bộ định tuyến gia đình của tôi để luôn thuê cùng một địa chỉ IP (192.168.0.101) vào địa chỉ MAC của máy ảo này và cấu hình Apache để lắng nghe địa chỉ này trong vv/apache2/ports.conf:

Nghe 192.168.0.101:80

<IfModule ssl_module>
        Nghe 192.168.0.101:443
</IfModule>

<IfModule mod_gnutls.c>
        Nghe 192.168.0.101:443
</IfModule>

Một kết quả đáng tiếc của điều này là Apache thường từ chối khởi động hệ thống khởi động:

m@m-VirtualBox:~$ sudo systemctl status apache2
[sudo] mật khẩu cho m: 
à apache2.service - Máy chủ HTTP Apache
     Đã tải: đã tải (/lib/systemd/system/apache2.service; đã bật; giá trị đặt sẵn của nhà cung cấp: đã bật)
     Hoạt động: không thành công (Kết quả: mã thoát) kể từ Thứ Sáu 2021-10-22 16:12:19 CEST; 28s trước
       Tài liệu: https://httpd.apache.org/docs/2.4/
    Quá trình: 681 ExecStart=/usr/sbin/apachectl start (mã=đã thoát, trạng thái=1/THẤT BẠI)
        CPU: 19 mili giây

paź 22 16:12:19 m-VirtualBox systemd[1]: Khởi động Máy chủ HTTP Apache...
paź 22 16:12:19 m-VirtualBox apachectl[701]: (99)Không thể chỉ định địa chỉ được yêu cầu: AH00072: make_sock: không thể liên kết với địa chỉ 192.168.0.101:80
paź 22 16:12:19 m-VirtualBox apachectl[701]: không có ổ cắm nghe nào, đang tắt
paź 22 16:12:19 m-VirtualBox apachectl[701]: AH00015: Không thể mở nhật ký
paź 22 16:12:19 m-VirtualBox apachectl[681]: Hành động 'bắt đầu' không thành công.
paź 22 16:12:19 m-VirtualBox apachectl[681]: Nhật ký lỗi Apache có thể có thêm thông tin.
paź 22 16:12:19 m-VirtualBox systemd[1]: apache2.service: Quá trình điều khiển đã thoát, mã=đã thoát, trạng thái=1/THẤT BẠI
paź 22 16:12:19 m-VirtualBox systemd[1]: apache2.service: Không thành công với kết quả là 'mã thoát'.
paź 22 16:12:19 m-VirtualBox systemd[1]: Không thể khởi động Máy chủ HTTP Apache.

Tôi luôn có thể khởi động Apache thủ công với sudo systemctl bắt đầu apache2 và sau đó Apache bắt đầu thành công.

Làm cho Apache2 lắng nghe 127.0.0.1 thay vì 192.168.0.101 cũng làm cho Apache khởi động thành công khi khởi động hệ thống mà không có lỗi như lỗi được hiển thị ở trên.

Do đó, tôi nghi ngờ rằng vấn đề có thể là do Apache cố gắng khởi động trước khi DHCP quản lý để hoàn thành công việc của mình. Apache cố gắng lắng nghe 192.168.0.101, nhưng máy chưa được gán địa chỉ này nên Apache bị từ chối và báo lỗi.

Để cố gắng giải quyết vấn đề này và kiểm tra xem dự đoán của tôi có đúng không, tôi muốn bằng cách nào đó đặt apache chỉ bắt đầu sau khi ứng dụng khách DHCP kết thúc. Đây có phải là có thể, và như thế nào?

lá cờ in
Bạn không cần phải nghe trên `192.168.0.101`. Chỉ cần sử dụng các giá trị mặc định và bạn sẽ ổn thôi. Tôi cũng có một số máy ảo VirtualBox mà tôi sử dụng để phát triển và thử nghiệm. Không ai trong số họ đang lắng nghe một IP cụ thể. Giá trị `localhost` là đủ.
gaazkam avatar
lá cờ au
@matigo `localhost` là không đủ vì điều này sẽ cấm truy cập trang web từ bên ngoài VM và tôi cần thực hiện việc này. Nghe trên tất cả các giao diện (`Listen 80`) sẽ hoạt động, nhưng - mặc dù về lý thuyết, bộ định tuyến sẽ dừng các kết nối bên ngoài - tôi không chắc mình có thấy thoải mái với điều đó hay không.
lá cờ in
Đây là nơi bạn có thể sử dụng Tường lửa chung (`ufw`) để chỉ cho phép lưu lượng truy cập trên cổng 80 từ mạng cục bộ
Điểm:2
lá cờ au

Câu trả lời trước đó (thật đáng buồn, hiện đã bị xóa) bởi một người dùng hữu ích có nick đã khiến tôi nhớ đến là gần như Chính xác.

Nó đề nghị sửa đổi các /lib/systemd/system/apache2.service tập tin để làm cho nó phụ thuộc vào mạng-online.target thay vì mặc định mạng.mục tiêu hoặc tốt hơn là thêm tệp thứ hai vào /lib/systemd/hệ thống gọi điện my-apache2.service với sửa đổi này. Theo tài liệu, đây là cách chính xác để đảm bảo rằng dịch vụ chỉ bắt đầu khi mạng thực sự hoạt động.

Trong khi điều này hoạt động, vấn đề ở đây là nội dung của /lib không được phép chỉnh sửa và /etc/systemd/system nên được sử dụng cho mục đích này để thay thế. (Vâng, câu trả lời này tôi đã liên kết với các giao dịch với các hệ thống khác ngoài Ubuntu, nhưng đọc phân cấp tập tin man 7người đàn ông 5 systemd.unit trên Ubuntu cũng cho thấy điều tương tự).

Vấn đề thứ hai là, theo kinh nghiệm của tôi, cố gắng chạy Apache2 hai lần sẽ dẫn đến sự cố.

Để khắc phục cả hai vấn đề, câu trả lời của tôi trước đây đã khuyến nghị tạo một dịch vụ xung đột trong /etc/systemd/system. Tuy nhiên, điều này quá phức tạp và không giải quyết được một số vấn đề trên, cụ thể là nó không phải là bằng chứng trong tương lai: thay đổi bản gốc .dịch vụ tệp được tạo bởi các tác giả ngược dòng sẽ không tự động được tích hợp vào tệp mới của chúng tôi .dịch vụ tập tin.

Giải pháp chính xác là tạo một tệp thả xuống có thêm một tệp mới Sau đó phụ thuộc vào bản gốc apache2.service, như tài liệu của người đàn ông 5 systemd.unit. Để làm như vậy, người ta cần nhập lệnh sau:

# systemctl chỉnh sửa apache2.service

(được ghi lại trong người đàn ông 1 systemctl)

...và khi trình soạn thảo mở ra, người ta cần nhập các nội dung sau ở giữa các ### Bất cứ điều gì giữa đây và bình luận bên dưới... và ### Dòng bên dưới bình luận này... dòng:

[Đơn vị]
Sau=mạng-online.đích

Và lưu tệp mới.

Lưu ý rằng theo người đàn ông 5 systemd.unit điều này sẽ không thay thế phần phụ thuộc After ban đầu của dịch vụ; thay vào đó, điều này sẽ thêm một phụ thuộc mới vào những phụ thuộc đã có.

Để tham khảo, đây là nội dung gốc của /lib/systemd/system/apache2.service:

[Đơn vị]
Mô tả=Máy chủ HTTP Apache
Sau=mạng.đích từ xa-fs.đích nss-lookup.đích
Tài liệu=https://httpd.apache.org/docs/2.4/

[Dịch vụ]
Loại = rẽ nhánh
Môi trường=APACHE_STARTED_BY_SYSTEMD=true
ExecStart=/usr/sbin/apachectl bắt đầu
ExecStop=/usr/sbin/apachectl-dừng duyên dáng
ExecReload=/usr/sbin/apachectl duyên dáng
KillMode=hỗn hợp
RiêngTmp=true
Khởi động lại=on-abort

[Cài đặt]
WantedBy=multi-user.target

Từ giờ trở đi, Apache2 sẽ không còn bị lỗi khi khởi động hệ thống nữa.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.