Nginx架构篇(二);企业级LNMP环境应用实践(一体化及其分离式部署、分离式部署实现动静分离、负载均衡)

一、安装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源码包

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。便于我们识别。

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 \
--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-pdo-mysql=/usr/local/mysql/ --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、测试页面
在这里插入图片描述

发布了162 篇原创文章 · 获赞 142 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_44571270/article/details/103223557