LNMP 組合包是一款日益流行的網站服務組合軟件包,在許多生產環(huán)境中的核心網站服務上起著強有力的作用。正如其名稱所暗示的, LNMP 包是由 Linux、nginx、MariaDB/MySQL 和 PHP 組成的。在傳統(tǒng)的 LAMP 包中使用的 Apache HTTP 協(xié)議服務器性能低下而且難于大規(guī)模集群,相比來說 nginx 的高性能及輕量級等特性,正是其的替代方案。 MariaDB 是一款社區(qū)支持驅動的 MySQL 數(shù)據(jù)庫的分支,其功能更多性能更佳。PHP,服務端編程語言,具體是由 PHP FastCGI 的增強版 PHP-FPM 組件來處理,生成網頁動態(tài)內容。
這篇文章里,我將示范如何在 CentOS 操作平臺上安裝 LNMP 包。我的安裝的目標是 CentOS 7 這個操作平臺。
第一步: Nginx
1. 安裝 Nginx
因為在CentOS 7的默認源中沒有 Nginx ,所以我們要導入Nginx官方源,官方文檔原文鏈接:
http://nginx.org/en/linux_packages.html創(chuàng)建/etc/yum.repo.d/nginx.repo 文件,內容如下:
1
2
3
4
5
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
安裝:
1
yum install nginx
2. 啟動 Nginx
安裝完成后,nginx 是不會自動啟動的?,F(xiàn)在讓我們來啟動它吧,還要做些配置讓其可以隨著操作系統(tǒng)啟動而啟動。我們也需要在防火墻里打開 TCP/80 端口,以使得可以遠程訪問 nginx 的 web 服務。所有這些操作、設置都只需要輸入如下命令就可實現(xiàn)。
01
02
03
04
05
06
07
08
09
10
11
# 啟動
systemctl start nginx
# 加入開機啟動
systemctl enable nginx
# 開啟80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
# 載入防火墻規(guī)則,使剛才的規(guī)則生效
firewall-cmd --reload
3. 測試 Nginx
nginx 的默認文檔要目錄是 /usr/share/nginx/html。默認的 index.html 文件一定已經在這目錄下了。讓我們檢測下是否可以訪問到這個測試 web 頁,輸入 http://nginx的ip地址/ 訪問。
如果您看到的是如上所示的頁面的話,說明 nginx 已經正常啟動。繼續(xù)往下。
第二步: MariaDB
下一步就是安裝 LNMP 包的數(shù)據(jù)庫組件。CentOS/RHEL 6 或早期的版本中提供的是 MySQL 的服務器/客戶端安裝包,但 CentOS/RHEL 7 已使用了 MariaDB 替代了默認的 MySQL。作為 MySQL 的簡單替代品,MariaDB 保證了與 MySQL 的 API 和命令行用法方面最大的兼容性。下面是關于怎么在 CentOS 7上安裝和配置 MaraDB/MySQL 的操作示例。
如下所示操作來安裝 MariaDB 服務/客戶端包以及啟動 MariaDB 服務。
1
2
3
4
5
6
7
8
# 安裝
yum install mariadb-server
# 啟動
systemctl start mariadb
# 加入開機啟動
systemctl enable mariadb
第三步: PHP
PHP 是 LNMP 包中一個重要的組件,它負責把存儲在 MariaDB/MySQL 服務器的數(shù)據(jù)取出生成動態(tài)內容。為了 LNMP 需要,您至少需要安裝上 PHP-FPM 和 PHP-MySQL 兩個模塊。PHP-FPM(FastCGI 進程管理器)實現(xiàn)的是 nginx 服務器和生成動態(tài)內容的 PHP 應用程序的訪問接口。PHP-MySQL 模塊使 PHP 程序能訪問 MariaDB/MySQL 數(shù)據(jù)庫。
安裝PHP模塊
在CentOS 7上安裝命令為:
1
yum install php php-fpm php-mysql
在 CentOS 6 和 CentOS 7 中,在安裝 PHP 包的同時會把 Apache web 服務器(即 httpd)當做它的依賴包一起安裝。這會跟 nginx web 服務器起沖突。這個問題會在下一節(jié)來討論。
取決于您的使用情況,可以使用 yum 命令來定制您的 PHP 引擎,也許會想安裝下面的任意一個擴展 PHP 模塊包。
php-cli: PHP 的命令行界面。從命令行里測試 PHP 時非常有用。
php-gd: PHP 的圖像處理支持。
php-bcmath: PHP 的數(shù)學支持。
php-mcrypt: PHP 的加密算法支持 (例如 DES、Blowfish、CBC、 CFB、ECB ciphers 等)。
php-xml: PHP 的 XML 解析和處理支持。
php-dba: PHP 的數(shù)據(jù)抽象層支持。
php-pecl-apc: PHP 加速器/緩存支持。
安裝時,在CentOS 7中,要查看可用的 PHP 模塊的完整列表的話,可以運行:
1
yum search php-
啟動 PHP-FPM
1
2
systemctl start php-fpm
systemctl enable php-fpm
第四步: 配置 LNMP 組合包
1. 禁用httpd服務
1
systemctl disable httpd
2. 配置 Nginx
接下來,讓我們配置 nginx 虛擬主機,使得 nginx 可以通過 PHP-FPM 來處理 PHP 的任務。用文本編輯器打開 /etc/nginx/conf.d/default.conf ,然后按如下所示修改。
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
server {
listen 80;
server_name www.server_domain.com;
root /usr/share/nginx/html;
index index.php index.html index.htm;
location / {
}
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
# nginx passes PHP scripts to FastCGI server via a TCP/9000 socket
# this setting much be consistent with /etc/php-fpm.d/www.conf
# try_files prevents nginx from passing bad scripts to FastCGI server
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
nginx 的默認工作線程數(shù)(在 /etc/nginx/nginx.conf 文件中指定的)是 1,讓我們也來調整一下這個數(shù)字。通常來說我們創(chuàng)建的工作線程數(shù)應該和 CPU 核數(shù)相同。要確信您的 CPU 的核數(shù),請運行下面這命令:
1
grep processor /proc/cpuinfo | wc -l
如果您的 CPU 是 4 核的,就如下所示修改 /etc/nginx/nginx.conf 文件。
1
worker_processes 4;
3. 配置 PHP
接下來,讓我們對 PHP 的配置文件 /etc/php.ini 做自定義設置。更具體的就是在 /etc/php.ini 文件中增加以下兩行。
1
2
cgi.fix_pathinfo=0
date.timezone = "PRC"
為了安全起見,我們希望的是 PHP 解釋器只是處理指定文件路徑的文件任務,而不是預測搜索一些并不存在的文件任務。上面的第一行起的就是這個作用。(LCTT 譯注:原文用的時區(qū)是“America/New York”,根據(jù)國內情況,應該用 PRC或 Asia 下的中國城市。)
第二行定義的是 PHP 中日期/時間相關函數(shù)使用相關的默認時區(qū)。使用本指南,找出您所在的時區(qū),并設置相應 date.timezone 的值。
4. 測試 PHP
最后,讓我們來測試下 nginx 是否能處理 PHP 頁面。在測試之前,請確保重啟 nginx 和 PHP-FPM。
1
2
3
4
5
# 先檢查nginx配置是否正確
nginx -t
# 如有配置錯誤,先改正錯誤后再執(zhí)行下面的命令
systemctl restart nginx
systemctl restart php-fpm
創(chuàng)建一個叫名叫 test.php 的文件,然后寫入如下內容,并放入 /usr/share/nginx/html 目錄。
1
<?php phpinfo(); ?>
打開瀏覽器,輸入 http://nginx的IP地址/test.php 。
如果您能看到如上所示的頁面,說明設置的 LNMP 完全成功!