CentOS7.2 上 Nginx PHP Mariadb 環境搭建

來源:互聯網
上載者:User

標籤:lnmp centos7.2

最近有個ERP+PHP-web 測試頁面環境部署需求,需要部署nginx+php的cgi+socket的模式、mysql環境。查看服務連接埠是否起來,我們習慣使用netstat指令查看,所以如果你的系統裡尚未安裝netstat,可直接安裝 yum install -y net-tools即可


實驗環境:

Linux版本:CentOS 7.2

nginx版本:nginx-1.10.1

PHP版本:php-5.6.5

mysql版本:MariaDB-5.5.52


一、首先部署nginx

把相關依賴包安裝完畢

openssl-devel 、zlib-devel `pcre-devel

程式預設是使用 nobody 身份啟動並執行,我們使用 nginx 使用者來運行,首先添加Nginx組和使用者,不建立家目錄,不允許登陸系統

#groupadd  nginx

#useradd  -M  -s /sbin/nologin  -g  nginx  nginx


安裝nginx採取的是nginx-1.10.1.tar.gz

# tar xf nginx-1.10.1.tar.gz 

# cd nginx-1.10.1


指定安裝目錄和運行時用的屬主和屬組,並啟用狀態監控模塊等

#  ./configure \

  --prefix=/usr/local/nginx   \

  --pid-path=/usr/local/nginx/logs/nginx.pid  \

  --lock-path=/var/lock/nginx.lock \

  --user=nginx \

  --group=nginx \

  --with-http_ssl_module \

  --with-http_flv_module \

  --with-http_stub_status_module \

  --with-http_gzip_static_module \

  --http-client-body-temp-path=/var/tmp/nginx/client/ \

  --http-proxy-temp-path=/var/tmp/nginx/proxy/ \

  --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \

  --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \

  --http-scgi-temp-path=/var/tmp/nginx/scgi \

  --with-pcre


大致的配置結果

Configuration summary

  + using system PCRE library

  + using system OpenSSL library

  + md5: using OpenSSL library

  + sha1: using OpenSSL library

  + using system zlib library


  nginx path prefix: "/usr/local/nginx"

  nginx binary file: "/usr/local/nginx/sbin/nginx"

  nginx modules path: "/usr/local/nginx/modules"

  nginx configuration prefix: "/usr/local/nginx/conf"

  nginx configuration file: "/usr/local/nginx/conf/nginx.conf"

  nginx pid file: "/var/run/nginx/nginx.pid"

  nginx error log file: "/usr/local/nginx/logs/error.log"

  nginx http access log file: "/usr/local/nginx/logs/access.log"

  nginx http client request body temporary files: "/var/tmp/nginx/client/"

  nginx http proxy temporary files: "/var/tmp/nginx/proxy/"

  nginx http fastcgi temporary files: "/var/tmp/nginx/fcgi/"

  nginx http uwsgi temporary files: "/var/tmp/nginx/uwsgi"

  nginx http scgi temporary files: "/var/tmp/nginx/scgi"


上述配置完,就進行編譯安裝  

#make && make install 

#mkdir /var/tmp/nginx/client/ -pv


等編譯安裝完成後在 /usr/local 下就會出現 nginx 這個目錄了,進入這個目錄後發現目錄非常簡單。

它的設定檔存放在 conf 目錄中,網頁檔案存放在 html 中,記錄檔存放在 logs 中,

sbin 目錄下只有一個可執行程式 "nginx"


二、部署php環境

a. FastCGI是一個可伸縮地、高速地在HTTP server和動態指令碼語言間通訊的介面

b. Nginx是個輕量級的HTTP server,必須藉助第三方的FastCGI處理器才可以對PHP進行解析

c. PHP-FPM是一個第三方的FastCGI進程管理器,它是作為PHP的一個補丁來開發的,在安裝的時候也需要和PHP源碼一起編譯,

也就是說PHP-FPM被編譯到PHP核心中,因此在處理效能方面更加優秀;同時它在處理高並發方面也比spawn-fcgi引擎好很多,

因此,推薦Nginx+PHP/PHP-FPM這個組合對PHP進行解析。


首先安裝php的一些依賴包

gcc gcc-c++ libxml2 libxml2-devel autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel


然後解壓下載好的tar包

# tar -xvzf php-5.6.5.tar.gz


進入到解壓後的php-5.6.5中

# cd php-5.6.5

# ./configure --prefix=/usr/local/php –enable-fpm –enable-mbstring –with-mysql=mysqlnd –with-mysqli=mysqlnd –with-pdo-mysql=mysqlnd

# make && make install


查看php版本 

# php -v

PHP 5.6.5 (cli) (built: Jan 10 2017 03:53:13) 

Copyright (c) 1997-2014 The PHP Group

Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies


如果不行,則直接在php的執行檔案做個軟鏈接到/usr/bin/php或者複製一份至/usr/bin/下面即可查看PHP版本啦


#ln -s  /usr/local/php/bin/php /usr/bin/php

或者

#cp -raf /usr/local/php/bin/php  /usr/bin/php 


php的設定檔php.ini,複製一份安裝目錄下的php.ini-development這個設定檔範本到php的目錄

# cp -raf php-5.6.5/php.ini-development  /usr/local/php/lib/php.ini


當然,我們還需要配置一下php-fpm,在安裝php的時候,已經為我們產生了一個配置模板了,在 /usr/local/php/etc/php-fpm.conf.default了,所以只要複製這個模板並改名為php-fpm.conf就可以了,進去把 daemonize改成yes,以後台服務的運行方式啟動。然後捏,whereis php-fpm,

這個是個可執行檔,直接執行php-fpm就可以運行了,然後netstat -an| grep php-fpm,看到,果然9000號連接埠在監聽啦

#cp -raf /usr/local/php/etc/php-fpm.conf.default  /usr/local/php/etc/php-fpm.conf

# whereis php-fpm


配置與最佳化PHP-FPM

PHP的全域設定檔是php.ini,在上面的步驟中,已經將此檔案複製到了/usr/local/php/lib/php.ini下。可以根據每個應用需求的不同,對php.ini進行相應的配置。

下面重點介紹PHP-FPM引擎的設定檔。

 

根據上面指定的安裝路徑,PHP-FPM的預設設定檔為/usr/local/php/etc/php-fpm.conf。

php-fpm.conf是一個XML格式的純文字檔案,其內容很容易看明白。這裡重點介紹幾個重要的配置標籤:

 

標籤listen_address是配置fastcgi進程監聽的IP地址以及連接埠,預設是127.0.0.1:9000,連接埠可更改

<value name="listen_address">127.0.0.1:9000</value> 

 

標籤display_errors用來設定是否顯示PHP錯誤資訊,預設是0,不顯示錯誤資訊,設定為1可以顯示PHP錯誤資訊。

<value name="display_errors">0</value>

 

標籤user和group用於設定運行FastCGI進程的使用者和使用者組。需要注意的是,這裡指定的使用者和使用者組要和Nginx設定檔中指定的使用者和使用者組一致。

<value name="user">nobody</value> 

<value name="group">nobody</value> 

 

標籤max_children用於設定FastCGI的進程數。根據官方建議,小於2GB記憶體的伺服器,可以只開啟64個進程,4GB以上記憶體的伺服器可以開啟200個進程。

<value name="max_children">5</value>

 

標籤request_terminate_timeout用於設定FastCGI執行指令碼的時間。預設是0s,也就是無限執行下去,可以根據情況對其進行修改。

<value name="request_terminate_timeout">0s</value>

 

標籤rlimit_files用於設定PHP-FPM對開啟檔案描述符的限制,預設值為1024。這個標籤的值必須和Linux核心開啟檔案數關聯起來,例如要將此值設定為65535,

就必須在Linux命令列執行‘ulimit -HSn 65536‘。

<value name="rlimit_files">1024</value>

 

標籤max_requests指明了每個children最多處理多少個請求後便會被關閉,預設的設定是500。

<value name="max_requests">500</value>

 

標籤allowed_clients用於設定允許訪問FastCGI進程解析器的IP地址。如果不在這裡指定IP地址,Nginx轉寄過來的PHP解析請求將無法被接受。

<value name="allowed_clients">127.0.0.1</value>


管理FastCGI進程,在配置完php-fpm後,就可以啟動FastCGI進程

/usr/local/php/sbin/php-fpm


FastCGI進程啟動後,其監聽的IP地址和連接埠也隨即啟動,可以通過ps和netstat查看相關資訊


由於Nginx本身不會對PHP進行解析,因此要實現Nginx對PHP的支援,其實是將對PHP頁面的請求交給fastCGI進程監聽的IP地址及連接埠。

如果把php-fpm當做Live App伺服器,那麼Nginx其實就是一個反向 Proxy伺服器。Nginx通過反向 Proxy功能實現對PHP的解析,這就是Nginx實現PHP動態解析的原理


Nginx設定檔的路徑為/usr/local/nginx/conf/nginx.conf。下面是在Nginx下支援PHP解析的一個虛擬機器主機配置執行個體

# vi /usr/local/nginx/conf/nginx.conf


fastcgi_param指令指定放置PHP動態程式的主目錄,也就是$fastcgi_script_name前面指定的路徑,這裡是/usr/local/nginx/html目錄

fastcgi_params檔案是FastCGI進程的一個參數設定檔,在安裝Nginx後,會預設產生一個這樣的檔案,這裡通過include指令將FastCGI參數設定檔包含了進來


在配置完成Nginx+FastCGI之後,為了保證Nginx下PHP環境的高速穩定運行,需要添加一些FastCGI最佳化指令。下面給出一個最佳化執行個體,

將下面代碼添加到Nginx主設定檔中的HTTP層級

location ~ \.php$ {

            root           html;

            fastcgi_pass   127.0.0.1:9000;

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

            include        fastcgi_params;

         # fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;    

          fastcgi_connect_timeout 300;    

          fastcgi_send_timeout 300;    

          fastcgi_read_timeout 300;    

          fastcgi_buffer_size 64k;    

          fastcgi_buffers 4 64k;    

          fastcgi_busy_buffers_size 128k;    

          fastcgi_temp_file_write_size 128k;    

         # fastcgi_cache TEST;    

          fastcgi_cache_valid 200 302 1h;    

          fastcgi_cache_valid 301 1d;    

          fastcgi_cache_valid any 1m;

        }


下面是對上述代碼的含義進行介紹。

第一行代碼是為FastCGI緩衝指定一個檔案路徑、目錄結構等級、關鍵字地區儲存時間和非活動刪除時間。

fastcgi_connect_timeout指定串連到後端FastCGI的逾時時間。

fastcgi_send_timeout指定向FastCGI傳送請求的逾時時間,這個值是已經完成兩次握手後向FastCGI傳送請求的逾時時間。

fastcgi_read_timeout指定接收FastCGI應答的逾時時間,這個值是已經完成兩次握手後接收FastCGI應答的逾時時間。

fastcgi_buffer_size用於指定讀取FastCGI應答第一部分需要用多大的緩衝區,這個值表示將使用1個64KB的緩衝區讀取應答的第一部分(應答頭),可以設定為fastcgi_buffers選項指定的緩衝區大小。

fastcgi_buffers指定本地需要用多少和多大的緩衝區來緩衝FastCGI的應答請求。如果一個PHP指令碼所產生的頁面大小為256KB,那麼會為其分配4個64KB的緩衝區來緩衝;如果頁面大小大於256KB,那麼大於256KB的部分會緩衝到fastcgi_temp指定的路徑中,但是這並不是好方法,因為記憶體中的資料處理速度要快於硬碟。一般這個值應該為網站中PHP指令碼所產生的頁面大小的中間值,如果網站大部分指令碼所產生的頁面大小為256KB,那麼可以把這個值設定為“16 16k”、“4 64k”等。

fastcgi_busy_buffers_size的預設值是fastcgi_buffers的兩倍。

fastcgi_temp_file_write_size表示在寫入快取檔案時使用多大的資料區塊,預設值是fastcgi_buffers的兩倍。

fastcgi_cache表示開啟FastCGI緩衝並為其指定一個名稱。開啟緩衝非常有用,可以有效降低CPU的負載,並且防止502錯誤的發生,但是開啟緩衝也會引起很多問題,要視具體情況而定。

fastcgi_cache_valid、fastcgi用來指定應答代碼的緩衝時間,執行個體中的值表示將200和302應答緩衝一個小時,將301應答緩衝1天,其他應答均緩衝1分鐘。


測試Nginx對PHP的解析功能


這裡在/usr/local/nginx/html目錄下建立一個phpinfo.php檔案,內容如下:

<?php phpinfo(); ?>

然後通過瀏覽器訪問http://ip/index.html,預設會在瀏覽器顯示“Welcome to Nginx!”表示Nginx正常運行。

接著在瀏覽器中訪問http://ip/phpinfo.php,如果PHP能夠正常解析,會出現PHP安裝配置以及功能列表統計資訊。


三.yum 安裝Mariadb資料庫

刪除全部MySQL/MariaDB相關的rpm包

MySQL 已經不再包含在 CentOS 7 的源中,而改用了 MariaDB;

1、使用rpm -qa | grep mariadb搜尋 MariaDB 現有的包:

如果存在,使用rpm -e --nodeps mariadb-*將全部刪除


2、使用rpm -qa | grep mysql搜尋 mysql現有的包:

如果存在,使用yum remove mysql mysql-server mysql-libs compat-mysql全部刪除;


我比較推薦使用系統內建的mariadb,所以直接yum安裝比較方便

3、yum安裝mariadb

# yum install -y mariadb mariadb-server

註:mariadb為資料庫用戶端,mariadb-server是資料庫伺服器端


4、命令啟動MariaDB 服務

# systemctl start mariadb


5、查看mariadb進程服務是否在跑

# ps -ef | grep mariadb

root     10131 10095  0 19:24 pts/2    00:00:00 grep --color=auto mariadb

mysql    10197 10009  0 Jan19 ?        15:56:01 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/lib/mysql/zgz.pid --socket=/var/lib/mysql/mysql.sock


6、查看數據庫狀態

#systemctl status mariadb


7、接著運行 mysql_secure_installation初始化配置MariaDB:

#mysql_secure_installation

在這個階段進入時root初始密碼為空白,所以斷行符號即可。我個人覺得可以選擇在這個時候修改設定資料庫root密碼,然後接下來的設定中,除了Disallow root login remotely 、Remove test database and accesss to it 可以為n,其他都是y


8、登入 MariaDB 並建立相應的資料庫使用者與資料庫

  (1)使用mysql -uroot -p登入,斷行符號之後會提示輸入密碼。

  (2)建立新使用者,CREATE USER ‘git‘@‘localhost‘ IDENTIFIED BY ‘$password‘;其中$password填寫自己設定的密碼。當然後面也可以修改;

  (3)設定儲存引擎  

    mariadb[none]> set storage_engine=INNODB;

  (4)建立資料庫

    mariadb[none]>create database database_name character set utf8;

  (5)設定使用者權限

   grant all privileges on *.* to ‘root‘@‘%‘ identified by ‘$password‘ with option;

   #上述可以定義為:root使用者可以從任何機器上遠端連線資料庫裡的所有內容且具備最高許可權,並且具有授予權他人遠端連線的許可權。


經過上述操作步驟,lnmp環境就算是基本搭建完畢。後面只需要把應用代碼放進Nginx的html內,並將應用與資料庫連接的設定檔設定完畢即可。

本文出自 “10793382” 部落格,請務必保留此出處http://10803382.blog.51cto.com/10793382/1925280

CentOS7.2 上 Nginx PHP Mariadb 環境搭建

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.