2010-09-12 43 views
9

Có cách nào để bao gồm các cài đặt cấu hình trong Apache dựa trên một thư mục tồn tại không? Về cơ bản tôi có một ổ cứng di động mà tôi vận chuyển giữa công việc và nhà có một số thứ tôi đang phát triển trên đó. Tôi chỉ muốn cấu hình Apache tải một máy chủ ảo cụ thể nếu thư mục tồn tại.Có cách nào để kiểm tra xem một thư mục có tồn tại trong các tệp cấu hình Apache không?

Trả lời

4

Không, dường như không có cách nào trực tiếp để thực hiện việc này.

Điều duy nhất mà có thể là giải pháp là chỉ thị IfDefine. Bạn có thể xác định định nghĩa bằng cách sử dụng tham số -d khi máy chủ được khởi động.

Đối số tên thông số là xác định như được đưa ra trên dòng lệnh httpd qua -Dparameter-, tại thời điểm máy chủ được bắt đầu.

Bạn có thể kiểm tra sự tồn tại của thư mục trong tập tin batch hoặc bash và đặt thông số -d tương ứng.

Cho dù đó là một tùy chọn, sẽ phụ thuộc vào cách máy chủ của bạn được khởi động từ ổ cứng di động.

3

Tôi đã đưa ra một giải pháp dường như hoạt động với Linux và OS X, và nó có bản lề trên "điểm gắn kết". Nó có thể có khả năng cạnh tranh với nó trong Windows, nhưng bạn có lẽ sẽ phải sáng tạo với FUSE và/hoặc Cygwin.

Nếu bạn tạo thư mục trống trong thư mục chính, chẳng hạn như "/ Users/username/ExtraVhosts", bạn có thể thêm chỉ thị apache vào "Include/Users/username/ExtraVhosts/*".

Sau đó, khi bạn lắp ổ USB, bạn có thể lắp vào đâu đó và sau đó sử dụng điểm gắn kết "liên kết" để liên kết chéo thư mục ExtraVhosts với một thư mục trên thiết bị di động.

Một OS X Ví dụ:

  • Tôi có một ổ USB gọi là 'Cherrybomb'
  • Khi tôi chèn nó, nó luôn luôn được gắn kết vào/Volumes/Cherrybomb
  • sau đó tôi có thể sử dụng bindfs (cổng sudo cài đặt bindfs) để mount một thư mục con của nó, như vậy:
    • sudo bindfs/Volumes/Cherrybomb/Dự án/vhosts/Users/tên người dùng/ExtraVhosts
  • Sau đó, tôi có thể khởi động lại apache để đọc trong cấu hình Cập nhật:
    • sudo/opt/local/apache2/bin/apachectl restart

Vào thời điểm đó, nó chỉ là một vấn đề của mục thêm trong/etc/hosts cho bí danh máy chủ để được chọn.

Tương đương với Linux sẽ sử dụng tham số "--bind" của lệnh gắn kết.

Một lưu ý: Điều này khiến việc tháo gỡ ổ đĩa USB trở nên khó khăn vì nó luôn được apache đánh dấu là "đang sử dụng".Dưới đây là một thủ tục loại bỏ:

  • file Đóng tất cả các mở và các buổi thiết bị đầu cuối đang sử dụng ổ đĩa (hiện tại-làm việc-thư mục trong thiết bị đầu cuối có thể gây ra các vấn đề unmount)
  • Dừng apache: sudo/opt/local/apache2/bin/apachectl dừng
  • umount/Users/tên người dùng/ExtraVhosts

Sau đó, bạn có thể gỡ bỏ nó bằng đồ thị hoặc bằng tay (umount/Volumes/Cherrybomb).

Nếu công việc và máy gia đình gắn kết ổ đĩa với các vị trí khác nhau, bạn có thể có nhiều thư mục vhosts - home_vhost, work_vhost, v.v. - và sử dụng trong bước ràng buộc.

Tôi hy vọng điều này sẽ giúp ai đó ra ngoài :)

0

Nếu bạn trỏ apache đến điểm gắn kết chỉ thì không có vấn đề gì. Chỉ cần không trỏ chỉ thị Directory đến các thư mục trong ổ đĩa.

ví dụ: nếu bạn gắn/dev/somedisk/mnt/somevhost, thư mục /mnt/somevhost sẽ ở đó cho dù bạn có gắn ổ đĩa và apache sẽ bắt đầu hay không. Apache không quan tâm nếu thư mục trống vì vậy <Directory "/mnt/somevhost"/> sẽ không khiến máy chủ không khởi động nếu ổ đĩa không được gắn kết.

Làm việc với UNIX không chống lại :-p Giải pháp này phải đủ để phát triển.

Các vấn đề liên quan