Cách di chuyển cấu hình Apache của bạn từ cú pháp 2.2 sang 2.4.
Web server Apache hiện là web server phổ biến nhất trên thế giới. Nó được sử dụng để phục vụ các loại nội dung web và là một ứng dụng mạnh mẽ có khả năng tùy biến cao.Nhiều người quen thuộc với cú pháp cấu hình Apache 2.2, nhưng một số bản phân phối hiện đang vận chuyển với Apache 2.4 theo mặc định. Ví dụ về sự chuyển đổi này là Ubuntu 14.04 LTS đến từ Ubuntu 12.04 LTS. Mặc dù trong hầu hết các trường hợp, cú pháp giống nhau, nhưng có một số khác biệt quan trọng và một số chỉ thị chung đã không được chấp nhận.
Trong hướng dẫn này, ta sẽ thảo luận về một số cú pháp mới và một số thay đổi khác mà bạn nên biết khi đến từ nền Apache 2.2. Ta sẽ sử dụng Ubuntu 14.04 làm ví dụ về bản phân phối với Apache 2.4 và so sánh nó với version Apache 2.2 được cung cấp cùng với các bản phát hành như Ubuntu 12.04.
Thay đổi Ủy quyền
Một trong những thay đổi lớn mà Apache 2.4 thực hiện là cách cấp quyền cho user được ưu tiên.
Ủy quyền đề cập đến các lệnh xác định những gì user được xác thực có thể làm. Nó đưa ra các tiêu chí để kiểm tra để quyết định xem có nên cho phép hoạt động hoặc truy cập hay không.
Điều này khác với xác thực, điều này phải xảy ra trước. Thủ tục xác thực xác định cách user có thể xác định tích cực bản thân họ với server . Xác thực không thay đổi nhiều so với 2.2, trong khi ủy quyền đã được đại tu.
Trước hết, các thành phần ủy quyền hiện có thể sử dụng cú pháp Require
đã được cung cấp trước đó để xác thực. Điều này tạo ra một cách dễ dàng để xác định thứ tự ủy quyền thay vì dựa vào các bộ luật phức tạp. Thay vào đó, bạn có thể sắp xếp chúng theo cách hợp lý, chỉ định một mặc định và sau đó là các ngoại lệ.
Ví dụ: bạn có thể đặt mặc định để chấp nhận lưu lượng truy cập, nhưng muốn chặn một user độc hại cụ thể, bạn có thể thêm thông tin như sau:
Require all granted Require not ip 111.111.111.111
Điều này sẽ đặt policy mặc định chấp nhận mọi người và sau đó chỉ định một bộ định tính mà yêu cầu không đến từ địa chỉ IP 111.111.111.111
. Để làm điều này, bạn cần phải yêu cầu cả hai điều này phải đúng, điều này ta sẽ tìm hiểu cách thực hiện trong giây lát với khối lệnh RequireAll
.
Việc cấp phép có thể được chọn không chỉ dựa trên bản thân user hoặc group mà còn xem xét các yếu tố khác bằng cách sử dụng env
, host
hoặc ip
hoặc với giá trị all
.
- tất cả : Nhà cung cấp này phù hợp với tất cả lưu lượng truy cập. Nó hữu ích cho việc cài đặt các giá trị mặc định.
- vi : Điều này kiểm tra xem một biến môi trường có được đặt hay không.
- server : Điều này được sử dụng để kiểm tra tên server của client đang kết nối.
- ip : Cái này được sử dụng để kiểm tra địa chỉ IP của user đang kết nối.
Chúng có thể được kiểm soát dựa trên thứ tự mà chúng được chỉ định. Bạn thường sẽ thấy chúng bên trong một trong những khối đặc biệt sau:
- RequireAll: Tất cả các yêu cầu uỷ quyền trong khối phải được thỏa mãn để cho phép truy cập.
- RequestAny : Nếu bất kỳ yêu cầu ủy quyền nào trong khối này được đáp ứng, khối này được đánh dấu là thỏa mãn.
- Yêu cầu Không : Nếu bất kỳ yêu cầu nào được liệt kê thành công, chỉ thị sẽ không thành công.
Điều này cho phép bạn có một chút linh hoạt về cách bạn cài đặt ủy quyền. Bạn có thể lồng các khối lệnh này vào nhau như sau:
<RequireAny> <RequireAll> Require user root Require ip 123.123.123.123 </RequireAll> <RequireAll> <RequireAny> Require group sysadmins Require group useraccounts Require user anthony </RequireAny> <RequireNone> Require group restrictedadmin Require host bad.host.com </RequireNone> </RequireAll> </RequireAny>
Như bạn thấy, ta có thể xác định một số đường dẫn ủy quyền khá phức tạp. Ví dụ trên sẽ cho phép nếu user là root và đến từ IP 123.123.123.123
. Nó cũng sẽ ủy quyền cho user có tên “anthony” hoặc bất kỳ thành viên nào của các group “sysadmins” hoặc “useraccounts”, nhưng CHỈ nếu họ không thuộc group “ bad.host.com
” hoặc đến từ một server bị gắn cờ tại bad.host.com
.
Các khối xác thực này dễ hiểu hơn nhiều so với các lệnh cổ điển được sử dụng để kiểm soát truy cập. Trong các version trước của Apache, bạn sẽ sử dụng các Order
, Allow from
, Deny from
và Satisfy
. Những cú pháp này đã không bị loại bỏ, nhưng đã không còn được dùng để ủng hộ cú pháp mới, dễ hiểu và nhất quán hơn.
Họ đã tuy nhiên, được chuyển đến một module riêng biệt gọi là mod_access_compat
. Đảm bảo rằng bạn bật module này nếu bạn yêu cầu các chỉ thị ủy quyền kế thừa. Tuy nhiên, tôi khuyên bạn nên triển khai các điều kiện của bạn theo cú pháp mới, vừa để được hỗ trợ trong tương lai, vừa vì việc tìm ra hàm ý của các policy bạn đang chọn sẽ dễ dàng hơn đáng kể.
Các thay đổi khác trong Apache
Có một loạt các thay đổi khác mà bạn nên biết sẽ ảnh hưởng đến cách bạn xây dựng các file cấu hình của bạn .
Một số trong số này có thể yêu cầu bạn thay đổi tên hoặc overrides các giá trị mặc định mới. Có một danh sách đầy đủ hơn về những thay đổi ở đây, nhưng ta sẽ thảo luận về một số thay đổi có thể khiến bạn khó chịu.
Kết nối và giới hạn trẻ em
Một số chỉ thị đã được thay đổi tên để mô tả tốt hơn chức năng của chúng.
- MaxConnectionsPerChild : Chỉ thị này được sử dụng để thay thế
MaxRequestsPerChild
. Thay đổi này đã được thực hiện để phản ánh tốt hơn chỉ thị thực sự được sử dụng để làm gì. Vì các giá trị thực sự giới hạn số lượng kết nối, đây là tên tốt hơn cho tham số. - MaxRequestWorkers : Chỉ thị này được tạo ra để thay thế tùy chọn
MaxClients
. Điều này là do với các module đa xử lý không đồng bộ, số lượng client không nên được giả định là giống với số stream công nhân. Điều này giúp chỉ định chính xác phần của cấu hình này bị ảnh hưởng bởi chỉ thị.
AllowOverride Thay đổi
Lệnh AllowOverride
được sử dụng để cho phép các file cấu hình folder cụ thể thay đổi cài đặt mặc định, đã trải qua một thay đổi nhỏ có thể ảnh hưởng đến cấu hình của bạn.
Theo mặc định, giá trị cho cài đặt này hiện là None
. Điều này sẽ cho phép bạn bảo mật server của bạn dễ dàng hơn bằng cách mặc định ở trạng thái khóa hơn. Vẫn rất đơn giản để chỉ định rằng các .htaccess
nên được đọc và xử lý trong các folder yêu cầu nó, nhưng bạn nên cần ít khai báo AllowOverride None
global và phạm vi lớn hơn để đạt được điều này.
Chiến lược khóa server theo mặc định và sau đó overrides bảo mật để cho phép các trường hợp cụ thể của cài đặt dựa trên folder là điều mà hầu hết user đã làm. Thay đổi này sẽ chỉ giúp đảm bảo user không dễ dàng bị tấn công nếu họ quên thực hiện những điều này theo cách thủ công.
Gửi mặc định đã thay đổi
Chỉ thị EnableSendfile
được sử dụng để gửi file trên server đến client mà không cần phải đọc nội dung hiện được đặt mặc định là Off
.
Đây là một biện pháp bảo mật được sử dụng đảm bảo rằng hệ thống được đề cập hỗ trợ hoạt động chính xác. Việc thực hiện không đúng có thể là một trách nhiệm pháp lý hoặc có thể khiến các hoạt động không thành công. Đây có thể là hệ điều hành cụ thể, phụ thuộc vào phần cứng cụ thể hoặc khác nhau do phương pháp truy cập nội dung (hệ thống file từ xa, v.v.).
Mặc định tắt chỉ thị này cho phép administrator xác minh tính tương thích của hệ thống và thực hiện một số thử nghiệm đảm bảo chức năng phù hợp trước khi bật.
Chi tiết triển khai
Mặc dù những điều này không chính xác cụ thể cho bản phát hành Apache 2.4, một số file cấu hình mặc định đang vận chuyển cùng với các bản phân phối đã bị thay đổi khi quá trình chuyển đổi được thực hiện.
Một ví dụ của điều này là trong các bản phát hành Debian và Ubuntu, file cấu hình chính của Apache 2.4 tại /etc/apache2/apache2.conf
hiện xử lý bao gồm các file bổ sung hơi khác một chút.
Trong 2.2, các bản phân phối này lấy nguồn các file nào trong folder conf.d
và sites-enabled
để cho phép các file cấu hình bổ sung, thường được sử dụng nhất cho các thông số kỹ thuật của server ảo. Các chỉ thị này trông như thế này:
Include conf.d/ Include sites-enabled/
Đối sánh ký tự đại diện là một tính năng mới cho phép bạn bao gồm các mẫu file cụ thể thay vì phải chuyển toàn bộ folder . Điều này nghĩa là trong khi theo cách truyền thống, bạn có thể sử dụng những thứ như trên, bạn có thể linh hoạt hơn bằng cách sử dụng:
Include conf.d/*.conf Include sites-enabled/*.conf
Tuy nhiên, cú pháp mới này cũng có thể gây ra một số vấn đề nếu bạn đang mong đợi nó hoạt động chính xác như trước đây. Lệnh Include
, khi được sử dụng với đối sánh ký tự đại diện, sẽ không thành công nếu không tìm thấy file phù hợp, dẫn đến lỗi.
Để giải quyết vấn đề này, một chỉ thị mới có tên là IncludeOptional
đã được tạo. Điều này hoạt động hoàn toàn giống nhau, nhưng sẽ không dẫn đến lỗi nếu ký tự đại diện không trùng với các file nào.
Để tận dụng điều này, một số bản phân phối đã bắt đầu bao gồm các folder bổ sung với:
IncludeOptional conf-enabled/*.conf IncludeOptional sites-enabled/*.conf
Như bạn thấy, có một tinh chỉnh thực hiện bổ sung mà đã được thêm vào ở đây: sự sáng tạo của riêng conf-enabled
và conf-available
folder để nhân bản sites-*
và mods-*
folder . Bài học chính ở đây là các mẫu file cụ thể hiện đang được chỉ định. Tất cả các file cấu hình hợp lệ bắt buộc phải kết thúc bằng .conf
với cấu hình này.
Điều này có thể mất một số thời gian để làm quen nếu bạn thường gọi các file server site1.com
của bạn là những thứ như default
hoặc site1.com
. Tuy nhiên, điều này cung cấp một mức độ linh hoạt cao hơn, vì ta có thể có các file không phải cấu hình trong folder , như các version cũ, thử nghiệm và file README.
Điều này nghĩa là để thử nghiệm, bạn có thể chỉ cần thực hiện một số việc như:
cd /etc/apache2/sites-enabled/ cp mainconfig.conf mainconfig.conf.bak nano mainconfig.conf
Mặc dù bạn có thể thực hiện các a2dissite
và a2ensite
, nhưng đây là một phương pháp bổ sung có thể tự nhiên hơn đối với một số người. Nó cũng giữ file làm việc cũ của bạn trong folder đã bật, mặc dù không chính xác về ngữ nghĩa, nhưng có thể dễ dàng tìm thấy để thực hiện lại hơn nếu bạn cần hoàn nguyên về version cũ của bạn .
Một thay đổi khác mà bạn có thể nhận thấy trong cấu hình của bạn là một số chỉ thị đã được di chuyển xung quanh và một số chỉ thị server ảo mặc định đã thay đổi. Ba khối này, trước đây nằm trong file virtualhost mặc định, không còn nữa:
<Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory>
Hai khối trên cùng hiện được triển khai trong file apache2.conf
trong các version Ubuntu gần đây, vì chúng phải được đặt trong bất kỳ cấu hình nào. Chúng đã được cập nhật để sử dụng các chỉ thị Require
:
<Directory /> Options FollowSymLinks AllowOverride None Require all denied </Directory> <Directory /var/www/> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory>
Đặc tả folder cig-bin
đã bị xóa khỏi file virtualhost và được triển khai trong file conf-available/serve-cgi-bin.conf
. Đây là một cách tiếp cận module hơn và để lại file virtualhost chỉ chịu trách nhiệm cho các lệnh duy nhất. Trên thực tế, virtualhost mặc định mới, với tất cả các comment đã bị xóa, chỉ đơn giản là:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Như bạn thấy , điều này có thể giúp ta giảm bớt các file cấu hình dành riêng cho trang web của bạn .
Kết luận
Bằng cách kiểm tra các cấu hình hiện có của bạn và cập nhật các thủ tục nhất định để tận dụng các chỉ thị mới và các phương pháp hay nhất, việc chuyển sang Apache 2.4 không quá khó. Về mặt chức năng, nó phải cung cấp các khả năng tương tự với các tính năng bổ sung và thực hiện tất cả với cú pháp dễ hiểu hơn.
<div class = “author”> Bởi Justin Ellingwood </div>
Các tin liên quan
Cách sử dụng server Apache HTTP dưới dạng Reverse-Proxy bằng cách sử dụng extension mod_proxy2014-02-14
Cách cài đặt và cấu hình Apache Tomcat trên server Debian
2014-01-07
Cách cài đặt và quản lý Apache Qpid
2013-12-30
Cách chuyển từ web server Apache sang Nginx trên VPS Ubuntu
2013-12-17
Cách cài đặt Apache mod_spdy trên VPS Debian 7
2013-12-12
Cách thiết lập ứng dụng Rails 4 với Apache và Passenger trên CentOS 6
2013-12-06
Cách thiết lập công cụ Railo CFML với Tomcat và Apache trên Debian 7 hoặc Ubuntu 13 VPS
2013-11-19
Cách tạo chứng chỉ SSL trên Apache cho Debian 7
2013-11-11
Cách thiết lập server ảo Apache trên Debian 7
2013-10-29
Cách cấu hình Varnish cho Drupal với Apache trên Debian và Ubuntu
2013-10-21