LNMP

用户通过浏览器输入域名请求nginx web服务,如果请求时静态资源,则由nginx解析返回给用户;如果是动态请求(.php结尾),那么nginx就会把它通过FastCGI接口(生产常用方法)发送给PHP引擎服务(FastCGI进程php-fpm)进行解析,如果这个动态请求要读取数据库数据,那么,PHP就会继续向后请求MYSQL数据库,以读取需要的数据,并最终通过Nginx服务把获取的数据返回给用户,这就是LNMP环境的基本请求顺序流程

LNMP之MYSQL数据库

MYSQL是一种关系形数据库管理软件,关系型数据库的特点是将数据保存在不同的二维表中,并且将这些表放入不同的数据库中,而不是把所有数据统一放在一个大仓库里,这样的设计增加了MYSQL的读取速度,灵活性和可管理性也得到了很大提高。

1. 为什么选择MYSQL数据库

  • 性能卓越,服务稳定,很少出现异常宕机
  • 开放源代码且无版权制约,自主性强,使用成本低
  • 历史悠久,社区及用户非常活跃,遇到问题,可以很快获取到帮助
  • 软件体积小,安装使用简单,并且易于维护,安装及维护成本低
  • 支持多种操作系统,提供多种api接口,支持多种开发语言,特别是对流行的PHP语言无缝支持

2. 安装MYSQL数据库

当前使用最为广泛是MYSQL5.5系列版本的数据库,MYSQL安装方式比较在nginx web服务应用我们已经说过
下面我们直接通过二进制文件安装

  1. 包源
    http://mirrors.sohu.com/ 可通过搜狐源站下载对应包
  2. http://dev.mysql.com mysql下载官网
  3. 安装
  4. [root@Poppy mysql]# useradd -s /sbin/nologin mysql -M # 创建启动mysql的用户
  5. [root@Poppy tools]# wget dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.49-linux2.6-x86_64.tar.gz # 下载二进制文件
  6. [root@Poppy tools]# tar -xf mysql-5.5.49-linux2.6-x86_64.tar.gz # 解压缩文件
  7. [root@Poppy tools]# mv mysql-5.5.49-linux2.6-x86_64 /application/mysql-5.5.49 # 将解压出来的目录移动到我们的程序目录下
  8. [root@Poppy tools]# ln -s /application/mysql-5.5.49/ /application/mysql # 做个链接
  9. [root@Poppy tools]# cd /application/mysql # 切换到链接的目录下
  10. [root@Poppy mysql]# chown -R mysql.mysql /application/mysql/ # 将链接的目录属主属组更替成启动mysql的用户
  11. [root@Poppy mysql]# yum install libaio # 安装缺省库文件
  12. [root@Poppy mysql]# ./scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data/ --user=mysql
  13. Installing MySQL system tables... # 初始化数据库
  14. 180610 22:58:07 [Note] /application/mysql//bin/mysqld (mysqld 5.5.49) starting as process 10106 ...
  15. OK
  16. Filling help tables...
  17. 180610 22:58:07 [Note] /application/mysql//bin/mysqld (mysqld 5.5.49) starting as process 10113 ...
  18. OK
  19. --basedir=/application/mysql/ # 安装的根
  20. --datadir=/application/mysql/data/ # 放数据的
  21.  
  22. [root@Poppy mysql]# ls data/ # 验证默认库是否创建
  23. mysql performance_schema 内部管理的库
  24. test

配置并启动MYSQl数据库

  1. 通过守护进程控制服务的启动
  2. [root@Poppy support-files]# sed -i 's#/usr/local/#/application/#g' mysql.server # 默认安装路径是/usr/local/所以我们替换成我们的目录
  3. [root@Poppy support-files]# cp -rf my-small.cnf /etc/my.cnf # 生成配置文件
  4. [root@Poppy support-files]# cp -a mysql.server /etc/init.d/mysqld
  5. cp: overwrite ‘/etc/init.d/mysqld’? y # 复制到守护进程下,控制启停
  6. [root@Poppy support-files]# chmod +x /etc/init.d/mysqld
  7. [root@Poppy support-files]# /etc/init.d/mysqld stop
  8. Shutting down MySQL. [ OK ]
  9. [root@Poppy support-files]# /etc/init.d/mysqld start
  10. Starting MySQL..
  11.  
  12. 这是启动mysql规范的方式之一,还可以使用
  13. [root@Poppy bin]# cd bin
  14. [root@Poppy bin]# sed -i 's#/usr/local/#/application/#g' mysqld_safe
  15. [root@Poppy mysql]# cp support-files/my-small.cnf /etc/my.cnf # 生成配置文件
  16. [root@Poppy mysql]# /application/mysql/bin/mysqld_safe --user=mysql
  17. 180610 23:35:05 mysqld_safe Logging to '/application/mysql/data/Poppy.err'.
  18. 180610 23:35:06 mysqld_safe Starting mysqld daemon with databases from /application/mysql/data
  19.  
  20. 通过netstat -ntlp可查看端口是否开启

登录到MYSQL

  1. 绝对路径方式登录
  2. [root@Poppy mysql]# /application/mysql/bin/mysql
  3.  
  4. 登录命令加载
  5. [root@Poppy mysql]# echo "PATH='/application/mysql/bin/:$PATH'" >> /etc/profile
  6. [root@Poppy mysql]# . /etc/profile # 中间有个空格
  7. [root@Poppy mysql]# echo $PATH # 按顺序加载命令,如果是rpm,yum优先级会在前面
  8. /application/mysql/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
  9. [root@Poppy mysql]# mysql

MYSQL设置密码

  1. mysql -uroot -p 没有密码直接回车
  2. 设置密码
  3. [root@Poppy ~]# mysqladmin -u root password 'joker123'
  4. 更改密码
  5. [root@Poppy ~]# mysqladmin -uroot -pjoker123 password '123456'
  6. 如果是远程主机加入-h参数

附赠安装脚本

  1. useradd -s /sbin/nologin mysql -M
  2. wget dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.49-linux2.6-x86_64.tar.gz
  3. tar -xf mysql-5.5.49-linux2.6-x86_64.tar.gz
  4. mkdir -p /application
  5. mv mysql-5.5.49-linux2.6-x86_64 /application/mysql-5.5.49/
  6. ln -s /application/mysql-5.5.49/ /application/mysql
  7. cd /application/mysql
  8. chown -R mysql.mysql /application/mysql/
  9. yum install -y libaio
  10. ./scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data/ --user=mysql
  11. cd support-files/
  12. cp -rf my-small.cnf /etc/my.cnf
  13. sed -i 's#/usr/local/#/application/#g' mysql.server
  14. cp -amysql.server /etc/init.d/mysqld
  15. chmod +x /etc/init.d/mysqld
  16. /etc/init.d/mysqld start
  17. echo "PATH='/application/mysql/bin/:$PATH'" >> /etc/profile
  18. . /etc/profile
  19. mysqladmin -u root password 'joker123'

5.5.49安装过程复制即可

忘记登录密码解决方法

  1. # 修改配置文件my.cnf
  2. [mysqld]
  3. skip-grant-tables '
  4.  
  5. # 登录mysql就不需要密码了
  6. mysql> UPDATE mysql.user SET Password = password ( ‘123456’ ) WHERE User = ‘root’;
  7. mysql>flush privileges;

FastCGI

1. FastCGI产生

CGI的全称为“通用网关接口”,为HTTP服务器与其他机器上的程序服务通信交流一种工具,CGI程序须运行在网络服务器上
传统CGI接口方式的主要缺点是性能较差,因为每次HTTP服务器遇到动态程序时都需要通过重新启动解析器来执行解析,之后结果才会被返回给HTTP服务器。这就在处理高并发访问时几乎是不可用的,因此就诞生了FastCGI。另外,传统的CGI接口方式安全性也很差,故而现在已经很少被使用了

2. 什么是FastCGI

3. FastCGI运行原理

nginx不支持对外部动态程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在linux下是socket,为了调用CGI程序,还需要一个FastCGI的wrapper(可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定的socket上,如端口或文件socket。当nginx将CGI请求发送给这个socket时候,通过FastCGI接口,wrapper接收到消息,然后派生出一个新的线程,这个线程调用解释器或外部程序处理脚本来读取返回的数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给nginx;最后,nginx将返回的数据发送给客户端。

FastCGI的主要优点是把动态语言和HTTP服务器分离开来,使nginx专门处理静态请求及向后转发的动态请求,而PHP服务器则专门解析PHP请求。

LNMP之PHP(FastCGI方式)

1. 安装前准备

第一点:mysql,nginx

  1. mysql|nginx 正常启动工作

第二点:检查安装PHP所需的lib库

PHP程序在开发及运行时会调用一些诸如zlib,gd等函数库,因此需要确认lib库是否已经安装

  1. [root@Poppy ~]# rpm -qa zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel
  2. libjpeg-turbo-devel-1.2.90-5.el7.x86_64
  3. zlib-devel-1.2.7-17.el7.x86_64
  4. libxml2-devel-2.9.1-6.el7_2.3.x86_64
  5. libiconv-devel 没有安装成功,因为默认yum源没有此包
  6.  
  7. [root@Poppy ~]# rpm -qa freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel
  8. libcurl-devel-7.29.0-46.el7.x86_64
  9. freetype-devel-2.4.11-15.el7.x86_64
  10. libpng-devel-1.5.13-7.el7_2.x86_64
  11. libxslt-devel-1.1.28-5.el7.x86_64
  12. gd-devel-2.0.35-26.el7.x86_64
  13.  
  14. 其中:libjpeg-turbo-devel是早期的libjpeg-devel的新名字,libcurl-devel是早期curl-devel的新名字
  15. 提示:库文件一般安装 *-devel包,就会把*安装,例如安装gd-devel,就会把gd安装
  16. 这些lib不是必须安装,但是目前企业环境下一般都需要安装的,否则,php程序运行时会出现问题,例如验证码
  17.  
  18. yum install zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel
  19. yum install freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel
  20.  
  21. 我们通过编译安装上面没有安装成功的库libiconv-devel
  22. [root@Poppy tools]# wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
  23. [root@Poppy tools]# tar -zxf libiconv-1.14.tar.gz
  24. [root@Poppy tools]# cd libiconv-1.14
  25. [root@Poppy tools]# ./configure --prefix=/application/libiconv-1.14/
  26. [root@Poppy tools]# make && make install
  27. [root@Poppy tools]# ln -s /application/libiconv-1.14/ /application/libiconv
  28. [root@Poppy tools]# rm -fr libiconv-1.14
  29. 报错:
  30. In file included from progname.c:26:0:
  31. ./stdio.h:1010:1: error: gets undeclared here (not in a function)
  32. _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
  33. ^
  34. make[2]: *** [progname.o] Error 1
  35. make[2]: Leaving directory `/usr/local/src/zabbix-2.4.7/libiconv-1.14/srclib'
  36. make[1]: *** [all] Error 2
  37. make[1]: Leaving directory `/usr/local/src/zabbix-2.4.7/libiconv-1.14/srclib'
  38. make: *** [all] Error 2
  39. 解决:
  40. [root@Poppy tools]# vi srclib/stdio.in.h
  41. 找到698行,_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");*/
  42. 替换成
  43. #if defined(__GLIBC__) && !defined(__UCLIBC__) && !__GLIBC_PREREQ(2, 16)
  44. _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
  45. #endif
  46. #endif
  47. ......即可
  48.  
  49. 安装libmcrypt库
  50. 这是一个使用动态加载模块化的libmcrypt,libmcrypt对于在程序运行时添加/移除算法是有用的,libmcrypt目前不再被官方支持,其软件地址为http://mcrypt.hellug.gr/lib/,编译PHP的过程中,libmcrypt库不是必须要安装的包
  51. Centos默认的yum源里面没有libmcrypt-devel,因此需要事先配置epel第三方yum源
  52. [root@Poppy ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  53. [root@Poppy ~]# yum -y install libmcrypt-devel
  54.  
  55. 安装mhash加密扩展库
  56. mhash是基于离散数据原理不可逆向的PHP加密方式扩展库,其在默认情况下不会开启。mhash可以用于创建校验数值,消息摘要,消息认证码,以及无需原文的关键信息保存(如密码)等。它为PHP提供了多种散列算法,如MD5,SHA1,GOST等,可以通过MHASH_hashname()查看其支持的算法有哪些
  57. 需要注意的是:
  58. 1. 该扩展不能提供最新的散列算法
  59. 2. 该扩展结果原则上运算不可逆
  60. [root@Poppy ~]# yum -y install libmcrypt-devel
  61.  
  62. 安装mcrypt加密扩展库
  63. PHP程序员在编写代码程序时,除了要保证代码的高性能之外,还有一点是非常重要的,那就是程序的安全性保障,PHP除了自带的几种加密函数外,还有功能更全面的PHP加密扩展库mcrypt和mhash
  64. 其中,mcrypt扩展库可以实现加密解密功能,就是既能将明文加密,也可以将密文还原
  65. 可以说,mcrypt是PHP里面重要的加密支持扩展库,该库默认情况下不开启
  66. mcrypt库支持20多种加密算法和8种加密模式,具体可以通过函数mcrypt_list_algorithms()和mcrypt_list_modes()来显示
  67. [root@Poppy ~]# yum install mcrypt
  68. [root@Poppy ~]# rpm -qa libmcrypt-devel mhash mcrypt
  69. mcrypt-2.6.8-11.el7.x86_64
  70. mhash-0.9.9.9-10.el7.x86_64
  71. libmcrypt-devel-2.5.8-13.el7.x86_64

2. 开始安装 PHP(FastCGI方式)服务

  1. 通过搜狐的源站,选取软件包
  2. http://mirrors.sohu.com/ 选取php-5.5.32.tar.gz,右键复制链接地址
  3. [root@Poppy tools]# wget http://mirrors.sohu.com/php/php-5.5.32.tar.gz
  4. [root@Poppy tools]# tar -xf php-5.5.32.tar.gz
  5. [root@Poppy tools]# cd /php-5.5.32
  6. [root@Poppy tools]# ./configure --prefix=/application/php-5.5.32/ --with-mysql=/application/mysql/ --with-iconv-dir=/application/libiconv/ --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr/ --enable-xml --disable-rpath --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --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-zend-multibyte --enable-static --with-xsl --with-fpm-user=www --with-fpm-group=www --enable-ftp
  7. [root@Poppy tools]# ln -s /application/mysql/lib/libmysqlclient.so.18 /usr/lib64/
  8. [root@Poppy tools]# cd php-5.5.32
  9. [root@Poppy tools]# touch ext/phar/phar.phar
  10.  
  11. 错误事例1
  12. error while loading shared libraries;libmysqlclient.so.18;cannot open shared object file;no such file or directory
  13. make;***[ext/phar/phar.php]error 127
  14. 报错原因,这个原因是很常见的,即PHP找不到指定的库,一般是相应库的路径不对导致的
  15. 解决方法
  16. [root@Poppy tools]# ln -s /application/mysql/lib/libmysqlclient.so.18 /usr/lib64/
  17. 错误事例2:
  18. chmod:cannot access 'ext/phar/phar.phar':no such file or directory
  19. make:[ext/phar/phar.phar]error 1 (ignored)
  20. 报错原因,上述报错提示是不能访问xt/phar/phar.phar这个文件或者目录
  21. 如果编译时使用--with-mysql=mysqlnd替代--with-mysql=/application/mysql/,就不会出现上面错误事例
  22.  
  23. [root@Poppy tools]# make
  24. Build complete.
  25. Don't forget to run 'make test'.
  26. [root@Poppy php-5.5.32]# make install
  27. [root@Poppy application]# php/bin/php -v
  28. PHP 5.5.32 (cli) (built: Jun 11 2018 18:58:39)
  29. Copyright (c) 1997-2015 The PHP Group
  30. Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies

附赠通过yum安装php56w

  1. 默认的yum源没有此包信息,我们需要第三方源
  2. [root@jokerpro ~]# cat /etc/yum.repos.d/webtatic.repo
  3. [webtatic]
  4. name=Webtatic Repository EL6 - $basearch
  5. #baseurl=https://repo.webtatic.com/yum/el6/$basearch/
  6. mirrorlist=https://mirror.webtatic.com/yum/el7/$basearch/mirrorlist
  7. failovermethod=priority
  8. enabled=1
  9. gpgcheck=0
    检验有没有该包
    yum list |grep php56 
  10. 安装
    yum -y install php56w.x86_64 php56w-mbstring.x86_64 php56w-xml.x86_64 php56w-pdo.x86_64 php56w-mssql.x86_64 php56w-fpm.x86_64 php56w-pear.noarch php56w-pecl-redis.x86_64 php56w-common.x86_64 php56w-bcmath.x86_64 php56w-mysql.x86_64 php56w-process.x86_64 php56w-pecl-igbinary.x86_64 php56w-opcache.x86_64
    查看安装成功否,和安装位置
  11. rpm -qa ql

3. 配置PHP引擎配置文件php.ini

  1. 配置文件存储在解压出来的目录里面,模版的配置文件有开发模版,生产模版二个版本,开发环境的模版更多的是开启日志,调试信息,而生产环境都是关闭状态
  2. [root@Poppy php-5.5.32]# cp php.ini-production /application/php/lib/php.ini
  3. [root@Poppy php-5.5.32]# cd /application/php/etc
  4. [root@Poppy etc]# cp php-fpm.conf.default php-fpm.conf
  5. 启动PHP服务(FastCGI)
  6. [root@Poppy etc]# /application/php/sbin/php-fpm
  7.  
  8. 检查启动
  9. [root@Poppy etc]# netstat -ntlp
  10. Active Internet connections (only servers)
  11. Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
  12. tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 8521/php-fpm: maste
  13. [root@Poppy etc]# ps -ef|grep php-fpm
  14. root 8521 1 0 23:51 ? 00:00:00 php-fpm: master process (/application/php-5.5.32/etc/php-fpm.conf)
  15. www 8522 8521 0 23:51 ? 00:00:00 php-fpm: pool www
  16. www 8523 8521 0 23:51 ? 00:00:00 php-fpm: pool www
  17. 默认一个主进程,二个子进程

测试LNMP环境生效的情况

1. 配置nginx支持PHP程序请求访问,通过nginx请求访问PHP

  1. nginx主配置文件
  2. [root@Poppy conf]# cat nginx.conf
  3. worker_processes 1;
  4. events {
  5. worker_connections 1024;
  6. }
  7. # 关键字,日志文件,错误日志级别
  8. error_log logs/error.log error;
  9. http {
  10. include mime.types;
  11. default_type application/octet-stream;
  12. sendfile on;
  13. keepalive_timeout 65;
  14. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  15. '$status $body_bytes_sent "$http_referer" '
  16. '"$http_user_agent" "$http_x_forwarded_for"';
  17. # 访问日志,main就是读http里面的main日志变量
  18. # access_log logs/www_access.log main;
  19. include extra/*.conf;
  20. }
  21. [root@Poppy conf]# cat extra/blog.conf
  22. server {
  23. listen 80;
  24. server_name blog.joker.com;
  25. location / {
  26. root html/blog;
  27. index index.html index.htm;
  28. }
  29. location ~ .*\.(php|php5)?$ {
  30. root html/blog;
  31. fastcgi_pass 127.0.0.1:9000;
  32. fastcgi_index index.php;
  33. include fastcgi.conf;
  34. }
  35. }
  36.  
  37. 创建php测试文件
  38. [root@Poppy blog]# cat test_info.php
  39. <?php phpinfo(); ?>
  40.  
  41. 客户端访问
  42. [root@joker ~]# curl blog.joker.com
  43. blog
  44. [root@joker ~]# curl blog.joker.com/test_info.php

2. PHP链接MYSQL的情况进行测试

  1. [root@Poppy blog]# cat test_mysql.php
  2. <?php
  3. $link_id=mysql_connect('localhost','root','') or mysql_error();
  4. if($link_id){
  5. echo "mysql successful by root";
  6. }else{
  7. echo mysql_error();
  8. }
  9.  
  10. // 这是单行注释
  11. /* 这是多行注释 */
  12. ?>
  13.  
  14. 客户端访问
  15. [root@joker ~]# curl blog.joker.com/test_mysql.php
  16. mysql successful by root

利用LNMP部署一个blog程序服务

WordPress是一套利用PHP语言和MySQL数据库开发的开源免费的blog(博客,网站)程序,用户可以在支持PHP环境和MySQL数据库的服务器上建立blog站点,它的功能非常强大,拥有众多插件,易于扩充功能。

1. MySQL数据库配置准备

  1. [root@Poppy blog]# mysql -uroot -p
  2. mysql> drop database test; # 清除无用的库
  3. mysql> select user(); # 查看当前用户
  4. mysql> create database wordpress;# 创建wordpress
  5. mysql> select user,host from mysql.user; # 查看用户,地址
  6. mysql> grant all on *.* to wordpress@'localhost' identified by ''; # 授权账号权限登录
  7. mysql> drop user wordpress@'localhost';
  8. mysql> grant all on wordpress.* to wordpress@'localhost' identified by '';
  9. mysql> show grants for wordpress@'localhost';
  10. mysql> flush privileges; # 刷新

2. nginx及PHP环境配置准备

  1. wordpress软件包默认首页就是index.php
    [root@Poppy extra]# cat blog.conf
  2. server {
  3. listen 80;
  4. server_name blog.joker.com 可以是ip;
  5. location / {
  6. root html/blog;
  7. index index.php index.html index.htm;
  8. }
  9. location ~ .*\.(php|php5)?$ {
  10. root html/blog;
  11. fastcgi_pass 127.0.0.1:9000;
  12. fastcgi_index index.php;
  13. include fastcgi.conf;
  14. }
  15. }

3. 获取wordpress程序

  1. https://cn.wordpress.org/
  2. https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz

4. 开始安装wordpress程序

  1. [root@Poppy tools]# tar -xf wordpress-4.9.4-zh_CN.tar.gz
  2. [root@Poppy tools]# cp -a wordpress/* /application/nginx/html/blog/
  3. [root@Poppy tools]# chown -R www.www /application/nginx/html/blog/
  4.  
  5. [root@Poppy extra]# mysql -uwordpress -p
  6. Enter password:
  7. Welcome to the MySQL monitor. Commands end with ; or \g.
  8. mysql> show databases;
  9. +--------------------+
  10. | Database |
  11. +--------------------+
  12. | information_schema |
  13. | wordpress |
  14. +--------------------+
  15. 2 rows in set (0.00 sec)
  16.  
  17. mysql> use wordpress;
  18. Database changed
  19. mysql> show tables;
  20. Empty set (0.00 sec)
  21.  
  22. 浏览器访问ip,就会出现一个数据库连接信息,按照之前我们创建的库,账号填写,点击继续,就会多出一个wp-config.php文件,存数据库连接信息,站点目录必须有权限,www
  23. [root@Poppy blog]# ls wp-config.php
  24. wp-config.php
  25. [root@Poppy blog]# pwd
  26. /application/nginx/html/blog
  27. [root@Poppy blog]# ls wp-config.php
  28. wp-config.php
  29.  
  30. 点击继续安装,到欢迎页面,填写博客标题,用户名,密码等
  31. 点击安装wordpress,页面提示成功,此时数据库就会多了很多表,点击登录就会跳转到博客登录页面

5. 静态化

我们访问http://博客ip/?p=7,?p=7是动态化的数据,我们需要给它静态化,显示成这样。http://博客ip/archives/7.html
实现此功能时,首先要在wordpress后台依次单击settings-固定链接-自定义结构,然后输入如下代码/archives/%post_id%.html,保存,接着在nginx配置文件的server容器中添加下面的代码

  1. [root@Poppy extra]# cat ../nginx.conf
  2. worker_processes 1;
  3. events {
  4. worker_connections 1024;
  5. }
  6. # 关键字,日志文件,错误日志级别
  7. error_log logs/error.log error;
  8. http {
  9. include mime.types;
  10. default_type application/octet-stream;
  11. sendfile on;
  12. keepalive_timeout 65;
  13. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  14. '$status $body_bytes_sent "$http_referer" '
  15. '"$http_user_agent" "$http_x_forwarded_for"';
  16. # 访问日志,main就是读http里面的main日志变量
  17. # access_log logs/www_access.log main;
  18. include extra/*.conf;
  19. }
  20. [root@Poppy extra]# cat blog.conf
  21. server {
  22. listen 80;
  23. server_name blog.joker.com ip;
  24. location / {
  25. root html/blog;
  26. index index.php index.html index.htm;
  27. if (-f $request_filename/index.php){
  28. rewrite (.*) $1/index.php;
  29. }
  30. if (-f $request_filename/index.html){
  31. rewrite (.*) $1/index.html break;
  32. }
  33. if (!-f $request_filename){
  34. rewrite (.*) /index.php;
  35. }
  36. }
  37. location ~ .*\.(php|php5)?$ {
  38. root html/blog;
  39. fastcgi_pass 127.0.0.1:9000;
  40. fastcgi_index index.php;
  41. include fastcgi.conf;
  42. }
  43. }
    [root@Poppy extra]# /application/nginx/sbin/nginx -s reload

LNMP服务分开

我们将我们搭建好的博客进行拆分,数据库使用远程服务器,编写文章上传图片到nfs

mysql更改和php链接mysql更改如下

  1. 原数据库数据
  2. [root@Poppy tools]# mysqldump -uroot -p123456 wordpress -B|gzip>wordpress.sql.gz
  3. 备份wordpress数据库,如果是-A则代表所有库
  4. [root@Poppy tools]# scp wordpress.sql.gz root@远程数据库服务器:/tmp
  5.  
  6. 远程数据库
  7. [root@joker tmp]# gzip -d wordpress.sql.gz
  8. [root@joker tmp]# mysqladmin -uroot -password 123456
  9. [root@joker tmp]# mysql -uroot -p123456 < wordpress.sql
  10. [root@joker tmp]# mysql -uroot -p123456 -e "show databases like 'wordpress'"
  11. [root@joker tmp]# mysql -uroot -p123456 -e "use wordpress;show tables"
  12.  
  13. 数据库授权登录权限
  14. mysql> grant all on wordpress.* to wordpress@'%' identified by '';
  15. mysql> flush privileges;
  16.  
  17. 更改wp-config.php里面的数据库连接
  18. [root@Poppy blog]# pwd
  19. /application/nginx/html/blog
  20. [root@Poppy blog]# cat wp-config.php
  21. // ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //
  22. /** WordPress数据库的名称 */
  23. define('DB_NAME', 'wordpress');
  24.  
  25. /** MySQL数据库用户名 */
  26. define('DB_USER', 'wordpress');
  27.  
  28. /** MySQL数据库密码 */
  29. define('DB_PASSWORD', '');
  30.  
  31. /** MySQL主机 */
  32. define('DB_HOST', '远程数据库ip地址'); # 修改这里
  33.  
  34. /** 创建数据表时默认的文字编码 */
  35. define('DB_CHARSET', 'utf8mb4');
  36.  
  37. /** 数据库整理类型。如不确定请勿更改 */
  38. define('DB_COLLATE', '');

nfs搭建配置

  1. 发表文章,插入图片,我们点击图片的地址是如下这个位置
  2. http://ip/wp-content/uploads/2018/06/111.jpg
  3. 我们可以通过nfs来替代这个路径
  4.  
  5. 我们先安装nfs服务器
  6. [root@Poppy ~]# yum install rpcbind nfs-utils
  7. [root@joker ~]# cat /etc/exports
  8. # share /nfsbackup by joker for poppy at today
  9. /nfsbackup nfs客户端ip(rw,sync,all_squash,anonuid=1006,anongid=1006) # 开启账号映射,将远程链接的用户映射到本地用户
  10. [root@joker ~]# id www
  11. uid=1006(www) gid=1006(www) groups=1006(www)
  12. [root@joker ~]# ls -ld /nfsbackup/
  13. drwxr-xr-x 3 www www 4096 Jun 12 18:01 /nfsbackup/
  14. [root@joker ~]# systemctl start nfs.service
  15. [root@joker ~]# showmount -e 127.0.0.1
  16. Export list for 127.0.0.1:
  17. /nfsbackup nfs客户端ip
  18.  
  19. 客户端,也就是我们之前lnmp一台上的
  20. [root@Poppy ~]# yum install rpcbind nfs-utils
  21. [root@Poppy ~]# systemctl start rpcbind.service
  22. [root@Poppy uploads]# pwd
  23. /application/nginx/html/blog/wp-content/uploads
  24. [root@Poppy uploads]# ls -ld /application/nginx/html/blog/wp-content/uploads/
  25. drwxr-xr-x 3 1006 1006 4096 Jun 12 18:01 /application/nginx/html/blog/wp-content/uploads/
  26. [root@Poppy uploads]# mv 2018/ /tmp
  27. [root@Poppy uploads]# mount -t nfs nfs服务器ip/nfsbackup /application/nginx/html/blog/wp-content/uploads/
  28. [root@Poppy uploads]# mv /tmp/2018 ./
  29. [root@Poppy uploads]# 空的也没关系,当我们创建文章添加图片了自动会生成
  30. [root@Poppy uploads]# ls 2018/06/111
  31. 111-100x100.jpg 111-150x150.jpg 111-300x93.jpg 111.jpg

lnmp环境应用实践的更多相关文章

  1. Linux实战教学笔记28:企业级LNMP环境应用实践

    一,LNMP应用环境 1.1 LNMP介绍 大约在2010年以前,互联网公司最常用的经典Web服务环境组合就是LAMP(即Linux,Apache,MySQL,PHP),近几年随着Nginx Web服 ...

  2. lamp环境应用实践

    LAMP之apache2.4.33 apache工作模式 apache 常用工作模式有2种,区别在于 worker模式 1. 线程模式 2. 占用资源少 3. 稳定性略差 4. 并发大 prefork ...

  3. LNMP环境搭建之php安装,wordpress博客搭建

    LNMP环境搭建之php安装,wordpress博客搭建 一.介绍: 1.什么是CGI CGI全称是"通用网关接口"(Common Gateway Interface),HTTP服 ...

  4. lnmp环境快速搭建及原理解析

    刚开始学习php的时候是在wamp环境下开发的,后来才接触到 lnmp 环境当时安装lnmp是按照一大长篇文档一步步的编译安装,当时是真不知道是在做什么啊!脑袋一片空白~~,只知道按照那么长的一篇文档 ...

  5. Dockfile搭建极简LNMP环境

    最近才发现ThinkPHP6.0和CI4.x都要求php版本为7.1以上了,本机的php版本还停留在7.0.3x,又懒得升级,于是考虑使用Docker来运行一个lnmp环境. 常规环境搭建的方式有两种 ...

  6. Linux下-LNMP环境搭建博客网站(全过程)

    通常我们所说的LNMP是指一个网站基本的组织框架,即Linux系统支持,Nginx静态服务,Mysql数据库支持以及PHP动态编程语言支持.目前Mysql数据库被Oracle数据库分析公司收购,其创始 ...

  7. 阿里云ECS安装lnmp环境-转载自:http://ninghao.net/blog/1368

    远程控制你的服务器 远程控制 Linux 类型的系统的服务器,比如 CentOS 系统的服务器,一般不像 Windows 服务器那样,使用图形界面的远程控制.我们需要使用命令行工具,远程连接到服务器, ...

  8. LAMP坏境和LNMP环境安装Nagios4.1.1和基本配置

    ----------------------------------------以下内容为笔者生产环境的监控,安装都是经过一步步测试的-------------------------------- ...

  9. 烂泥:学习centos之快速搭建LNMP环境

    本文由秀依林枫提供友情赞助,首发于烂泥行天下 以前在centos下安装软件都是喜欢源码安装,不过昨天因为一个事情需要一个centos 下的LNMP环境.反倒不会搞了,今天特意记录下,以备后续使用. 一 ...

随机推荐

  1. 如何利用$_SERVER["PHP_SELF"]变量植入script代码?

    假如我们是黑客,可以诱骗用户访问如下链接, 相当于用户会在浏览器地址栏中输入以下地址: http://www.xxx.com/test_form.php/%22%3E%3Cscript%3Ealert ...

  2. SQL映射文件

     SQL映射文件的几个顶级元素 mapper - namespace cache - 配置给定命名空间的缓存 cache-ref – 从其他命名空间引用缓存配置 resultMap –用来描述数据库结 ...

  3. C#调用C++编译的DLL--

    引用 C#调用C++编译的DLL详解 可以单步跟踪进入dll的源码!每种编程语言调用DLL的方法都不尽相同,在此只对用C#调用DLL的方法进行介绍.首先,您需要了解什么是托管,什么是非托管.一般可以认 ...

  4. liunx工具学习之taskset

    当你优化多线程任务的时候,发现某个线程在不同的核上跳转较大,从而耗费CPU的时候想法肯定是想可以把对应线程绑定到特定的核上,可是每次这样操作每次尝试看效果的时候都要重启进程,那有没有一个工具可以直接处 ...

  5. Linux系统中的一些重要的目录

    Linux系统中的一些重要的目录 1)bin目录 :基础系统所需要的命令位于此目录,是最小系统所需要的命令,如:ls, cp, mkdir等.这个目录中的文件都是可执行的,一般的用户都可以使用2)sb ...

  6. JavaScript HTML Handlebars Template

    /********************************************************************* * JavaScript HTML Handlebars  ...

  7. [javascript]复制到剪切板

    <!-- 一个简单的小栗子 --> <button class="copy-link" data-fulllink="要被复制的内容在这里-" ...

  8. NET MVC 升级到5.1后,View视图中代码报错

    使用nuget将项目中MVC4 升级到MVC5,之后项目还可以正常编译运行, 但View视图中相关的很多代码都报错,比如: 1.@model找不到 2.@Html找不到,本该是System.Web.M ...

  9. Codeforces 620E New Year Tree【线段树傻逼题】

    LINK 题目大意 给你一棵树 让你支持子树染色,子树查询颜色个数,颜色数<=60, 节点数<=4e5 思路 因为颜色数很少,考虑状态压缩变成二进制 然后直接在dfs序上用线段树维护就可以 ...

  10. Django的MultipleChoiceField处理小技巧

    1.如果遇到多选择的,在收到数据时一般需要做处理 tag_id = fields.MultipleChoiceField( choices=[], widget=widgets.CheckboxSel ...