Hướng dẫn này sẽ hướng dẫn bạn cài đặt máy chủ web Nginx trên Debian 8.Nginx (phát âm là "engine x") là máy chủ HTTP miễn phí, mã nguồn mở, hiệu suất cao. Nginx được biết đến với tính ổn định, bộ tính năng phong phú, cấu hình đơn giản và mức tiêu thụ tài nguyên thấp. Hướng dẫn này hướng dẫn bạn cách cài đặt Nginx với hỗ trợ PHP (thông qua PHP-FPM) và MariaDB thay thế MySQL. Thiết lập này thường được gọi là LEMP = Linux + nginx (phát âm là "engine x") + MySQL + PHP) .
Tôi sẽ sử dụng trình chỉnh sửa nano sau để chỉnh sửa các tệp cấu hình. Nano có thể được cài đặt bằng lệnh này:
Bạn sẽ được yêu cầu cung cấp mật khẩu cho người dùng gốc MariaDB - mật khẩu này hợp lệ với người dùng root@localhost cũng như [emailprotected], do đó chúng ta không phải chỉ định mật khẩu gốc MariaDB theo cách thủ công sau này:
Mật khẩu mới cho người dùng "gốc" MariaDB: <-- yourrootsqlpassword
Lặp lại mật khẩu cho người dùng "root" MariaDB: <-- yourrootsqlpassword
Sau đó, khởi động Nginx:
Nhập địa chỉ IP hoặc tên máy chủ của máy chủ web vào trình duyệt (ví dụ: http://192.168.1.100), và bạn sẽ thấy trang sau:
Gốc tài liệu nginx mặc định trên Debian 8 là /var/www/html.
PHP-FPM là một tiến trình daemon (với tệp đơn vị systemd php5-fpm.service) chạy máy chủ FastCGI trên socket /var/run/php5-fpm.sock.
Cấu hình dễ hiểu (bạn có thể tìm hiểu thêm về cấu hình này tại đây: http://wiki.nginx.org/NginxFullExample và tại đây: http://wiki.nginx.org/NginxFullExample2)
Đầu tiên, hãy đặt keepalive_timeout thành một giá trị hợp lý như 2 giây:
Các máy chủ ảo được định nghĩa trong các thùng chứa máy chủ {}. Vhost mặc định được định nghĩa trong tệp /etc/nginx/sites-available/default - hãy sửa đổi nó như sau:
server_name _; biến đây thành vhost catchall mặc định (tất nhiên, bạn cũng có thể chỉ định tên máy chủ ở đây như www.example.com).
Tôi đã thêm index.php vào dòng index. root /var/www/html; có nghĩa là gốc tài liệu là thư mục /var/www/html.
Phần quan trọng đối với PHP là khổ location ~ \.php$ {}. Bỏ chú thích như hiển thị ở trên để bật nó.
Bây giờ hãy lưu tệp và tải lại Nginx:
Tiếp theo, hãy mở /etc/php5/fpm/php.ini...
... và đặt cgi.fix_pathinfo=0:
Tải lại PHP-FPM:
Bây giờ hãy tạo tệp PHP sau trong thư mục gốc của tài liệu /var/www/html/:
Bây giờ chúng ta gọi tệp đó trong trình duyệt (ví dụ: http://192.168.1.100/info.php):
Như bạn thấy, PHP5 đang hoạt động và nó hoạt động thông qua FPM/FastCGI, như được hiển thị trong dòng Server API. Nếu bạn cuộn xuống xa hơn, bạn sẽ thấy tất cả các mô-đun đã được bật trong PHP5. MySQL không được liệt kê ở đó, điều đó có nghĩa là chúng ta chưa có hỗ trợ MariaDB / MySQL trong PHP.
Chọn những module bạn cần và cài đặt như sau:
APCu là một bộ đệm opcode PHP miễn phí và mở để đệm và tối ưu hóa mã trung gian PHP, mở rộng bộ đệm opcache PHP. Nó thay thế bộ đệm APC và tương tự như các bộ đệm opcode PHP khác, chẳng hạn như eAccelerator và Xcache. Rất khuyến khích cài đặt một trong những module này để tăng tốc trang PHP của bạn.
APCu có thể được cài đặt như sau:
Bây giờ hãy tải lại PHP-FPM:
Bây giờ hãy tải lại http://192.168.1.100/info.php trong trình duyệt của bạn và cuộn xuống phần module một lần nữa. Bây giờ bạn sẽ thấy rất nhiều module mới ở đó, bao gồm module MySQL:
... và làm cho dòng listen trông như sau:
Điều này sẽ khiến PHP-FPM lắng nghe trên cổng 9000 trên IP 127.0.0.1 (localhost). Đảm bảo bạn sử dụng một cổng không được sử dụng trên hệ thống của bạn.
Sau đó tải lại PHP-FPM:
Tiếp theo, hãy xem qua cấu hình Nginx và tất cả các máy chủ ảo của bạn và thay đổi dòng fastcgi_pass unix:/var/run/php5-fpm.sock; thành fastcgi_pass 127.0.0.1:9000;, ví dụ: như thế này:
Cuối cùng, tải lại Nginx:
Chi tiết đăng nhập của VM là:
Mật khẩu: howtoforge
Mật khẩu: howtoforge
Vui lòng thay đổi mật khẩu sau lần khởi động đầu tiên.
VM được định cấu hình cho IP tĩnh 192.168.1.100, IP có thể được thay đổi trong tệp /etc/network/interfaces.
Lưu ý sơ bộ
Trong hướng dẫn này, tôi sử dụng tên máy chủ server1.example.com với địa chỉ IP 192.168.1.100. Các thiết lập này có thể khác nhau đối với bạn, vì vậy bạn phải thay thế chúng khi thích hợp. Bạn nên có một máy chủ Debian 8, tôi sẽ sử dụng máy chủ Debian minimal làm hệ thống cơ sở cho hướng dẫn này.Cập nhật hệ thống
Bạn nên cập nhật danh sách gói và cài đặt bất kỳ bản cập nhật nào đang chờ xử lý trước khi chúng ta bắt đầu thiết lập Nginx. Chạy các lệnh sau để cài đặt bất kỳ bản cập nhật nào đang chờ xử lý.
Mã:
apt-get update
apt-get upgrade -y
Mã:
apt-get -y install nano
Cài đặt MariaDB (để thay thế MySQL)
Để cài đặt MariaDB, chúng ta chạy:
Mã:
apt-get -y install mariadb-server mariadb-client
Mật khẩu mới cho người dùng "gốc" MariaDB: <-- yourrootsqlpassword
Lặp lại mật khẩu cho người dùng "root" MariaDB: <-- yourrootsqlpassword
Cài đặt Nginx
Nginx có sẵn dưới dạng gói cho Debian Jessie mà chúng ta có thể cài đặt như sau:
Mã:
apt-get -y install nginx
Mã:
systemctl start nginx.service
Gốc tài liệu nginx mặc định trên Debian 8 là /var/www/html.
Cài đặt PHP
Chúng ta có thể khiến PHP5 hoạt động trong nginx thông qua PHP-FPM (PHP-FPM (FastCGI Process Manager) là một triển khai PHP FastCGI thay thế với một số tính năng bổ sung hữu ích cho các trang web có bất kỳ quy mô nào, đặc biệt là các trang web bận rộn hơn) mà chúng ta cài đặt như sau:
Mã:
apt-get -y install php5-fpm
Cấu hình nginx
Cấu hình nginx nằm trong /etc/nginx/nginx.conf mà chúng ta mở ngay bây giờ:
Mã:
nano /etc/nginx/nginx.conf
Đầu tiên, hãy đặt keepalive_timeout thành một giá trị hợp lý như 2 giây:
Mã:
[...] keepalive_timeout 2;[...]
Mã:
nano /etc/nginx/sites-available/default
Mã:
[...]server {
listen 80 default_server;
listen [::]:80 default_server;
# Cấu hình SSL
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Chứng chỉ tự ký do gói ssl-cert tạo ra
# Không sử dụng chúng trong máy chủ sản xuất!
#
# include snippets/snakeoil.conf;
root /var/www/html;
# Thêm index.php vào danh sách nếu bạn đang sử dụng PHP
index index.html index.htm index.nginx-debian.html index.php;
server_name _;
location / {
# Đầu tiên, hãy thử phục vụ yêu cầu dưới dạng tệp, sau đó
# dưới dạng thư mục, sau đó quay lại hiển thị 404.
try_files $uri $uri/ =404;
}
# truyền các tập lệnh PHP đến máy chủ FastCGI đang lắng nghe trên 127.0.0.1:9000
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# # Chỉ với php5-cgi:
# fastcgi_pass 127.0.0.1:9000;
# Với php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
# từ chối quyền truy cập vào các tệp .htaccess, nếu gốc tài liệu của Apache
# đồng ý với gốc tài liệu của nginx
#
location ~ /\.ht {
deny all;
}
}[...]
Tôi đã thêm index.php vào dòng index. root /var/www/html; có nghĩa là gốc tài liệu là thư mục /var/www/html.
Phần quan trọng đối với PHP là khổ location ~ \.php$ {}. Bỏ chú thích như hiển thị ở trên để bật nó.
Bây giờ hãy lưu tệp và tải lại Nginx:
Mã:
systemctl reload nginx.service
Mã:
nano /etc/php5/fpm/php.ini
Mã:
[...]; cgi.fix_pathinfo cung cấp hỗ trợ PATH_INFO/PATH_TRANSLATED *thực* cho CGI. PHP; hành vi trước đây là đặt PATH_TRANSLATED thành SCRIPT_FILENAME và không hiểu; PATH_INFO là gì. Để biết thêm thông tin về PATH_INFO, hãy xem thông số kỹ thuật cgi. Thiết lập; thiết lập này thành 1 sẽ khiến PHP CGI sửa đường dẫn của nó để tuân thủ thông số kỹ thuật. Một thiết lập; của zero khiến PHP hoạt động như trước. Mặc định là 1. Bạn nên sửa các tập lệnh của mình; để sử dụng SCRIPT_FILENAME thay vì PATH_TRANSLATED.; http://php.net/cgi.fix-pathinfocgi.fix_pathinfo=0[...]
Mã:
systemctl reload php5-fpm.service
Mã:
nano /var/www/html/info.php
Mã:
Như bạn thấy, PHP5 đang hoạt động và nó hoạt động thông qua FPM/FastCGI, như được hiển thị trong dòng Server API. Nếu bạn cuộn xuống xa hơn, bạn sẽ thấy tất cả các mô-đun đã được bật trong PHP5. MySQL không được liệt kê ở đó, điều đó có nghĩa là chúng ta chưa có hỗ trợ MariaDB / MySQL trong PHP.
Nhận hỗ trợ MySQL / MariaDB trong PHP
Để nhận hỗ trợ MySQL trong PHP, chúng ta có thể cài đặt gói php5-mysqlnd. Bạn nên cài đặt một số mô-đun PHP khác vì bạn có thể cần chúng cho các ứng dụng của mình. Bạn có thể tìm kiếm các module PHP có sẵn như sau:
Mã:
apt-cache search php5
Mã:
apt-get -y install php5-mysqlnd php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-intl php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
APCu có thể được cài đặt như sau:
Mã:
apt-get install php5-apcu
Mã:
systemctl reload php5-fpm.service
Làm cho PHP-FPM sử dụng kết nối TCP (tùy chọn)
Theo mặc định, PHP-FPM đang lắng nghe trên socket /var/run/php5-fpm.sock. Bạn cũng có thể khiến PHP-FPM sử dụng kết nối TCP. Để thực hiện việc này, hãy mở /etc/php5/fpm/pool.d/www.conf...
Mã:
nano /etc/php5/fpm/pool.d/www.conf
Mã:
[...];listen = /var/run/php5-fpm.socklisten = 127.0.0.1:9000[...]
Sau đó tải lại PHP-FPM:
Mã:
systemctl reload php5-fpm.service
Mã:
nano /etc/nginx/sites-available/default
Mã:
[...]
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# # Chỉ với php5-cgi:
# fastcgi_pass 127.0.0.1:9000;
# # Với php5-fpm:
# fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_pass 127.0.0.1:9000;
}[...]
Mã:
systemctl reload nginx.service
Ảnh máy ảo
Hướng dẫn này có sẵn để sử dụng máy ảo ở định dạng OVA / OVF dành cho người đăng ký Howtoforge. Định dạng VM tương thích với VMWare và Virtualbox và có thể một số công cụ khác có thể nhập định dạng này. Bạn có thể tìm thấy liên kết tải xuống trong menu bên phải ở trên cùng. Nhấp vào tên tệp để bắt đầu tải xuống.Chi tiết đăng nhập của VM là:
Đăng nhập SSH
Tên người dùng: rootMật khẩu: howtoforge
Đăng nhập MariaDB
Tên người dùng: rootMật khẩu: howtoforge
Vui lòng thay đổi mật khẩu sau lần khởi động đầu tiên.
VM được định cấu hình cho IP tĩnh 192.168.1.100, IP có thể được thay đổi trong tệp /etc/network/interfaces.
Liên kết
- nginx: http://nginx.net/
- Wiki nginx: http://wiki.codemongers.com/Main
- PHP: http://www.php.net/
- PHP-FPM: http://php-fpm.org/
- MariaDB: https://mariadb.org/
- Debian: http://www.debian.org/