文章目录
一、安装Nginx、MySQL
Nginx安装教程:https://blog.csdn.net/weixin_44571270/article/details/102887048
MySQL安装教程:https://blog.csdn.net/weixin_44571270/article/details/103074808
二、安装php
1、安装相关依赖包
yum install gd curl-devel libjpeg-devel libpng-devel freetype-devel libxml2-devel mysql-devel libxslt-devel gcc-c++ -y
2、安装相关依赖库
(1)libiconv库
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
[root@mysql-server phptools]# cd libiconv-1.14
[root@mysql-server libiconv-1.14]# ./configure --prefix=/usr/local/libiconv
[root@mysql-server libiconv-1.14]# make&&make install
make时报错:
错误解决:
[root@proxy-server libiconv-1.14]#vim srclib/stdio.in.h
注释掉即可:
//_GL_WARN_ON_USE (gets, “gets is a security hole - use fgets instead”);
(2)libmcrypt库
下载第三方yum源:
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
[root@mysql-server ~]# yum install libmcrypt-devel -y
(3)mhash库
[root@mysql-server ~]# yum install mhash -y
(4)mcrypt库
[root@mysql-server ~]# yum install mcrypt -y
3、获取php源码包
#php7版本:
wget -O php-7.1.19.tar.gz http://cn2.php.net/get/php-7.1.19.tar.gz/from/this/mirror
#因为从php官网下载下来的php源码包不叫php,叫mirror。所以我们用-O相当于改名。将mirror改为php-7.1.19.tar.gz。便于我们识别。
#php5.5.0以后的版本就不支持mysqli_connect函数了,所以我们只能使用php5.4版本:
wget http://cn2.php.net/distributions/php-5.4.44.tar.gz
4、将源码包移到自己常用目录下
mv php-7.1.19.tar.gz /usr/local/
5、解压php
tar xvf php-7.1.19.tar.gz
6、预编译
[root@mysql-server ~]# cd /usr/local/php-7.1.19
[root@mysql-server ~]# ./configure \
--prefix=/usr/local/php \
--with-mysqli \
--with-mysql \
--with-iconv-dir=/usr/local/libiconv \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--enable-mbregex \
--enable-fpm \
--enable-mbstring \
--with-mcrypt \
--with-gd \
--enable-gd-native-ttf \
--with-openssl \ //如果安装php5版本不要指定这个参数,不然编译会报错!除非你openssl的版本是老版本的,不是新版本1.1.1!php5不支持openssl1.1.1
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--enable-short-tags \
--enable-static \
--with-xsl \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-ftp
若上述报错:
configure: error: off_t undefined; check your library configuration
则预编译使用以下参数:
./configure --prefix=/usr/local/php --enable-fpm --enable-debug --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --enable-mbstring --with-curl --with-mysql --with-mysqli --disable-fileinfo
7、编译、安装
[root@mysql-server ~]# make&&make install
8、好好分析一下下面三个cp在干什么?
\cp /usr/local/php-7.1.19/php.ini-development /usr/local/php/lib/php.ini
\cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
\cp /usr/local/php-7.1.19/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
9、加入系统服务和自启动
chmod 755 /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig php-fpm on
10、添加用户、修改部分文件内容
添加用户:
useradd -s /sbin/nologin -g www -M www
修改配置文件:
vim /usr/local/php/etc/php-fpm.conf
***注:***只有把上面这个注释去掉,php-fpm每次启动,才会在/usr/local/php/var/run/下生成一个进程文件
修改www.conf.default文件:
cd /usr/local/php/etc/php-fpm.d/
cp www.conf.default www.conf //这一步必须要做,不然就会出现下面的php报错,原因见下面。
vim www.conf
11、启动php-fpm
systemctl start php-fpm
若不能启动,请自行查看详细错误:
systemctl status php-fpm.service -l
三、启动php报错
1、错误如下:
[root@mysql-server php]# systemctl start php-fpm
[24-Nov-2019 13:05:31] WARNING:Nothing matches the include pattern '/usr/local/php/etc/php-fpm.d/*.conf'from /usr/local/php/etc/php-fpm.conf at line 125.
[24-Nov-2019 13:05:31] ERROR: No pool defined. at least one pool section must be specified in config file
[24-Nov-2019 13:05:31] ERROR: failed to post process the configuration
[24-Nov-2019 13:05:31] ERROR: FPM initialization failed
2、错误分析:
注意这句话:
WARNING:Nothing matches the include pattern '/usr/local/php/etc/php-fpm.d/.conf
大致意思是:没有找到这个路径下匹配.conf的文件。
我们进入这个路径下看下:
我们可以看出来确实没有以.conf结尾的文件。
3、解决方法:
[root@mysql-server php]# cd /usr/local/php/etc/php-fpm.d/
[root@mysql-server php-fpm.d]# cp www.conf.default www.conf
[root@mysql-server php-fpm.d]# /usr/local/php/sbin/php-fpm -t
[24-Nov-2019 13:10:23] NOTICE: configuration file /usr/local/php/etc/php-fpm.conf test is successful
[root@mysql-server php]# systemctl start php-fpm //再次启动php就好了。
//也可以使用启动文件进行启动:/usr/local/php/sbin/php-fpm
四、LNMP分离式部署(重点)
架构思路图:
注意:
1、静态文件放在/usr/local/nginx/html/下,.php文件放在php服务器中。
2、每次修改了php的配置都需要重启php,下面不再将重启步骤加入。
【一】先实现动态页面可访问,不与数据库交互
1、首先确认你所有mysql、php、nginx可用,能启动。
2、编辑nginx主配置文件
user www;//这里的用户需要和php的www.conf中的用户一致
worker_processes 1;
events {
worker_connections 1024;
}
http {
include /usr/local/nginx/conf/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root /usr/local/nginx/html;
}
location ~.*\.php$ {
root /var/www; //指定.php文件在后端php服务器的位置
fastcgi_pass 172.16.193.189:9000;
fastcgi_index index.php; //指定默认首页
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
3、编辑www.conf文件
注意:不能写成listen = 127.0.0.1:9000,一体化部署可以这样写,分离式部署必须写本机ip
注意:这条参数是允许连接到php的主机,要么注释掉,全部允许,要么注释去掉后面添加nginx主机的ip
4、编辑php服务器上的/var/www/mysql.php文件
5、关掉两个服务器的防火墙、SElinux,在物理机上访问nginx服务器
【二】再实现php与数据库的连接交互
1、在php服务器上编辑/var/www/mysql.php
2、数据库上授权php访问
mysql> grant all on *.* to 'admin'@'172.16.193.%' identified by "123456";
3、物理机访问测试
出现错误:
错误分析:mysqli这个类在php的语法中没有被找到,所以我们需要安装扩展mysqli。
4、安装扩展mysqli,php连接数据库语法支持
(1)找到mysqli这个目录
[root@proxy_server ~]# cd /usr/local/php-7.1.19/ext/mysqli/
(2)在mysqli目录下执行以下命令
/usr/local/php/bin/phpize //生成configure文件
./configure --with-php-config=/usr/local/php/bin/php-config --with-mysqli=/usr/bin/mysql_config
make&&make install
编译这一步可能会报错:
/usr/local/php-7.1.19/ext/mysqli/mysqli_api.c:36:47: 致命错误:ext/mysqlnd/mysql_float_to_double.h:没有那个文件或目录
#include “ext/mysqlnd/mysql_float_to_double.h”
错误解决方案:
cd /usr/local/php-7.1.19/ext/mysqli
vim mysqli_api.c
把第36行的
#include "ext/mysqlnd/mysql_float_to_double.h"
修改为
#include "/usr/local/php-7.1.19/ext/mysqlnd/mysql_float_to_double.h"
(3)找到mysqli.so这个文件
注:上面红线部分就是mysqli.so这个文件的位置所在。
(4)我们需要把这个文件复制到php下的ext目录
[root@proxy_server php]# mkdir ext
[root@proxy_server php]# cp /usr/local/php/lib/php/extensions/debug-non-zts-20160303/mysqli.so /usr/local/php/ext/
(5)编辑php.ini文件,并修改配置
[root@proxy_server php]# vim lib/php.ini
5、物理机测试访问
动态页面:
静态页面:
【三】LNMP实现负载均衡
上述只是单体架构,还可以负载均衡实现高并发,减压,nginx配置文件如下:
注:只不过这样后端的所有php服务器都要做配置。
五、LNMP一体化部署
在一台Linux服务器上配置nginx、php、mysql。
这台服务器的ip地址为:172.16.193.203
由于分离式部署和一体化部署大同小异,在此只讲配置不同的地方。搞清楚原理自然看的懂。
1、nginx配置文件如下:
user www;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include /usr/local/nginx/conf/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root /usr/local/nginx/html;
}
location =/index.php {
root /var/www;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
2、编辑www.conf
注:其他都一样。
3、测试页面