Linux CentOS7 系統中部署 Nginx + PHP-fpm + MySQL 環境

iyoung5發表於2020-03-06

LNMP

由於 Nginx 輕量與高效的效能,Linux + Nginx + Mysql + PHP 的部署模式,被更多的應用於 PHP 的開發與生產環境中。
本文介紹 Nginx + php-fpm 的部署模式的安裝與配置過程,先介紹下幾個概念

  • cgi 是 web 伺服器如 Apache、Nginx 等與 php 直譯器之間的通訊協議
  • fast-cgi 是 cgi 的改良版本。相較於 cgi 的每次請求過來都 fork 一個程式,結束後 kill 這個程式,fast-cgi 會先 fork 一個 master ,然後再 fork 多個 worker,當請求過來時, master 會傳遞給一個 worker ,然後立即可以接受下一個請求。這樣避免了重複的勞動,大大提高了效率
  • php-cgi 是 PHP 5.4之前官方自帶的實現 fast-cgi 協議的直譯器,但由於效能的問題,被廣為詬病,PHP 5.4後被 php-fpm 代替
  • php-fpm 是 PHP 5.4之前第三方的管理 fast-cgi 程式的管理器,之後被官方收錄,成為替代 php-cgi 的管理器和直譯器
    以上概念容易混淆,可自行查閱更詳細的介紹。以下是整個安裝過程。

SELinux

SELinux 是 Linux 內建的安全模組,是為了減小系統中服務程式可訪問的資源,如果開啟會導致服務訪問出現異常等情況,一些雲平臺,如阿里雲等,預設情況下,ECS 裡面的 SELinux 是關閉的。我們可以手動關閉。

檢視是否開啟:

/usr/sbin/sestatus -v

臨時關閉:

setenforce 0

永久關閉:

vi /etc/selinux/config

SELINUX=enforcing改為SELINUX=disabled
設定後需要重啟伺服器才能生效

NGINX

安裝

更新系統包和安裝軟體包,然後安裝 Nginx

yum update -y
rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
yum install nginx1w

配置

編輯配置檔案

vi /etc/nginx/nginx.conf

做如下修改

# `·worker_processes  1;` 修改成伺服器核心數
worker_processes  8;
# `index   index.html index.htm;` 增加預設檔案
index   index.html index.htm index.php;
# 修改 `server` 如下
server {
        listen       80;
        server_name  localhost;
        root         /home/wwwroot/public;
        client_max_body_size 500M;
        server_tokens off;

        location / {
            if (!-e $request_filename){
               rewrite ^/(.*)$ /index.php/$1 last;
               break;
            }
        }

        # redirect server error pages to the static page /40x.html
        #
        error_page  404              /404.html;
        location = /40x.html {
        }

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php(.*)$ {
        #    root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;

            fastcgi_split_path_info  ^(.+\.php)(\/?.*)$;

            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param SCRIPT_NAME $fastcgi_script_name;

            fastcgi_param  PATH_INFO  $fastcgi_path_info;
            fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
            fastcgi_param  SERVER_SOFTWARE    nginx;

            fastcgi_buffer_size 128k;
            fastcgi_buffers 256 16k;
            fastcgi_busy_buffers_size 256k;
            fastcgi_temp_file_write_size 256k;
            include        fastcgi_params;
        }
    }

開啟 gzip,在 /etc/nginx/conf.d中加入 gzip.conf 檔案,如下

gzip  on;
gzip_disable “MSIE [1-6].(?!.*SV1);
gzip_http_version 1.1;
gzip_vary on;
gzip_proxied any;
gzip_min_length 5000;
gzip_buffers 16 8k;
gzip_comp_level 6;
gzip_types text/css text/xml text/plain application/json application/javascript application/xml application/rss+xml application/xhtml+xml;

啟動 Nginx ,並加入開機自啟動

systemctl start nginx
systemctl enable nginx

PHP

安裝

yum 安裝php-fpm和相關擴充套件

yum install php72w-fpm php72w-opcache php72w-mysqlnd php72w-cli php72w-mbstring php72w-gd php72w-xml php72w-zip php72w-pecl-redis

配置

編輯配置檔案

vi /etc/php-fpm.d/www.conf

做如下修改

# user = apache 修改為
user = nginx
# group = apache 修改為
group = nginx

啟動 php-fpm ,並加入開機自啟動

systemctl start php-fpm
systemctl enable php-fpm

MYSQL

安裝

解除安裝centos7中自帶的Mariadb

# 查詢出來已安裝的`Mariadb`
rpm -qa|grep mariadb
# 解除安裝`mariadb`,檔名為上述命令查詢出來的檔案
rpm -e --nodeps 程式名 

檢視是否已經安裝了MySQL

rpm -qa | grep -i mysql

安裝MySQL服務

wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
rpm -ivh mysql57-community-release-el7-8.noarch.rpm
yum -y install mysql-server

啟動

啟動 MySQL ,並加入開機自啟動

systemctl start mysqld
systemctl enable mysqld

修改預設root密碼
首先用系統預設密碼登入資料庫

# 檢視預設密碼
grep 'temporary password' /var/log/mysqld.log
# 如顯示如下,則密碼是`#<eBwq;r)6f1`
2019-08-22T10:11:04.849557Z 1 [Note] A temporary password is generated for root@localhost: #<eBwq;r)6f1

登入資料庫,並修改密碼

mysql -u root -p
# 密碼強度滿足:陣列、字母、大小寫、特殊字元
set password for 'root'@'localhost'=password('K!7F9KTk*0eq');

FTP

安裝

# 檢視是否已安裝
rpm -qa | grep vsftpd
# 安裝
yum -y install vsftpd
# 配置使用者,如網站根目錄為 `/home/wwwroot`
useradd -s /sbin/nologin -d /home/wwwroot wwwuser
chown wwwuser:wwwuser /home/wwwroot -R
# 修改使用者密碼
passwd wwwuser

配置

編輯配置檔案

vi /etc/vsftpd/vsftpd.conf

修改如下

anonymous_enable=NO
userlist_enable=NO
allow_writeable_chroot=YES
chroot_local_user=YES

編輯檔案

vi /etc/pam.d/vsftpd

修改

# 在以下配置行前加 `#`註釋
auth required pam_shells.so

啟動

啟動 FTP ,並加入開機自啟動

systemctl start vsftpd
systemctl enable vsftpd

REDIS

Redis是儲存在記憶體中的鍵值資料庫,常被用作快取應用,可選擇安裝

安裝

yum -y install redis

配置

新增密碼驗證,修改配置檔案

vi /etc/redis.conf

做如下修改

# 找到註釋:`#requirepass foobared`,在其下一行新增如下配置
requirepass 23z2MmTGYow%
# 其中,`23z2MmTGYow%` 即為資料庫密碼

啟動

啟動 Redis ,並加入開機自啟動

systemctl start redis
systemctl enable redis
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章