Làm cách nào để kích hoạt tất cả các confs trang web với a2ensite (trong khi vượt qua 000-default.conf && default-ssl.conf)?


11

Tôi sử dụng máy chủ Ubuntu 16.04.2 với Apache2, trên đó tôi lưu trữ các trang web cá nhân của mình.

Để kích hoạt tất cả các tệp conf của tôi bên dưới /etc/apache2/sites-available(bên cạnh 000-default.confssl-default.conf), tôi đã đi đến /var/www/htmlvà thực hiện a2ensite.

Sau đó tôi đã nói:

Your choices are: 
000-default default-ssl domain.tld1 domain.tld2 domain.tld3 domain.tld4 
Which site(s) do you want to enable (wildcards ok)?

Sau đó tôi đã làm Ctrl+ Cnhằm thực hiện một cái gì đó khác.

Tôi đang tìm cách để tự động kích hoạt tất cả các trang web, mà không cần chú ý đến một trang cụ thể --- Tôi chỉ muốn chạy một lệnh sẽ cho phép tất cả các trang web mà tôi tự thêm vào.

Câu trả lời:


19

Có thể chỉ cần sử dụng find trên thư mục cấu hình của bạn.

find /etc/apache2/sites-available/ -type f -and -not -name "*default*" -exec a2ensite {} \;

Điều này tìm thấy tất cả các tệp cấu hình của bạn không có "mặc định" trong tên của chúng và kích hoạt chúng.


1
Bạn cũng nên tìm kiếm các tập tin có *.confphần mở rộng. Hoặc nếu không a2ensite sẽ phàn nàn rằng trang web không tồn tại
Dan

@Dan không cần thiết vì chúng tôi đang tìm kiếm trong thư mục conf.
Ziazis

Tôi đoán phương pháp này cũng tốt, theo nguyên tắc, khi tạo Nginx Sblocks, và không chỉ cho Apache Vhost.
JohnDoea

8

Bạn cần điều hướng đến /etc/apache2/sites-availablevà sau đó chạy lệnh:

sudo a2ensite *

Nó sẽ cho phép tất cả các trang web trong thư mục. (các tệp phải là một cái gì đó như xxx.conf)

Và sau đó tải lại apache bằng cách sử dụng sudo service apache2 reload.

Vì vậy, chuỗi lệnh của bạn sẽ giống như vậy:

cd /etc/apache2/sites-available
sudo a2ensite *
sudo service apache2 reload

Điều này cũng cho phép tệp conf default-ssl.conf... Điều này rõ ràng từ đầu raEnabling site default-ssl.
JohnDoea

Bạn có thể sử dụng dpkg -Sđể xem nếu tập tin cấu hình là từ một gói.
muru

1

sao chép dán các dòng sau trong tên tập tin apache_enable.sh

cd /etc/apache2/sites-available/
a2ensite *
service apache2 reload

và đưa ra lệnh đọc + thực thi apache_enable.shvà thực thi tập lệnh bằng cách sử dụng root user


1

Bất kể vị trí hiện tại của chúng tôi là gì, lệnh sudo a2ensite "*.conf"sẽ cố gắng kích hoạt tất cả các tệp cấu hình được đặt /etc/apache2/sites-available/.

Tiếp theo, chúng ta có thể sử dụng a2dissite 000-default.conf default-ssl.confđể vô hiệu hóa các cấu hình mặc định của Apache và sau đó chúng ta có thể sử dụng systemctl restart apache2.serviceđể khởi động lại nó.

Chúng ta có thể chạy tất cả như một lệnh duy nhất:

sudo bash -c "a2ensite '*.conf' && a2dissite 000-default.conf default-ssl.conf && systemctl restart apache2.service"

Hơn nữa, chúng ta có thể tạo một lệnh tùy chỉnh thông qua một hàm trong bash:

function a2ensites {
        sudo bash -c "a2ensite '*.conf' && a2dissite 000-default default-ssl && systemctl restart apache2.service"
}
export -f a2ensites

Bây giờ chúng ta có lệnh , được thiết kế để thực hiện công việc này. Để thực hiện lệnh này vĩnh viễn, chúng ta phải đặt các dòng trên vào dưới cùng của tệp và sau đó nó. Kịch bản đơn giản tiếp theo sẽ hoàn thành nhiệm vụ này:a2ensites~/.bashrcsource

 printf "\nfunction a2ensites { \n\tsudo bash -c \"a2ensite '*.conf' && a2dissite 000-default.conf default-ssl.conf && systemctl restart apache2.service\" \n}\nexport -f a2ensites\n" | tee -a $HOME/.bashrc; source $HOME/.bashrc

Dòng đầu tiên là không đúng sự thật. Ký *tự đại diện đang được mở rộng trước khi nó được chuyển đến a2ensitelệnh trong trường hợp của tôi. Tuy nhiên, điều này hoạt động sudo a2ensite "*.conf".
Dân

Xin chào, @Dan, trong trường hợp của tôi (Ubuntu 16.04.2), nó hoạt động đúng mà không có dấu ngoặc kép. Tuy nhiên tôi đã cập nhật câu trả lời. Bạn có thể kiểm tra nếu a2ensite '*.conf'hoạt động chính xác trong hệ thống của bạn?
pa4080

1
Đúng, nó hoạt động, tôi đang dùng Ubuntu 17.04 btw.
Dân

0

Việc thực thi a2ensite /var/www/html/*/sẽ làm cho Apache kích hoạt mỗi conf trang web có cùng tên , như thư mục trang web.

Là một tác dụng phụ, nó cũng sẽ cố gắng khớp các thư mục trang web không khớp với các tệp conf của trang, như được dự đoán từ đầu ra sau, nhưng tôi nghĩ rằng điều này có thể được bỏ qua một cách an toàn:

ERROR: Site /var/www/html/domain.tld1 does not exist!
ERROR: Site /var/www/html/domain.tld2 does not exist!
ERROR: Site /var/www/html/nice_directory does not exist!
ERROR: Site /var/www/html/nice_file does not exist!

Bạn có thể sẽ cần phải khởi động lại Apache sau khi bật các tệp conf:

systemctl restart apache2.service

1
Tôi không chắc chắn, nhưng tại sao cấu hình trang web của bạn trong thư mục webroot? Hãy thử sử dụng /etc/apache2/sites-availablethư mục để cấu hình cho các trang web của bạn. Khi bạn kích hoạt chúng thông qua a2ensite, chúng sẽ tự động được liên kết vào /etc/apache2/sites-enabled. Những gì bạn đang làm hiện tại khá kỳ lạ và mọi người có quyền truy cập vào máy chủ web của bạn có thể xem xét cấu hình của bạn không?
Ziazis

Xin chào @Ziazis. Tôi thực sự không hiểu, tại sao bạn thậm chí hỏi tôi "mọi người có quyền truy cập vào máy chủ web của bạn có thể xem xét cấu hình của bạn không?" Tôi là người duy nhất sử dụng máy chủ; Nếu tôi không, thông thường người dùng khác sẽ không có quyền truy cập vào tài liệu gốc. Dù sao, bạn có thể vui lòng làm rõ lý do tại sao bạn hỏi điều đó và chính xác những gì bạn thấy sai?
JohnDoea

Chà, tôi không chắc bạn đang sử dụng máy chủ web này để làm gì. Tuy nhiên, nếu đây là một hệ thống trực tiếp có quyền truy cập mà bên thứ ba có thể truy cập, bạn không muốn các tệp cấu hình của mình nằm trong /var/www/htmlđó là DocumentRoot của default.html-Site. Vì vậy, trong trường hợp của bạn, bạn dường như đang chạy các cấu hình trong đó ... Giống như ăn với một cái miệng mở, đừng làm vậy ;-).
Ziazis

Tôi không hiểu Bạn nghĩ rằng tôi đã đưa các tập tin conf trong tài liệu gốc? Bởi vì tôi đã không. Bạn đề nghị tôi đặt chúng ở đó? Tôi muốn tránh điều đó ... Tôi chỉ muốn kích hoạt tất cả chúng không phải là 000-default và default-ssl. BTW, tôi sử dụng máy chủ web để lưu trữ các trang web cá nhân của mình.
JohnDoea

À, tôi hiểu rồi - bạn đã đặt tên cho tất cả các RootDirectories giống như các tệp cấu hình của bạn. Và ở đây tôi nghĩ bạn đã thay đổi cấu hình apache2 thành /var/www/htmlthư mục cấu hình của bạn. Nvm rồi. Những gì bạn thực sự cần chỉ là mộtfind ./ -type f -and -not -name "*default*" -exec a2ensite {} \;
Ziazis

0

Di chuyển các cấu hình mặc định sang một thư mục khác và sau đó * sẽ hoạt động cho bạn như bạn muốn.

Chuyển đến thư mục "trang web khả dụng" vì nó chỉ hoạt động trong thư mục này.

cd / etc / apache2 / site-Available /

sudo a2ensite *

thử nghiệm


AFAIK, bạn có thể làm như vậy từ bất cứ đâu trong hệ thống khi tài liệu gốc là / var / www / html?
JohnDoea

Phần quan trọng là thư mục / etc / apache2_or_other / site-Available. Các tài liệu gốc sau đó được liên kết trong cấu hình đó. Bạn có thể có gốc trong / usr / share / htlm và nó sẽ không thay đổi bất cứ điều gì trừ khi bạn không viết nó trong tệp conf. Tôi có thể ở bất cứ đâu trong máy chủ của mình, miễn là các tệp conf nằm trong thư mục có sẵn của trang web, a2ensite sẽ thực hiện công việc của nó.
Carobell

Đã chỉnh sửa câu trả lời của tôi vì tùy chọn đầu tiên không hoạt động được thử nghiệm
Carobell
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.