Nginx 详细配置请见 https://blog.csdn.net/sinat_41075146/article/details/82258265
LNMP FastCGI知识说明(绘图说明)
工作原理讲解说明:
①. 用户请求的静态文件,由nginx服务自行处理,根据静态的location配置进行处理 用户请求的动态文件,由php服务进行处理,根据动态的 location配置进行处理
②. nginx服务接收到动态请求,会将请求抛送给fastcgi,类似于nginx服务接收动态请求的秘书,秘书会将动态请求送给PHP程序
③. PHP如果可以处理,会将处理结果直接通过fastcgi返回给nginx程序;如果不可以处理,还会请求后端数据库,最终再把处理结果返回给nginx
LNMP架构以及部署:
1.1 、架构软件安装部署
L: Linux
01. 系统安装好
02. 基础优化(关闭防火墙 关闭selinux /tmp/权限1777)
N:nginx
软件安装部署
M:mysql
安装部署
P:PHP(处理动态请求)
安装部署
二 、nginx软件与PHP软件建立连接关系
在nginx配置文件添加配置信息
三 、php软件与mysql软件建立连接关系(nginx软件和mysql软件建立连接关系)
有php程序代码来完成数据库连接建立
注意: 安装顺序 , PHP 一定是要最后安装的 ,因为 PHP 依赖 MySQL
开始配置 LNMP 环境 ;
一 、LNMP MySQL数据库安装(二进制包的安装)
mysql软件下载地址信息: www.mysql.com mirrors.sohu.com
1) 下载并解压mysql二进制软件包
[root@m01 tools]# tar xf mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz
[root@m01 tools]# du -sh mysql-5.6.34-linux-glibc2.5-x86_64 ---->> 查看软件包大小
1.1G mysql-5.6.34-linux-glibc2.5-x86_64
2) 添加mysql程序运行时的管理用户
[root@m01 tools]# useradd -s /sbin/nologin -M mysql
3) 将mysql解压后的程序包搬家到程序目录下,并进行重命名
[root@m01 tools]# mkdir -p /application/
[root@m01 tools]# mv /server/tools/mysql-5.6.34-*-x86_64 /application/mysql-5.6.34 ---->> 搬家到我们规划的目录下
4) 为mysql服务程序创建软链接
[root@m01 tools]# ln -s /application/mysql-5.6.34/ /application/mysql ---->> 创建一个软连接,方便后续使用
5) 让mysql用户管理 /application/mysql/
[root@m01 tools]# chown -R mysql.mysql /application/mysql/ ---->> 授权
[root@m01 tools]# ll /application/mysql/
总用量 68
drwxr-xr-x 2 mysql mysql 4096 8月 25 19:55 bin
-rw-r--r-- 1 mysql mysql 17987 9月 30 2016 COPYING
drwxr-xr-x 3 mysql mysql 4096 8月 25 19:56 data
drwxr-xr-x 2 mysql mysql 4096 8月 25 19:56 docs
drwxr-xr-x 3 mysql mysql 4096 8月 25 19:56 include
drwxr-xr-x 3 mysql mysql 4096 8月 25 19:55 lib
drwxr-xr-x 4 mysql mysql 4096 8月 25 19:55 man
drwxr-xr-x 10 mysql mysql 4096 8月 25 19:56 mysql-test
-rw-r--r-- 1 mysql mysql 2496 9月 30 2016 README
drwxr-xr-x 2 mysql mysql 4096 8月 25 19:56 scripts
drwxr-xr-x 28 mysql mysql 4096 8月 25 19:55 share
drwxr-xr-x 4 mysql mysql 4096 8月 25 19:56 sql-bench
drwxr-xr-x 2 mysql mysql 4096 8月 25 19:56 support-files
[root@m01 tools]#
6) 初始化数据库
#1. 确认软件安装在哪里
#2. 确认数据存放在哪里
#3. 确认MySQL使用的用户谁?
[root@m01 tools]# /application/mysql/scripts/mysql_install_db --basedir=/application/mysql --datadir=/application/mysql/data --user=mysql
问题1 ;
[root@m01 ~]# vim /etc/my.cnf ---->> 编辑此配置文件,把 skip-locking 先注释掉即可正常初始化了 ;
2018-08-25 21:18:04 2043 [Note] InnoDB: 5.6.34 started; log sequence number 1600737
2018-08-25 21:18:05 2043 [Note] Binlog end
2018-08-25 21:18:05 2043 [Note] InnoDB: FTS optimize thread exiting.
2018-08-25 21:18:05 2043 [Note] InnoDB: Starting shutdown...
2018-08-25 21:18:07 2043 [Note] InnoDB: Shutdown completed; log sequence number 1626133
OK
Filling help tables...2018-08-25 21:18:07 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2018-08-25 21:18:07 0 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.
2018-08-25 21:18:07 0 [Note] /application/mysql/bin/mysqld (mysqld 5.6.34-log) starting as process 2074 ...
2018-08-25 21:18:07 2074 [Note] InnoDB: Using atomics to ref count buffer pool pages
2018-08-25 21:18:07 2074 [Note] InnoDB: The InnoDB memory heap is disabled
2018-08-25 21:18:07 2074 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2018-08-25 21:18:07 2074 [Note] InnoDB: Memory barrier is not used
2018-08-25 21:18:07 2074 [Note] InnoDB: Compressed tables use zlib 1.2.3
2018-08-25 21:18:07 2074 [Note] InnoDB: Using Linux native AIO
2018-08-25 21:18:07 2074 [Note] InnoDB: Using CPU crc32 instructions
2018-08-25 21:18:07 2074 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2018-08-25 21:18:07 2074 [Note] InnoDB: Completed initialization of buffer pool
2018-08-25 21:18:07 2074 [Note] InnoDB: Highest supported file format is Barracuda.
2018-08-25 21:18:07 2074 [Note] InnoDB: 128 rollback segment(s) are active.
2018-08-25 21:18:07 2074 [Note] InnoDB: Waiting for purge to start
2018-08-25 21:18:07 2074 [Note] InnoDB: 5.6.34 started; log sequence number 1626133
2018-08-25 21:18:08 2074 [Note] Binlog end
2018-08-25 21:18:08 2074 [Note] InnoDB: FTS optimize thread exiting.
2018-08-25 21:18:08 2074 [Note] InnoDB: Starting shutdown...
2018-08-25 21:18:09 2074 [Note] InnoDB: Shutdown completed; log sequence number 1626143
OK
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL
两个 OK 表示数据库已经初始化完成了
7) 复制启动脚本 授权
[root@m01 ~]# cp /application/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@m01 ~]# chmod +x /etc/init.d/mysqld
8) 修改启动脚本 和 mysql命令中的路径
[root@m01 ~]# sed -i 's#/usr/local/mysql#/application/mysql#g' /application/mysql/bin/mysqld_safe /etc/init.d/mysqld
9) 复制默认的配置文件
[root@m01 ~]# \cp /application/mysql/support-files/my-default.cnf /etc/my.cnf
[root@m01 ~]# /etc/init.d/mysqld start
Starting MySQL. [确定]
至此,mysql数据库安装与启动完成;可以检测进程和服务端口,确认mysql服务是否启动正确
[root@m01 ~]# ps -ef |grep mysql
root 1744 1 0 21:13 ? 00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql
mysql 1873 1744 0 21:13 ? 00:00:02 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --log-error=/var/lib/mysql/m01.err --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock --port=3306
root 2207 1 0 21:29 pts/0 00:00:00 /bin/sh /application/mysql/bin/mysqld_safe --datadir=/application/mysql/data --pid-file=/application/mysql/data/m01.pid
mysql 2485 2207 0 21:29 pts/0 00:00:00 /application/mysql/bin/mysqld --basedir=/application/mysql --datadir=/application/mysql/data --plugin-dir=/application/mysql/lib/plugin --user=mysql --log-error=/application/mysql/data/m01.err --pid-file=/application/mysql/data/m01.pid --socket=/var/lib/mysql/mysql.sock --port=3306
root 2548 2022 0 21:33 pts/0 00:00:00 grep mysql
[root@m01 ~]#
二 、 管理mysql数据库 ;
1) 进入与退出mysql数据库方法:
/application/mysql/bin/mysql
=============================================
登录数据库命令简化方法
echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile
source /etc/profile
which mysql
=============================================
退出数据库时,尽量不要用ctrl+c进行退出mysql 用ctrl+d进行退出
2) 设置mysql服务开机自启动
2.1 、加入开机自启动
chkconfig --add mysqld
chkconfig mysqld on
3) 设置mysql数据库登录用户名与密码
3.1 、给MySQL root用户设置密码
/application/mysql/bin/mysqladmin -u root password '123' --->> 设置密码
[root@m01 ~]# mysql -uroot -p123 --->> 重新登陆一下
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 17
Server version: 5.6.34-log MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
数据库中的基础操作 ;
#############################################################################################
show databases; --->> 查询默认的数据库信息
create database oldboy; --->> 创建新的数据库
drop database oldboy; --->> 删除存在的数据库
use mysql; --->> 表示选择使用一个数据库,相当于cd进入一个数据库
show tables; --->> 查看数据库中表信息
select database(); --->> 表示查看当前所在数据库,类似于pwd命令的功能
select user(); 查看当前登录数据库的用户,类似于whoami命令并且mysql还可以限制指定用户可以从哪里进行连接登录数据库
select user,host from user; --->> 查看user表中指定信息,并且横行显示
select user,host from mysql.user; --->> 查看可以登录mysql数据库的目录,以及都可以从哪里进行管理mysql数据库
grant all on *.* to user@'host' identified by 'oldboy123'; --->> 创建用户
grant all on *.* to Old_Boy@'localhost' identified by 'oldboy123'; --->> 创建用户(大写用户)
drop user 'user'@'host';
flush privileges; --->> 刷新权限
添加删除系列
#创建数据库
create database wordpress;
#删除数据库
drop database wordpress;
###############################################################################################
三 、 LNMP PHP软件安装
安装PHP步骤
1) 解决PHP软件的依赖关系
[root@m01 ~]# yum install zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel -y
[root@m01 ~]# yum install freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel libxslt-devel -y
[root@m01 ~]# rpm -qa zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel freetype-devel libpng-devel gd- devel libcurl-devel libxslt-devel
libiconv软件安装 ---->> 字符集转换库(默认可以不进行安装了)
[root@m01 tools]# cd /home/oldboy/tools
[root@m01 tools]# tar zxf libiconv-1.14.tar.gz
[root@m01 tools]# cd libiconv-1.14
[root@m01 libiconv-1.14]# ./configure --prefix=/usr/local/libiconv
[root@m01 libiconv-1.14]# make
[root@m01 libiconv-1.14]# make install
# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo --->> 没有repo 直接执行一下,有的忽略
[root@m01 tools]# yum -y install libmcrypt-devel mhash mcrypt
[root@m01 tools]# rpm -qa libmcrypt-devel mhash mcrypt
mhash-0.9.9.9-3.el6.x86_64
mcrypt-2.6.8-10.el6.x86_64
libmcrypt-devel-2.5.8-9.el6.x86_64
[root@m01 tools]#
2) 解压编译安装PHP软件
[root@m01 tools]# tar xf php-5.5.32.tar.gz
[root@m01 tools]# cd php-5.5.32
./configure \
--prefix=/application/php-5.5.32 \
--with-mysql=/application/mysql/ \
--with-pdo-mysql=mysqlnd \
--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-soap \
--enable-short-tags \
--enable-static \
--with-xsl \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-ftp \
--enable-opcache=no
出现这个图 表示 PHP 配置成功
=================================================
PHP扩展参数:(配置没有问题可以省略以下配置参数,以下参数和PHP优化有关)
--with-curlwrappers \
--enable-zip \
--enable-zend-multibyte \
=================================================
[root@m01 php-5.5.32]# ln -s /application/mysql/lib/libmysqlclient.so.18 /usr/lib64/
root@m01 php-5.5.32]# touch ext/phar/phar.phar
[root@m01 php-5.5.32]# make && make install
3) PHP软件程序创建软链接
[root@m01 php-5.5.32]# ln -s /application/php-5.5.32/ /application/php
4) 配置php解析文件/配置php-fpm配置文件
[root@m01 php-5.5.32]# cd /home/oldboy/tools/php-5.5.32
[root@m01 php-5.5.32]# cp php.ini-production /application/php/lib/php.ini
(php.ini-developments是开发人员调试用配置文件, php.ini-production是生产常见所有配置文件)
# 编译安装PHP时,若配置未正确指定PHP进程用户信息,可以修改PHP文件进行调整
sed -i 's#user = www#user = nginx#g;s#group = www#group = nginx#g' /application/php-5.5.32/etc/php-fpm.conf
5) 启动php-fpm程序
[root@m01 etc]# /application/php/sbin/php-fpm
[root@m01 etc]# lsof -i :9000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
php-fpm 125679 root 7u IPv4 117793 0t0 TCP m01:cslistener (LISTEN)
php-fpm 125680 www 0u IPv4 117793 0t0 TCP m01:cslistener (LISTEN)
php-fpm 125681 www 0u IPv4 117793 0t0 TCP m01:cslistener (LISTEN)
[root@m01 etc]# ps -ef|grep php-fpm
root 125679 1 0 23:53 ? 00:00:00 php-fpm: master process (/application/php-5.5.32/etc/php-fpm.conf)
www 125680 125679 0 23:53 ? 00:00:00 php-fpm: pool www
www 125681 125679 0 23:53 ? 00:00:00 php-fpm: pool www
root 125684 2022 0 23:53 pts/0 00:00:00 grep php-fpm
四 、wordpress博客站点部署配置
1) 修改nginx配置文件,使nginx程序与php程序建立联系
vim extra/blog.conf
server {
listen 80;
server_name blog.etiantian.org;
location / {
root html/blog;
index index.html index.htm; ----->> 需要注意编辑修改默认首页文件 index index.php index.html index.htm;
}
location ~* .*\.(php|php5)?$ { ----->> 说明:利用nginx的location区块实现动态请求与静态请求的分别处理
root html/blog;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
}
2) 编辑nginx与php连通性测试文件,并进行测试
echo '' >/application/nginx/html/blog/test_info.php
测试站点
curl http://blog.etiantian.org/index.html ---->> 静态请求站点文件信息测试
curl http://blog.etiantian.org/test_info.php ---->> 动态请求站点文件信息测试
说明:当php服务停止时,9000端口信息消失,即停止PHP错误报502错误
linux系统测试完毕后,建议利用浏览器进行最终测试,测试效果更明显些
http://blog.etiantian.org/test_info.php ---->> 可以访问到以下页面说明建立连接成功 ;
3) 编辑php与mysql连通性测试文件,并进行测试
3.1 . 创建数据库
mysql -uroot -p123;
show databases; <--- 查看当前数据库信息
create database wordpress;
3.2 . 添加用户信息
grant all on wordpress.* to 'wordpress'@'localhost' indentified by 'oldboy123'; --->> 可以再本地登陆
mysql> grant all on wordpress.* to wordpress@'172.16.1.0/255.255.255.0' identified by '123456'; --->> 可以再网段登陆
flush privileges; ----->>> 刷新
drop user wordpress@'172.16.1.8'; ---->> 删除用户信息
select user,host from mysql.user; ---->> 查看用户信息
mysql -uwordpress -p123456 ---->> 测试创建的用户连接
show databases; ---->> 查看当前数据库信息
# 利用mysql命令进行指定用户登录测试
/application/mysql/bin/mysql -uwordpress -p123
3.3 . 测试php与数据库连通性
[root@m01 blog]# pwd
/application/nginx/html/blog
[root@m01 blog]# ls
index.html test_info.php test_mysql.php
[root@m01 blog]# vim test_mysql.php
//$link_id=mysql_connect('主机名','用户','密码');
//mysql -u用户 -p密码 -h 主机
$link_id=mysql_connect('localhost','wordpress','123') or mysql_error();
if($link_id){
echo "mysql successful by oldboy !\n";
}else{
echo mysql_error();
}
?>
curl blog.etiantian.org/test_mysql.php ---->> 测试php与数据库的连通性
http://blog.etiantian.org/test_mysql.php ---->> 浏览器中测试
4) 下载部署 wordpress 博客程序(https://cn.wordpress.org/ 英文官网:https://www.wordpress.org/ )
[root@m01 tools]# wget -P /home https://cn.wordpress.org/wordpress-4.5.1-zh_CN.tar.gz --->> -P 表示指定下载路径
[root@m01 tools]# tar xf wordpress-4.5.1-zh_CN.tar.gz ---->> 解压
[root@m01 tools]# mv wordpress/* /application/nginx/html/blog/
[root@m01 tools]# chown -R www.www /application/nginx/html/blog/
# 修改配置文件在配置文件中加上 index.php 要不不能直接访问页面需要手动切换 ;
[root@m01 extra]# nginx -t
nginx: the configuration file /application/nginx-1.10.3/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.10.3/conf/nginx.conf test is successful
[root@m01 extra]# nginx -s reload
5) 浏览器页面访问 http://blog.etiantian.org/ # vim wp-config.php 可以修改wordpress上的数据库连接参数信息
五 、 wordpress 博客站点数据库迁移 ;
# 重复上面创建数据库的步骤
迁移数据库:利用数据库备份命令
1) 备份数据库数据库信息
mysqldump -uroot -p123 --all-databases >/tmp/bak.sql
ll /tmp/bak.sql -h
scp /tmp/bak.sql 172.16.1.51:/tmp/
2) 恢复数据库数据库信息
##db01
mysql -uroot -poldboy123 ###db01添加新的用户
grant all on wordpress.* to wordpress@'172.16.1.0/255.255.255.0' identified by '123';
flush privileges;
mysql -uwordpress -poldboy123 -h 172.16.1.51
3) 数据库迁移完毕,修改网站连接数据库的配置文件
mysql -uwordpress -p123 -h 172.16.1.51 <-- 修改配置文件之前,先测试网站web服务器与迁移后的数据库连通性
vim wp-config.php <-- 修改wordpress上的数据库连接参数信息
/** MySQL主机 */
define('DB_HOST','172.16.1.51') <-- 修改连接的主机信息,将localhost修改为172.16.1.51
说明:web服务器数据库此时可以关闭了
4)停止nginx服务器上MySQL服务
05. 进行数据迁移到NFS共享服务器
01:先将原有目录中数据移出
cd /application/nginx/html/blog/wp-content/uploads
mkdir /tmp/wordpress_backup -p
mv ./* /tmp/wordpress_backup/
02:NFS服务器上配置创建共享目录
vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash)
showmount -e 172.16.1.31
mount -t nfs 172.16.1.31:/data /mnt/
showmount -e 172.16.1.31
mount -t nfs 172.16.1.31:/data/ ./uploads/
mv /tmp/wordpress_backup/* ./