天天看點

CentOS 7 下安裝 LEMP 服務(nginx、MariaDB/MySQL 和 php)

<a href="http://www.chinaitlabs.net/wp-content/uploads/233324q0600r8wuu27sw6f1.png"></a>

讓我們在 CentOS 上安裝 nginx 作為第一步,然後對它作些基本的配置,比如使其能引導時啟動和對防火牆做個性化設定。

安裝 Nginx

讓我們從它的官方的 RPM 源來安裝一個預建構的穩定版本的 nginx 包。

$ sudo rpm --import http://nginx.org/keys/nginx_signing.key

$ sudo rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

$ sudo yum install nginx

在 CentOS 6 系統上:

$ sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

注意在安裝 nginx RPM 包之前,如果您沒有導入 nginx 的官方 GPG 密鑰的話,會出一如下所示的警告:

warning: /var/tmp/rpm-tmp.KttVHD: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEY

啟動 Nginx

安裝完成後,nginx 是不會自動啟動的。現在讓我們來啟動它吧,還要做些配置讓其可以随着作業系統啟動而啟動。我們也需要在防火牆裡打開 TCP/80 端口,以使得可以遠端通路 nginx 的 web 服務。所有這些操作、設定都隻需要輸入如下指令就可實作。

$ sudo systemctl start nginx

$ sudo systemctl enable nginx

$ sudo firewall-cmd --zone=public --add-port=80/tcp --permanent$ sudo firewall-cmd --reload

$ sudo service nginx start

$ sudo chkconfig nginx on

$ sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT$ sudo service iptables save

測試 Nginx

nginx 的預設文檔要目錄是 /usr/share/nginx/html。預設的 index.html 檔案一定已經在這目錄下了。讓我們檢測下是否可以通路到這個測試 web 頁,輸入 http://nginx的ip位址/ 通路。

<a href="http://www.chinaitlabs.net/wp-content/uploads/233402ogs66v2e22ce63vo1.jpg"></a>

如果您看到的是如上所示的頁面的話,說明 nginx 已經正常啟動。繼續往下。

如下所示操作來安裝 MariaDB 服務/用戶端包以及啟動 MariaDB 服務。

$ sudo yum install mariadb-server

$ sudo systemctl start mariadb

$ sudo systemctl enable mariadb

如下示,安裝 MySQL 服務/用戶端包并且啟動 MySQL 服務。

$ sudo yum install mysql-server

$ sudo service mysqld start

$ sudo chkconfig mysqld on

在成功啟動 MariaDB/MySQL 服務後,執行在 MariaDB/MySQL 服務包中的腳本。這一次的運作會為為資料庫伺服器進行一些安全強化措施,如設定(非空)的 root 密碼、删除匿名使用者、鎖定遠端通路。

$ sudo mysql_secure_installation

<a href="http://www.chinaitlabs.net/wp-content/uploads/233406vvq6a0iklq6b6bxz1.jpg"></a>

這就是資料庫的設定。現在進行下一步。

安裝 PHP 子產品

$ sudo yum php php-fpm php-mysql

首先,您需要從倉庫中安裝 REMI 庫(參見本指南),并安裝軟體包。

$ sudo yum --enablerepo=remi install php php-fpm php-mysql

<a href="http://www.chinaitlabs.net/wp-content/uploads/233411mvfa3v3anz6af6md1.jpg"></a>

在安裝 PHP 時,得注意兩個地方:

在 CentOS 6 系統中,安裝 REMI倉庫中最新的 php-mysql 子產品時,MySQL 的服務端包和用戶端包會被當做一部分依賴包而自動的更新。

取決于您的使用情況,可以使用 yum 指令來定制您的 PHP 引擎,也許會想安裝下面的任意一個擴充 PHP 子產品包。

php-cli: PHP 的指令行界面。從指令行裡測試 PHP 時非常有用。

php-gd: PHP 的圖像處理支援。

php-bcmath: PHP 的數學支援。

php-mcrypt: PHP 的加密算法支援 (例如 DES、Blowfish、CBC、 CFB、ECB ciphers 等)。

php-xml: PHP 的 XML 解析和處理支援。

php-dba: PHP 的資料抽象層支援。

php-pecl-apc: PHP 加速器/緩存支援。

安裝時,要檢視可用的 PHP 子產品的完整清單的話,可以運作:

$ sudo yum search php- (CentOS 7)

$ sudo yum --enablerepo=remi search php- (CentOS 6)

啟動 PHP-FPM

您需要啟動 PHP-FPM ,然後把它放到自動啟動服務清單。

$ sudo systemctl start php-fpm

$ sudo systemctl enable php-fpm

$ sudo chkconfig php-fpm on

$ sudo service php-fpm start

使 Httpd 不可用

首先,讓我們把早先随 PHP 包安裝的 httpd 服務給禁用掉。

$ sudo systemctl disable httpd

$ sudo chkconfig httpd off

配置 Nginx

接下來,讓我們配置 nginx 虛拟主機,使得 nginx 可以通過 PHP-FPM 來處理 PHP 的任務。用文本編輯器打開 /etc/nginx/conf.d/default.conf ,然後按如下所示修改。

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 的預設工作線程數(在 /etc/nginx/nginx.conf 檔案中指定的)是 1,讓我們也來調整一下這個數字。通常來說我們建立的工作線程數應該和 CPU 核數相同。要确信您的 CPU 的核數,請運作下面這指令:

$ grep processor /proc/cpuinfo | wc -l

如果您的 CPU 是 4 核的,就如下所示修改 /etc/nginx/nginx.conf 檔案。

$ sudo vi /etc/nginx/nginx.conf

worker_processes 4;

配置 PHP

接下來,讓我們對 PHP 的配置檔案 /etc/php.ini 做自定義設定。更具體的就是在 /etc/php.ini 檔案中增加以下兩行。

cgi.fix_pathinfo=0date.timezone = “PRC”

為了安全起見,我們希望的是 PHP 解釋器隻是處理指定檔案路徑的檔案任務,而不是預測搜尋一些并不存在的檔案任務。上面的第一行起的就是這個作用。(LCTT 譯注:原文用的時區是“America/New York”,根據國内情況,應該用 PRC或 Asia 下的中國城市。)

第二行定義的是 PHP 中日期/時間相關函數使用相關的預設時區。使用本指南,找出您所在的時區,并設定相應 date.timezone 的值。

測試 PHP

最後,讓我們來測試下 nginx 是否能處理 PHP 頁面。在測試之前,請確定重新開機 nginx 和 PHP-FPM。

$ sudo systemctl restart nginx

$ sudo systemctl restart php-fpm

$ sudo service nginx restart

$ sudo service php-fpm restart

建立一個叫名叫 test.php 的檔案,然後寫入如下内容,并放入 /var/www/html/ 目錄。

打開浏覽器,輸入 http://nginx的IP位址/test.php 。

<a href="http://www.chinaitlabs.net/wp-content/uploads/233416ixeaxyx4vvilyaxy1.jpg"></a>