Linux 笔记

博客地址:http://www.moonxy.com

一、前言

LNMP 中的 N 指 Nginx,在静态页面的处理上,Nginx 较 Apache 更胜一筹;但在动态页面的处理上,Nginx 并不比 Apache 有优势,目前有很多爱好者对 Nginx 比较热衷。

二、安装 LNMP

LNMP 中 MySQL 的安装步骤和 LAMP 中的一样,前面的文章已经介绍,此处只讲解 PHP 和 Nginx 的安装。

2.1 安装 PHP

下载 PHP 的源码包 php-7.2.8.tar.gz 到 /usr/local/src 目录下,解压得到 php-7.2.8。

预编译

[root@ryan ~]# cd /usr/local/src/php-7.2.8
[root@ryan php-7.2.8]# useradd -s /sbin/nologin php-fpm
[root@ryan php-7.2.8]# ./configure --prefix=/usr/local/lnmp/php7 --with-config-file-path=/usr/local/lnmp/php7/etc --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --enable-soap --enable-ftp --enable-mbstring --enable-exif --disable-ipv6 --without-pear --with-curl --with-openssl
[root@ryan php-7.2.8]# echo $?
0

其实此处预编译参数中还应该添加上 --with-mysqli,表示添加 MySQL 模块支持,以前版本可以添加的 --with-mysql 参数在 PHP7 中已经过期失效。如果在预编译时没有添加参数 --with-mysqli,则需要按照下面的 2.2 所示的步骤来安装 mysqli 动态扩展 。

PHP7 相对与 PHP5 的最大变化之一是移除了mysql 扩展,推荐使用 mysqli 或者 pdo_mysql,实际上在 PHP5.5 开始,PHP 就着手开始准备弃用 mysql 扩展,如果你使用 mysql 扩展,可能看到过这样的提示 "Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in"。所以在以后的程序中,为了保持兼容性,要尽量减少使用 mysql 扩展用于数据库连接。

编译

[root@ryan php-7.2.8]# make
[root@ryan php-7.2.8]# echo $?
0

安装

[root@ryan php-7.2.8]# make install
[root@ryan php-7.2.8]# echo $?
0

修改配置文件

[root@ryan php-7.2.8]# cp php.ini-production /usr/local/lnmp/php7/etc/php.ini
[root@ryan php-7.2.8]# cp /usr/local/lnmp/php7/etc/php-fpm.conf.default /usr/local/lnmp/php7/etc/php-fpm.conf

将以下内容写入 php-fpm.conf 文件,如下:

[root@ryan php-7.2.8]# vim /usr/local/lnmp/php7/etc/php-fpm.conf
[global]
pid = /usr/local/lnmp/php7/var/run/php-fpm.pid
error_log = /usr/local/lnmp/php7/var/log/php-fpm.log
[www]
listen = 127.0.0.1:9000
listen.mode = 666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024

验证配置文件

[root@ryan php-7.2.8]# /usr/local/lnmp/php7/sbin/php-fpm -t
[12-Aug-2018 18:52:29] NOTICE: configuration file /usr/local/lnmp/php7/etc/php-fpm.conf test is successful

如果显示 "test is successful" 则说明配置没有问题;否则就要根据提示检查配置文件。

复制服务启动脚本

[root@ryan php-7.2.8]# cp /usr/local/src/php-7.2.8/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@ryan php-7.2.8]# chmod 755 /etc/init.d/php-fpm

启动 php-fpm 服务

[root@ryan php-7.2.8]# service php-fpm start
Starting php-fpm  done

查看进程

[root@ryan php-7.2.8]# ps aux |grep php-fpm
root      15607  0.0  0.3 106596  6112 ?        Ss   19:22   0:00 php-fpm: master process (/usr/local/lnmp/php7/etc/php-fpm.conf)                                                                   
php-fpm   15608  0.0  0.2 106596  5556 ?        S    19:22   0:00 php-fpm: pool www                                                                                                                 
php-fpm   15609  0.0  0.2 106596  5560 ?        S    19:22   0:00 php-fpm: pool www                                                                                                                 
php-fpm   15610  0.0  0.2 106596  5560 ?        S    19:22   0:00 php-fpm: pool www                                                                                                                 
php-fpm   15611  0.0  0.2 106596  5564 ?        S    19:22   0:00 php-fpm: pool www                                                                                                                 
php-fpm   15612  0.0  0.2 106596  5564 ?        S    19:22   0:00 php-fpm: pool www                                                                                                                 
php-fpm   15613  0.0  0.2 106596  5564 ?        S    19:22   0:00 php-fpm: pool www                                                                                                                 
php-fpm   15614  0.0  0.2 106596  5564 ?        S    19:22   0:00 php-fpm: pool www                                                                                                                 
php-fpm   15615  0.0  0.2 106596  5564 ?        S    19:22   0:00 php-fpm: pool www                                                                                                                 
php-fpm   15616  0.0  0.2 106596  5564 ?        S    19:22   0:00 php-fpm: pool www                                                                                                                 
php-fpm   15617  0.0  0.2 106596  5564 ?        S    19:22   0:00 php-fpm: pool www                                                                                                                 
php-fpm   15618  0.0  0.2 106596  5568 ?        S    19:22   0:00 php-fpm: pool www                                                                                                                 
php-fpm   15619  0.0  0.2 106596  5564 ?        S    19:22   0:00 php-fpm: pool www                                                                                                                 
php-fpm   15620  0.0  0.2 106596  5564 ?        S    19:22   0:00 php-fpm: pool www                                                                                                                 
php-fpm   15621  0.0  0.2 106596  5564 ?        S    19:22   0:00 php-fpm: pool www                                                                                                                 
php-fpm   15622  0.0  0.2 106596  5564 ?        S    19:22   0:00 php-fpm: pool www                                                                                                                 
php-fpm   15623  0.0  0.2 106596  5560 ?        S    19:22   0:00 php-fpm: pool www                                                                                                                 
php-fpm   15624  0.0  0.2 106596  5560 ?        S    19:22   0:00 php-fpm: pool www                                                                                                                 
php-fpm   15625  0.0  0.2 106596  5568 ?        S    19:22   0:00 php-fpm: pool www                                                                                                                 
php-fpm   15626  0.0  0.2 106596  5564 ?        S    19:22   0:00 php-fpm: pool www                                                                                                                 
php-fpm   15627  0.0  0.2 106596  5564 ?        S    19:22   0:00 php-fpm: pool www                                                                                                                 
root      15629  0.0  0.0 103312   880 pts/0    S+   19:22   0:00 grep php-fpm

可以看到启动了很多进程,大约有二十多个。

也可以使用 php-fpm -m 查看模块和 php-fpm -i 查看phpinfo,如下:

[root@ryan conf]# /usr/local/lnmp/php7/sbin/php-fpm -m
[PHP Modules]
cgi-fcgi
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gd
hash
iconv
json
libxml
mbstring
openssl
pcre
PDO
pdo_sqlite
Phar
posix
Reflection
session
SimpleXML
soap
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zlib

[Zend Modules]

[root@ryan conf]# /usr/local/lnmp/php7/sbin/php-fpm -i
phpinfo()
PHP Version => 7.2.8

System => Linux ryan 2.6.32-642.el6.x86_64 #1 SMP Tue May 10 17:27:01 UTC 2016 x86_64
Build Date => Aug 12 2018 15:24:13
Configure Command =>  './configure'  '--prefix=/usr/local/lnmp/php7' '--with-config-file-path=/usr/local/lnmp/php7/etc' '--enable-fpm' '--with-fpm-user=php-fpm' '--with-fpm-group=php-fpm' '--with-libxml-dir' '--with-gd' '--with-jpeg-dir' '--with-png-dir' '--with-freetype-dir' '--with-iconv-dir' '--with-zlib-dir' '--enable-soap' '--enable-ftp' '--enable-mbstring' '--enable-exif' '--disable-ipv6' '--without-pear' '--with-curl' '--with-openssl'
Server API => FPM/FastCGI
Virtual Directory Support => disabled
Configuration File (php.ini) Path => /usr/local/lnmp/php7/etc
Loaded Configuration File => /usr/local/lnmp/php7/etc/php.ini
Scan this dir for additional .ini files => (none)
Additional .ini files parsed => (none)
PHP API => 20170718
PHP Extension => 20170718
Zend Extension => 320170718
Zend Extension Build => API320170718,NTS
PHP Extension Build => API20170718,NTS
Debug Build => no
Thread Safety => disabled
Zend Signal Handling => enabled
Zend Memory Manager => enabled
Zend Multibyte Support => provided by mbstring
IPv6 Support => disabled
DTrace Support => disabled
……

2.2 PHP 动态扩展模块安装

由于在上面安装 PHP 的时候,没有安装 MySQL 的支持模块 mysqli,这会导致后面访问系统时,有可能出现如下错误提示:Oops!System file lost class/class_mysqli.php

所以此处讲解如何给已经安装完成的 PHP 安装动态扩展模块。

进入 PHP 扩展模块目录:/usr/local/src/php-7.2.8/ext

[root@ryan ~]# cd /usr/local/src/php-7.2.8/ext
[root@ryan ext]# ll
total 320
drwxrwxr-x  4 root root  4096 Jul 17 13:35 bcmath
drwxrwxr-x  3 root root  4096 Jul 17 13:35 bz2
drwxrwxr-x  3 root root  4096 Jul 17 13:35 calendar
drwxrwxr-x  3 root root  4096 Jul 17 13:35 com_dotnet
drwxrwxr-x  4 root root  4096 Aug 12 15:21 ctype
drwxrwxr-x  4 root root  4096 Aug 12 15:21 curl
drwxrwxr-x  5 root root  4096 Aug 12 15:19 date
drwxrwxr-x  6 root root  4096 Jul 17 13:35 dba
drwxrwxr-x  5 root root  4096 Aug 12 15:21 dom
drwxrwxr-x  4 root root  4096 Jul 17 13:35 enchant
drwxrwxr-x  4 root root  4096 Aug 12 15:21 exif
-rwxrwxr-x  1 root root  9432 Jul 17 13:35 ext_skel
-rw-rw-r--  1 root root  1169 Jul 17 13:35 ext_skel_win32.php
drwxrwxr-x  5 root root  4096 Aug 12 15:21 fileinfo
drwxrwxr-x  5 root root  4096 Aug 12 15:21 filter
drwxrwxr-x  4 root root  4096 Aug 12 15:21 ftp
drwxrwxr-x  5 root root  4096 Aug 12 15:21 gd
drwxrwxr-x  3 root root  4096 Jul 17 13:35 gettext
drwxrwxr-x  3 root root  4096 Jul 17 13:35 gmp
drwxrwxr-x  5 root root  4096 Aug 12 15:22 hash
drwxrwxr-x  4 root root  4096 Aug 12 15:22 iconv
drwxrwxr-x  3 root root  4096 Jul 17 13:35 imap
drwxrwxr-x  3 root root  4096 Jul 17 13:35 interbase
drwxrwxr-x 21 root root  4096 Jul 17 13:35 intl
drwxrwxr-x  4 root root  4096 Aug 12 15:22 json
drwxrwxr-x  3 root root  4096 Jul 17 13:35 ldap
drwxrwxr-x  4 root root  4096 Aug 12 15:19 libxml
drwxrwxr-x  7 root root  4096 Aug 12 15:23 mbstring
drwxrwxr-x  3 root root  4096 Jul 17 13:35 mysqli
drwxrwxr-x  2 root root  4096 Jul 17 13:35 mysqlnd
drwxrwxr-x  3 root root  4096 Jul 17 13:35 oci8
drwxrwxr-x  3 root root  4096 Jul 17 13:35 odbc
drwxrwxr-x  5 root root  4096 Aug 12 15:19 opcache
drwxrwxr-x  4 root root  4096 Aug 12 15:19 openssl
drwxrwxr-x  3 root root  4096 Jul 17 13:35 pcntl
drwxrwxr-x  5 root root  4096 Aug 12 15:20 pcre
drwxrwxr-x  4 root root  4096 Aug 12 15:23 pdo
drwxrwxr-x  3 root root  4096 Jul 17 13:35 pdo_dblib
drwxrwxr-x  3 root root  4096 Jul 17 13:35 pdo_firebird
drwxrwxr-x  3 root root  4096 Jul 17 13:35 pdo_mysql
drwxrwxr-x  3 root root  4096 Jul 17 13:35 pdo_oci
drwxrwxr-x  3 root root  4096 Jul 17 13:35 pdo_odbc
drwxrwxr-x  3 root root  4096 Jul 17 13:35 pdo_pgsql
drwxrwxr-x  4 root root  4096 Aug 12 15:23 pdo_sqlite
drwxrwxr-x  3 root root  4096 Jul 17 13:35 pgsql
drwxrwxr-x  5 root root  4096 Aug 12 15:26 phar
drwxrwxr-x  4 root root  4096 Aug 12 15:23 posix
drwxrwxr-x  3 root root  4096 Jul 17 13:35 pspell
drwxrwxr-x  3 root root  4096 Jul 17 13:35 readline
drwxrwxr-x  3 root root  4096 Jul 17 13:35 recode
drwxrwxr-x  4 root root  4096 Aug 12 15:23 reflection
drwxrwxr-x  4 root root  4096 Aug 12 15:23 session
drwxrwxr-x  3 root root  4096 Jul 17 13:35 shmop
drwxrwxr-x  5 root root  4096 Aug 12 15:23 simplexml
drwxrwxr-x  3 root root  4096 Jul 17 13:35 skeleton
drwxrwxr-x  3 root root  4096 Jul 17 13:35 snmp
drwxrwxr-x  5 root root  4096 Aug 12 15:23 soap
drwxrwxr-x  3 root root  4096 Jul 17 13:35 sockets
drwxrwxr-x  3 root root  4096 Jul 17 13:35 sodium
drwxrwxr-x  6 root root  4096 Aug 12 15:23 spl
drwxrwxr-x  5 root root  4096 Aug 12 15:20 sqlite3
drwxrwxr-x  5 root root 12288 Aug 12 15:24 standard
drwxrwxr-x  3 root root  4096 Jul 17 13:35 sysvmsg
drwxrwxr-x  3 root root  4096 Jul 17 13:35 sysvsem
drwxrwxr-x  3 root root  4096 Jul 17 13:35 sysvshm
drwxrwxr-x  4 root root  4096 Jul 17 13:35 tidy
drwxrwxr-x  4 root root  4096 Aug 12 15:24 tokenizer
drwxrwxr-x  3 root root  4096 Jul 17 13:35 wddx
drwxrwxr-x  4 root root  4096 Aug 12 15:24 xml
drwxrwxr-x  5 root root  4096 Aug 12 15:24 xmlreader
drwxrwxr-x  4 root root  4096 Jul 17 13:35 xmlrpc
drwxrwxr-x  5 root root  4096 Aug 12 15:24 xmlwriter
drwxrwxr-x  3 root root  4096 Jul 17 13:35 xsl
drwxrwxr-x  2 root root  4096 Jul 17 13:35 zend_test
drwxrwxr-x  5 root root  4096 Jul 17 13:35 zip
drwxrwxr-x  4 root root  4096 Aug 12 15:21 zlib
[root@ryan ext]# cd mysqli
[root@ryan mysqli]# ll
total 344
-rw-rw-r-- 1 root root  4597 Jul 17 13:35 config.m4
-rw-rw-r-- 1 root root  1619 Jul 17 13:35 config.w32
-rw-rw-r-- 1 root root    61 Jul 17 13:35 CREDITS
-rw-rw-r-- 1 root root 76537 Jul 17 13:35 mysqli_api.c
-rw-rw-r-- 1 root root 50510 Jul 17 13:35 mysqli.c
-rw-rw-r-- 1 root root  5012 Jul 17 13:35 mysqli_driver.c
-rw-rw-r-- 1 root root  3443 Jul 17 13:35 mysqli_embedded.c
-rw-rw-r-- 1 root root  2654 Jul 17 13:35 mysqli_exception.c
-rw-rw-r-- 1 root root 25883 Jul 17 13:35 mysqli_fe.c
-rw-rw-r-- 1 root root  5334 Jul 17 13:35 mysqli_fe.h
-rw-rw-r-- 1 root root  6571 Jul 17 13:35 mysqli_libmysql.h
-rw-rw-r-- 1 root root  2620 Jul 17 13:35 mysqli_mysqlnd.h
-rw-rw-r-- 1 root root 36916 Jul 17 13:35 mysqli_nonapi.c
-rw-rw-r-- 1 root root  5649 Jul 17 13:35 mysqli_priv.h
-rw-rw-r-- 1 root root 16317 Jul 17 13:35 mysqli_prop.c
-rw-rw-r-- 1 root root  2455 Jul 17 13:35 mysqli_report.c
-rw-rw-r-- 1 root root  5115 Jul 17 13:35 mysqli_result_iterator.c
-rw-rw-r-- 1 root root  8587 Jul 17 13:35 mysqli_warning.c
-rw-rw-r-- 1 root root  4368 Jul 17 13:35 package.xml
-rw-rw-r-- 1 root root  1678 Jul 17 13:35 php_mysqli.h
-rw-rw-r-- 1 root root  9987 Jul 17 13:35 php_mysqli_structs.h
drwxrwxr-x 2 root root 20480 Jul 17 13:35 tests
-rw-rw-r-- 1 root root    31 Jul 17 13:35 TODO

进入你要安装的模块目录,执行命令:/usr/local/lnmp/php7/bin/phpize,如下

[root@ryan mysqli]# /usr/local/lnmp/php7/bin/phpize
Configuring for:
PHP Api Version:         20170718
Zend Module Api No:      20170718
Zend Extension Api No:   320170718
[root@ryan mysqli]# ll
total 1588
-rw-r--r-- 1 root root  85825 Aug 12 23:07 acinclude.m4
-rw-r--r-- 1 root root 316202 Aug 12 23:07 aclocal.m4
drwxr-xr-x 2 root root   4096 Aug 12 23:07 autom4te.cache
drwxr-xr-x 2 root root   4096 Aug 12 23:07 build
-rwxr-xr-x 1 root root  42938 Aug 12 23:07 config.guess
-rw-r--r-- 1 root root   1764 Aug 12 23:07 config.h.in
-rw-rw-r-- 1 root root   4597 Jul 17 13:35 config.m4
-rwxr-xr-x 1 root root  35967 Aug 12 23:07 config.sub
-rwxr-xr-x 1 root root 467868 Aug 12 23:07 configure
-rw-r--r-- 1 root root   4698 Aug 12 23:07 configure.ac
-rw-rw-r-- 1 root root   1619 Jul 17 13:35 config.w32
-rw-rw-r-- 1 root root     61 Jul 17 13:35 CREDITS
-rw-r--r-- 1 root root      0 Aug 12 23:07 install-sh
-rw-r--r-- 1 root root 199728 Aug 12 23:07 ltmain.sh
-rw-r--r-- 1 root root   7135 Aug 12 23:07 Makefile.global
-rw-r--r-- 1 root root      0 Aug 12 23:07 missing
-rw-r--r-- 1 root root      0 Aug 12 23:07 mkinstalldirs
-rw-rw-r-- 1 root root  76537 Jul 17 13:35 mysqli_api.c
-rw-rw-r-- 1 root root  50510 Jul 17 13:35 mysqli.c
-rw-rw-r-- 1 root root   5012 Jul 17 13:35 mysqli_driver.c
-rw-rw-r-- 1 root root   3443 Jul 17 13:35 mysqli_embedded.c
-rw-rw-r-- 1 root root   2654 Jul 17 13:35 mysqli_exception.c
-rw-rw-r-- 1 root root  25883 Jul 17 13:35 mysqli_fe.c
-rw-rw-r-- 1 root root   5334 Jul 17 13:35 mysqli_fe.h
-rw-rw-r-- 1 root root   6571 Jul 17 13:35 mysqli_libmysql.h
-rw-rw-r-- 1 root root   2620 Jul 17 13:35 mysqli_mysqlnd.h
-rw-rw-r-- 1 root root  36916 Jul 17 13:35 mysqli_nonapi.c
-rw-rw-r-- 1 root root   5649 Jul 17 13:35 mysqli_priv.h
-rw-rw-r-- 1 root root  16317 Jul 17 13:35 mysqli_prop.c
-rw-rw-r-- 1 root root   2455 Jul 17 13:35 mysqli_report.c
-rw-rw-r-- 1 root root   5115 Jul 17 13:35 mysqli_result_iterator.c
-rw-rw-r-- 1 root root   8587 Jul 17 13:35 mysqli_warning.c
-rw-rw-r-- 1 root root   4368 Jul 17 13:35 package.xml
-rw-rw-r-- 1 root root   1678 Jul 17 13:35 php_mysqli.h
-rw-rw-r-- 1 root root   9987 Jul 17 13:35 php_mysqli_structs.h
-rw-r--r-- 1 root root  85732 Aug 12 23:07 run-tests.php
drwxrwxr-x 2 root root  20480 Jul 17 13:35 tests
-rw-rw-r-- 1 root root     31 Jul 17 13:35 TODO

发现会多创建出来一些文件。

在预编译之前先将 mysqlnd 扩展复制到 mysqli 目录下,因为 mysqli 需要依赖 mysqlnd,如下:

[root@ryan mysqli]# mkdir ext
[root@ryan mysqli]# cd ../
[root@ryan ext]# cp -r mysqlnd mysqli/ext
[root@ryan ext]# cd mysqli

预编译

[root@ryan mysqli]# ./configure --with-php-config=/usr/local/lnmp/php7/bin/php-config --with-mysqli=/usr/local/mysql/bin/mysql_config
[root@ryan mysqli]# echo $?
0

在此安装中,--with-php-config=/usr/local/lnmp/php7/bin/php-config 参数是固定的。可以 find 来搜索使用 php-config 和 mysql_config。

编译

[root@ryan mysqli]# make
[root@ryan mysqli]# echo $?
0

安装

[root@ryan mysqli]# make install
……
----------------------------------------------------------------------
Installing shared extensions:     /usr/local/lnmp/php7/lib/php/extensions/no-debug-non-zts-20170718/
Installing header files:          /usr/local/lnmp/php7/include/php/
[root@ryan mysqli]# echo $?
0

查看动态模块文件

[root@ryan mysqli]# ll /usr/local/lnmp/php7/lib/php/extensions/no-debug-non-zts-20170718/
total 6252
-rwxr-xr-x 1 root root  749614 Aug 12 23:43 mysqli.so
-rwxr-xr-x 1 root root 3565484 Aug 12 15:29 opcache.a
-rwxr-xr-x 1 root root 2078551 Aug 12 15:29 opcache.so

可以看到已经生成 mysqli.so 模块文件,此目录为 PHP 的动态扩展模块目录,这与查看phpinfo中动态扩展模块得到的目录一致,如下:

[root@ryan mysqli]# /usr/local/lnmp/php7/bin/php -i |grep -i extension_dir
extension_dir => /usr/local/lnmp/php7/lib/php/extensions/no-debug-non-zts-20170718 => /usr/local/lnmp/php7/lib/php/extensions/no-debug-non-zts-20170718
sqlite3.extension_dir => no value => no value

添加扩展的模块

[root@ryan mysqli]# vim /usr/local/lnmp/php7/etc/php.ini
extension=mysqli.so

php.ini 里面的分号;是注释符。

查看 PHP 加载的模块

[root@ryan mysqli]# /usr/local/lnmp/php7/sbin/php-fpm -m
[PHP Modules]
cgi-fcgi
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gd
hash
iconv
json
libxml
mbstring
mysqli
openssl
pcre
PDO
pdo_sqlite
Phar
posix
Reflection
session
SimpleXML
soap
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zlib

[Zend Modules]

发现 mysqli 动态扩展模块已经添加完成。只要是使用 extension 手动添加的模块,均属于动态(shared)扩展模块,否则即为静态(static)模块。

2.3 安装 Nginx

访问 Nginx 官方网站:http://nginx.org,可以发现其更新速度很快,此处我们选择下载当前最新文档版,stable 1.14.0,如下:

下载和解压 Nginx

[root@ryan php-7.2.8]# cd /usr/local/src
[root@ryan src]# wget http://nginx.org/download/nginx-1.14.0.tar.gz
[root@ryan src]# tar zxvf nginx-1.14.0.tar.gz

预编译

[root@ryan src]# cd nginx-1.14.0
[root@ryan nginx-1.14.0]# ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module
[root@ryan nginx-1.14.0]# echo $?
0

编译

[root@ryan nginx-1.14.0]# make
[root@ryan nginx-1.14.0]# echo $?
0

安装

[root@ryan nginx-1.14.0]# make install
[root@ryan nginx-1.14.0]# echo $?
0

启动 Nginx

[root@ryan nginx-1.14.0]# ll /usr/local/lnmp/nginx/sbin
total 5864
-rwxr-xr-x 1 root root 6000765 Aug 12 20:06 nginx
[root@ryan nginx-1.14.0]# /usr/local/lnmp/nginx/sbin/nginx
[root@ryan nginx-1.14.0]# ps aux |grep nginx
root      18259  0.0  0.0  46856  1192 ?        Ss   20:15   0:00 nginx: master process /usr/local/lnmp/nginx/sbin/nginx
nobody    18260  0.0  0.0  47288  1772 ?        S    20:15   0:00 nginx: worker process
root      18262  0.0  0.0 103308   876 pts/0    S+   20:15   0:00 grep nginx

看到 Nginx 默认使用系统自带的 nobody 用户。

配置解析 php

找到 /usr/local/lnmp/nginx/conf/nginx.conf,将如下内容前面的 # 删掉,如下:

[root@ryan nginx-1.14.0]# cd /usr/local/lnmp/nginx/conf
[root@ryan conf]# vim /usr/local/lnmp/nginx/conf/nginx.conf
location ~ .php$ {
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    include        fastcgi_params;
}

并将其修改为:

location ~ .php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME   /data/www/DiscuzX$fastcgi_script_name;
    include        fastcgi_params;
}

将 root 网站根目录 /data/www/DiscuzX; 放在上层,作为全局配置,并将 location / 中的 root he error_page 中的 root 注释掉。

验证 nginx 配置文件

[root@ryan conf]# /usr/local/lnmp/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/lnmp/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/lnmp/nginx/conf/nginx.conf test is successful

启动 Nginx 的命令

[root@ryan mysqli]# /usr/local/lnmp/nginx/sbin/nginx

重新加载

[root@ryan conf]# /usr/local/lnmp/nginx/sbin/nginx -s reload

测试是否正常解析

添加 index.php 到 index 索引页后,访问如下:

综上:

php 的配置文件为:/usr/local/lnmp/php7/etc/php.ini

php-fpm 的配置文件为:/usr/local/lnmp/php7/etc/php-fpm.conf

启动 MySQL 的命令:

# service mysqld start

启动 php-fpm 的命令:

# service php-fpm start

启动 nginx 的命令:

# /usr/local/lnmp/nginx/sbin/nginx

停止 nginx 的命令:

# /usr/local/lnmp/nginx/sbin/nginx -s stop

重新加载 nginx 配置文件的命令:

# /usr/local/lnmp/nginx/sbin/nginx -s reload

其中 -s signal:给一个 nginx 主进程发送信号:stop(停止), quit(退出), reopen(重启), reload(重新加载配置文件)

ldd命令用于打印程序或者库文件所依赖的共享库列表。如下:

[root@ryan ~]# which ls
alias ls='ls --color=auto'
        /bin/ls
[root@ryan ~]# ldd /bin/ls
        linux-vdso.so.1 =>  (0x00007ffc292e1000)
        libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f5b47388000)
        librt.so.1 => /lib64/librt.so.1 (0x00007f5b47180000)
        libcap.so.2 => /lib64/libcap.so.2 (0x00007f5b46f7b000)
        libacl.so.1 => /lib64/libacl.so.1 (0x00007f5b46d73000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f5b469df000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f5b467da000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f5b475b3000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f5b465bd000)
        libattr.so.1 => /lib64/libattr.so.1 (0x00007f5b463b8000)

注意:在 ldd 命令打印的结果中,"=>"左边的表示该程序需要连接的共享库之 so 名称,右边表示由 Linux 的共享库系统找到的对应的共享库在文件系统中的具体位置。默认情况下,/etc/ld.so.conf 文件中包含有默认的共享库搜索路径。

附录

LNMP架构的搭建(Linux+Nginx+MySQL+PHP源码安装 )+Discuz论坛的搭建

centos php7 安装mysqli扩展心得:https://www.cnblogs.com/fengxuezhiyi/p/6896702.html

LNMP 一键安装包:https://lnmp.org/install.html

php-fpm 启动后没有监听端口9000:https://blog.csdn.net/bujidexinq/article/details/70209625

nginx命令详解:https://www.cnblogs.com/linux-centos/p/5790506.html

linux下php添加mysqli扩展mysqli_api.lo错误:https://jingyan.baidu.com/article/a3f121e4cb684afc9152bb73.html

Linux下 config/configure/Configure、make 、make test/make check、sudo make install 的作用

linux系统命令make.clean的用法讲解

原文地址:https://www.cnblogs.com/cnjavahome/p/9463174.html