Khi bạn có một máy chủ ảo chuyên dụng để chạy trang web của mình, rất có thể là máy chủ được định cấu hình cho mọi người và không được tùy chỉnh để tối đa hóa hiệu suất cho việc chạy một trang web.
Nội dung[ẩn giấu]
|
Tổng quan
Có một số vấn đề mà chúng tôi muốn tối đa hóa hiệu suất:
- Cấu hình Linux Thường có các dịch vụ đang chạy mà không cần phải, lãng phí bộ nhớ có thể được sử dụng cho nhiều kết nối hơn.
- Cấu hình MySQL Thông thường, các cài đặt mặc định được dựa trên một máy chủ nhỏ, chúng tôi có thể thêm một vài thay đổi quan trọng để tăng hiệu suất rất nhiều.
- Cấu hình Apache Theo mặc định, hầu hết các nhà cung cấp dịch vụ lưu trữ cài đặt apache với gần như mọi mô-đun được cài đặt. Không có lý do để tải các mô-đun nếu bạn không bao giờ sử dụng chúng.
- Cấu hình PHP Cấu hình PHP mặc định là tương tự như cồng kềnh, thường có rất nhiều mô-đun bổ sung không cần thiết được cài đặt.
- PHP Opcode Cache Thay vì cho phép PHP biên dịch lại các tập lệnh mỗi lần, một bộ nhớ cache opcode sẽ lưu trữ các tập lệnh được biên dịch trong bộ nhớ để tăng hiệu suất rất lớn.
- Sao lưu Có lẽ nên thiết lập một số bản sao lưu tự động, vì nhà cung cấp dịch vụ lưu trữ của bạn sẽ không thực hiện việc đó cho bạn.
- Bảo vệ Chắc chắn, Linux đủ an toàn theo mặc định, nhưng thường có một số vấn đề bảo mật rõ ràng mà bạn có thể khắc phục bằng một vài cài đặt nhanh.
Cấu hình Linux
Có khá nhiều chỉnh sửa bạn có thể thực hiện, điều này sẽ thay đổi đôi chút dựa trên máy chủ bạn đang sử dụng. Những tinh chỉnh này dành cho một máy chủ chạy CentOS, nhưng chúng sẽ hoạt động cho phần lớn các máy chủ DV.
Vô hiệu hóa DNS
Nếu nhà cung cấp dịch vụ lưu trữ của bạn xử lý DNS cho miền của bạn (có thể), thì bạn có thể tắt dịch vụ DNS.
disable dns /etc/init.d/named stop chmod 644 /etc/init.d/named
Lệnh chmod loại bỏ quyền thực thi từ tập lệnh, ngăn nó chạy khi khởi động.
Vô hiệu hóa SpamAssassain
Nếu bạn không sử dụng tài khoản email trên chính máy chủ của mình, bạn không nên bận tâm đến việc chạy các công cụ chống spam. (Ngoài ra, bạn nên xem Google Apps, giải pháp email tốt hơn nhiều)
/etc/init.d/psa-spamassassin stop chmod 644 /etc/init.d/psa-spamassassin
Vô hiệu hóa xinetd
Quy trình xinetd chứa một số quy trình khác, không có quy trình nào hữu ích cho một máy chủ web điển hình.
/etc/init.d/xinetd stop chmod 644 /etc/init.d/xinetd
Hạn chế sử dụng bộ nhớ Plesk
Nếu bạn sử dụng bảng điều khiển plesk, bạn có thể buộc nó sử dụng ít bộ nhớ hơn bằng cách thêm tệp tùy chọn.
vi /usr/local/psa/admin/conf/httpsd.custom.include
Thêm các dòng sau vào tệp:
MinSpareServers 1 MaxSpareServers 1 StartServers 1 MaxClients 5
Lưu ý rằng tùy chọn này được biết là hoạt động trên các máy chủ MediaTemple DV, nhưng chưa được kiểm tra trên bất kỳ máy chủ nào khác. (Xem Tài liệu tham khảo)
Tắt hoặc Tắt Plesk (tùy chọn)
Nếu bạn chỉ sử dụng Plesk mỗi năm một lần, có rất ít lý do để nó hoạt động. Lưu ý rằng bước này hoàn toàn không bắt buộc và nâng cao hơn một chút.
Chạy lệnh sau để tắt plesk:
/etc/init.d/psa stop
Bạn có thể vô hiệu hóa nó khi chạy lúc khởi động bằng cách chạy lệnh sau:
chmod 644 /etc/init.d/psa
Lưu ý rằng nếu bạn vô hiệu hóa nó, thì bạn không thể khởi động nó theo cách thủ công mà không cần thay đổi quyền truy cập tệp (chmod u + x).
Cấu hình MySQL
Bật bộ nhớ cache truy vấn
Mở tệp /etc/my.cnf của bạn và thêm các dòng sau trong phần [mysqld] của bạn như sau:
[mysqld] query-cache-type = 1 query-cache-size = 8M
Bạn có thể thêm nhiều bộ nhớ hơn vào bộ nhớ cache truy vấn nếu muốn nhưng không sử dụng quá nhiều.
Tắt TCP / IP
Một số lượng đáng ngạc nhiên của máy chủ cho phép truy cập vào MySQL trên TCP / IP theo mặc định, mà không có ý nghĩa cho một trang web. Bạn có thể tìm ra nếu mysql đang nghe trên TCP / IP bằng cách chạy lệnh sau:
netstat -an | grep 3306
Để tắt, hãy thêm dòng sau vào tệp /etc/my.cnf của bạn:
skip-networking
Cấu hình Apache
Mở tệp httpd.conf của bạn, thường được tìm thấy trong /etc/httpd/conf/httpd.conf
Tìm dòng trông như thế này:
Timeout 120
Và thay đổi nó thành:
Timeout 20
Bây giờ, hãy tìm phần bao gồm các dòng này và điều chỉnh thành một mục tương tự:
StartServers 2 MinSpareServers 2 MaxSpareServers 5 ServerLimit 100 MaxClients 100 MaxRequestsPerChild 4000
Cấu hình PHP
Một trong những điều cần lưu ý khi tinh chỉnh một máy chủ trên nền tảng PHP là mỗi thread apache đơn lẻ sẽ tải lên PHP ở một vị trí riêng biệt trong bộ nhớ. Điều này có nghĩa nếu một mô-đun không sử dụng thêm 256k bộ nhớ vào PHP, trên 40 chủ đề apache bạn đang lãng phí 10MB bộ nhớ.
Loại bỏ các mô-đun PHP không cần thực hiện
Bạn sẽ cần phải tìm tệp php.ini của bạn, thường được tìm thấy tại /etc/php.ini (Lưu ý rằng trên một số bản phân phối, sẽ có một thư mục /etc/php.d/ với một số tệp.ini, một cho mỗi mô-đun.
Nhận xét ra bất kỳ dòng tải môđun nào với các mô-đun này:
- odbc
- snmp
- pdo
- odbc pdo
- mysqli
- -máy nạp ioncube
- json
- imap
- ldap
- ncurses
Todo: Thêm thông tin tại đây.
PHP Opcode Cache
Có một số bộ đệm mã hóa mà bạn có thể sử dụng, bao gồm APC, eAccelerator và Xcache, cái cuối cùng là sở thích cá nhân của tôi do sự ổn định.
Tải xuống xcache và giải nén nó vào một thư mục, và sau đó chạy các lệnh sau từ thư mục nguồn xcache:
phpize./configure --enable-xcache make make install
Mở tập tin php.ini của bạn và thêm một phần mới cho xcache. Bạn sẽ cần phải điều chỉnh đường dẫn nếu các mô-đun php của bạn được tải từ một nơi khác.
vi /etc/php.ini
Thêm phần sau vào tệp:
[xcache-common] zend_extension = /usr/lib/php/modules/xcache.so [xcache.admin] xcache.admin.user = 'myusername' xcache.admin.pass = 'putanmd5hashhere' [xcache]; Change xcache.size to tune the size of the opcode cache xcache.size = 16M xcache.shm_scheme = 'mmap' xcache.count = 1 xcache.slots = 8K xcache.ttl = 0 xcache.gc_interval = 0; Change xcache.var_size to adjust the size of variable cache xcache.var_size = 1M xcache.var_count = 1 xcache.var_slots = 8K xcache.var_ttl = 0 xcache.var_maxttl = 0 xcache.var_gc_interval = 300 xcache.test = Off xcache.readonly_protection = On xcache.mmap_path = '/tmp/xcache' xcache.coredump_directory = '' xcache.cacher = On xcache.stat = On xcache.optimizer = Off
Todo: Cần mở rộng một chút và liên kết với xcache trong tài liệu tham khảo.
Sao lưu
Có rất ít quan trọng hơn việc có bản sao lưu tự động của trang web của bạn. Bạn có thể nhận được bản sao lưu ảnh chụp nhanh từ nhà cung cấp dịch vụ lưu trữ của bạn, điều này cũng rất hữu ích, nhưng tôi cũng muốn có bản sao lưu tự động.
Tạo tập lệnh sao lưu tự động
Tôi thường bắt đầu bằng cách tạo một thư mục / backup, với thư mục / backup / files bên dưới nó. Bạn có thể điều chỉnh các đường dẫn này nếu muốn.
mkdir -p /backups/files
Bây giờ tạo tập lệnh backup.sh bên trong thư mục sao lưu:
vi /backups/backup.sh
Thêm phần sau vào tệp, điều chỉnh đường dẫn và mật khẩu mysqldump khi cần thiết:
#!/bin/sh THEDATE=`date +%d%m%y%H%M` mysqldump -uadmin -pPASSWORD DATABASENAME > /backups/files/dbbackup$THEDATE.bak tar -cf /backups/files/sitebackup$THEDATE.tar /var/www/vhosts/my-website-path/httpdocs gzip /backups/files/sitebackup$THEDATE.tar find /backups/files/site* -mtime +5 -exec rm {}; find /backups/files/db* -mtime +5 -exec rm {};
Kịch bản đầu tiên sẽ tạo một biến ngày tháng để tất cả các tệp sẽ được đặt tên giống nhau cho một bản sao lưu duy nhất, sau đó đổ cơ sở dữ liệu, tars lên các tệp web và gzips chúng. Các lệnh tìm được sử dụng để xóa mọi tệp cũ hơn 5 ngày vì bạn không muốn ổ đĩa của mình hết dung lượng.
Làm cho tập lệnh chạy được bằng cách chạy lệnh sau:
chmod u+x /backups/backup.sh
Tiếp theo, bạn sẽ cần phải gán nó để chạy tự động bằng cron. Đảm bảo rằng bạn sử dụng tài khoản có quyền truy cập vào thư mục sao lưu.
crontab -e
Thêm dòng sau vào crontab:
1 1 * * * /backups/backup.sh
Bạn có thể kiểm tra tập lệnh trước thời hạn bằng cách chạy tập lệnh trong khi đăng nhập vào tài khoản người dùng. (Tôi thường chạy các bản sao lưu dưới dạng root)
Đồng bộ sao lưu ngoại vi với Rsync
Bây giờ bạn đã tự động sao lưu máy chủ đang chạy, bạn có thể đồng bộ chúng ở một nơi khác bằng cách sử dụng tiện ích rsync. Bạn sẽ muốn đọc bài viết này về cách thiết lập các khóa ssh để đăng nhập tự động: Thêm Khóa SSH Công cộng vào Máy chủ Từ xa trong một Lệnh Đơn
Bạn có thể kiểm tra điều này bằng cách chạy lệnh này trên máy Linux hoặc Mac tại một vị trí khác (tôi có máy chủ Linux ở nhà, đây là nơi tôi chạy)
rsync -a [email protected]:/backups/files/* /offsitebackups/
Điều này sẽ mất khá nhiều thời gian để chạy lần đầu tiên, nhưng ở cuối máy tính cục bộ của bạn nên có một bản sao của thư mục tập tin trong thư mục / offsitebackups /. (Đảm bảo tạo thư mục đó trước khi chạy tập lệnh)
Bạn có thể lên lịch biểu này bằng cách thêm nó vào dòng crontab:
crontab -e
Thêm dòng sau, sẽ chạy rsync mỗi giờ ở mốc 45 phút. Bạn sẽ nhận thấy rằng chúng tôi sử dụng đường dẫn đầy đủ để rsync ở đây.
45 * * * * /usr/bin/rsync -a [email protected]:/backups/files/* /offsitebackups/
Bạn có thể lên lịch để chạy vào một thời điểm khác hoặc chỉ một lần mỗi ngày. Điều đó thực sự tùy thuộc vào bạn.
Lưu ý rằng có rất nhiều tiện ích cho phép bạn đồng bộ hóa qua ssh hoặc ftp. Bạn không phải sử dụng rsync.
Bảo vệ
Điều đầu tiên bạn muốn làm là đảm bảo rằng bạn có tài khoản người dùng thông thường để sử dụng thông qua ssh và đảm bảo rằng bạn có thể sử dụng su để chuyển sang root. Đó là một ý tưởng rất tồi để cho phép đăng nhập trực tiếp root trên ssh.
Tắt đăng nhập root qua SSH
Chỉnh sửa tệp / etc / ssh / sshd_config và tìm dòng sau:
#PermitRootLogin yes
Thay đổi dòng đó để trông như thế này:
PermitRootLogin no
Hãy chắc chắn rằng bạn có một tài khoản người dùng thông thường và có thể su để root trước khi bạn thực hiện thay đổi này, nếu không bạn có thể tự khóa mình.
Tắt phiên bản SSH 1
Thực sự không có lý do gì để sử dụng bất kỳ thứ gì ngoài SSH phiên bản 2, vì nó an toàn hơn các phiên bản trước. Chỉnh sửa tệp / etc / ssh / sshd_config và tìm phần sau:
#Protocol 2,1 Protocol 2
Đảm bảo rằng bạn chỉ đang sử dụng Giao thức 2 như được hiển thị.
Khởi động lại máy chủ SSH
Bây giờ bạn sẽ cần phải khởi động lại máy chủ SSH để thực hiện điều này có hiệu lực.
/etc/init.d/sshd restart
Kiểm tra các cổng mở
Bạn có thể sử dụng lệnh sau để xem cổng nào máy chủ đang nghe:
netstat -an | grep LISTEN
Bạn thực sự không nên nghe bất cứ điều gì ngoài các cổng 22, 80 và có thể là 8443 cho máy tính bảng.
Thiết lập tường lửa
Bài chi tiết:Sử dụng Iptables trên Linux
Bạn có thể tùy chọn thiết lập tường lửa iptables để chặn nhiều kết nối hơn. Ví dụ, tôi thường chặn truy cập vào bất kỳ cổng nào khác ngoài mạng công việc của tôi. Nếu bạn có địa chỉ IP động, bạn sẽ muốn tránh tùy chọn đó.
Nếu bạn đã thực hiện tất cả các bước trong hướng dẫn này cho đến thời điểm này, có thể không cần phải thêm tường lửa vào danh sách kết hợp, nhưng bạn nên hiểu các tùy chọn của mình.
Xem thêm
Sử dụng Iptables trên Linux
Tài liệu tham khảo
- Tối ưu hóa máy chủ DV của bạn (mediatemple.net)
- XCache