LNMP的实现
LNMP简介
- nginx实现动静分离:php程序交给后端服务器处理
- PHP程序一般用于公司官网主页的实现
- nginx基于请求的uri中,请求资源后缀名为.php的资源,将通过fastcgi协议交给php-fpm程序处理php请求。
- nginx在作为反向代理服务器时,所events中所定义单个工作进程的最大连接数需要/2,因为nginx需要和用户保持一个连接又需要和php-fpm程序保持一个连接
- nginx+php有两种实现方式:
①nginx和php搭建在一台主机上
②nginx和php搭建在各自的服务器上
③结构示意图如下所示:
- 一般使用将nginx和php搭建在同一主机
因此此处实现lnmp时,也是将nginx和php-fpm搭建在同一主机(因为以WordPress为例)。由于WordPress将静态程序和php程序文件放置在一起的,当使用nginx和php放置在不同主机时,需要将WordPress程序文件各自在nginx服务器和php服务器各存放一份。
实验规划:
-
OS:centos7.6
-
hostA nginx+php-fpm :LNP
ip:192.168.38.17 -
hostB mariadb:M
ip:192.168.38.88 -
搭建好LNMP之后,实现WordPress
nginx的源码安装
1.编译安装步骤:
- ①获取源码、解压缩、查编译的配置选项帮助
[root@nginx ~]# cd /usr/local/src/ 源码放置路径
[root@nginx src]# wget http://nginx.org/download/nginx-1.16.1.tar.gz
[root@nginx src]# tar xf nginx-1.16.1.tar.gz
[root@nginx src]# cd nginx-1.16.1/
[root@nginx nginx-1.16.1]# ./configure --help
- ②configure
==>检查编译环境
==>生成Makefile文件
编译前需要准备编译环境
[root@nginx nginx-1.16.1]# yum install gcc openssl-devel pcre-devel
[root@nginx nginx-1.16.1]#./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module
-
③make
==>根据Makefile生成指定模块 -
④make install
==>copy 模块到指定目录 -
⑤创建Nginx用户
==>上面编译时指定了Nginx用户,但是并不会自动创建
[root@nginx nginx-1.16.1]# useradd nginx -s /sbin/nologin -u 2000
[root@nginx nginx-1.16.1]# id nginx
uid=2000(nginx) gid=2000(nginx) groups=2000(nginx)
- ⑥修改配置文件
[root@nginx ~]# vim /apps/nginx/conf/nginx.conf
user nginx;将启动账户改为nginx
- ⑦启动
[root@nginx ~]# /apps/nginx/sbin/nginx
注:为方便后续,将/apps/nginx/sbin/(nginx编译安装的二进制程序路径)加入PATH环境中
[root@nginx ~]# cp /apps/nginx/sbin/nginx /usr/local/bin/
[root@nginx ~]# echo 'PATH=/apps/nginx/sbin/:$PATH' > /etc/profile.d/nginx.sh
fpm-php的源码安装
1.提供编译安装环境
- #yum install -y libxml2-devel bzip2-devel libmcrypt-devel (epel)
2.解压缩
# tar xf php-7.3.10.tar.xz
3.切换目录
# cd php-7.3.10/
4.configure
- #./configure --prefix=/apps/php --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-openssl --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --enable-mbstring --enable-xml --enable-sockets --enable-fpm --enable-maintainer-zts --disable-fileinfo
5.make && make install
- #make && make install
6.复制php主配置文件 /etc/php.ini
- #cd /data/php-7.3.10 这是在源码解压缩安装完成以后的php解压目录中
- #cp php.ini-production /etc/php.ini
7.复制服务启动的service文件
- #cd /data/php-7.3.10
- #cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/
8.复制php-fpm.conf文件
- #cd /apps/php/etc/
- #mv php-fpm.conf.default php-fpm.conf
9.复制www.conf配置文件
- #cd /apps/php/etc/
- #mv php-fpm.d/www.conf.default php-fpm.d/www.conf
10.修改www.conf配置文件
- #php-fpm.d/www.conf
user = nginx
group = nginx
11.启动php-fpm程序
- #systemctl start php-fpm.service
mariadb的二进制安装
(1)准备用户
# groupadd -g 27 -o -r mysql
# useradd -s /sbin/nologin -r -d /data/mysql -g 27 -u 27 -c "mysql server" mysql
(2)准备数据目录
# mkdir /data/mysql -p
# chown mysql.mysql /data/mysql/
(3)解压缩
# tar xf mariadb-10.2.27-linux-x86_64.tar.gz -C /usr/local/
# cd /usr/local/
# ln -s ./mariadb-10.2.27-linux-x86_64/ mysql
# chown -R root.root mysql/
(4)准备配置文件
# cp -b support-files/my-huge.cnf /etc/my.cnf
# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
skip_name_resolve=on
(5)创建数据库文件
# yum install -y libaio
# /usr/local/mysql/scripts/mysql_install_db --datadir=/data/mysql --user=mysql
(6)准备服务脚本,并启动服务
# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
# chkconfig --add mysqld
(7)PATH路径
# echo 'PATH=/usr/local/mysql/bin:$PATH' >/etc/profile.d/mysql.sh
# . /etc/profile.d/mysql.sh
==>二进制安装mariadb完成
wordpress的实现配置
1)nginx代理php程序配置
location ~ \.php$ {
root /data/nginx/php/; #针对php程序的目录
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /data/nginx/php$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
2)数据库配置:
- 建库和授权
mysql> create database wordpress;
mysql> grant all on wordpress.* to wordpress@'192.168.38.%' identified by 'centos';
3)wordpress访问数据库
# cd /var/www/html/wordpress/
# cp wp-config-sample.php wp-config.php
# vim wp-config.php 更改以下几项:
/** WordPress数据库的名称 */
define( 'DB_NAME', 'wordpress' );
/** MySQL数据库用户名 */
define( 'DB_USER', 'wordpress' );
/** MySQL数据库密码 */
define( 'DB_PASSWORD', 'centos' );
/** MySQL主机 */
define( 'DB_HOST', '192.168.38.88' );
实现总结:目前我的学习阶段仅能实现将php程序和静态资源文件分开存放,例如wordpress是一个业务的程序(包含动态和静态程序文件),没能实现将php程序和对应的静态资源文件根据这是一个业务而将其放置于一个wordpress目录下。上述的实验即:需要将wordpress中的php程序放置于两份:静态资源放置于/apps/nginx/html/ PHP资源放置于/data/nginx/php/。