<>LNMP架构介绍


LNMP:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Mysql是一个小型关系型数据库管理系统。PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。

原理:浏览器发送http
request请求到服务器(Nginx),服务器响应并处理web请求,将一些静态资源(CSS,图片,视频等)保存服务器上,然后将php脚本通过接口传输协议(网关协议)PHP-FCGI(fast-cgi)传输给PHP-FPM(进程管理程序),PHP-FPM不做处理,然后PHP-FPM调用PHP解析器进程,PHP解析器解析php脚本信息。PHP解析器进程可以启动多个,进行并发执行。然后将解析后的脚本返回到PHP-FPM,PHP-FPM再通过fast-cgi的形式将脚本信息传送给Nginx.服务器再通过Http
response的形式传送给浏览器。浏览器再进行解析与渲染然后进行呈现。

图解:


<>LNMP搭建

系统环境: RHEL6 x86-64 selinux and iptables disabled

本篇博客中涉及的所有软件包下载可参考此博客:
https://blog.csdn.net/qq657886445/article/details/83662696
<https://blog.csdn.net/qq657886445/article/details/83662696>
<>Mysql 编译安装 yum install -y cmake-2.8.12.2-4.el6.x86_64.rpm

yum install -y gcc gcc-c++ ncurses-devel bison openssl-devel
#解决软件包依赖,不装这些依赖,等下cmake时会报错(这些依赖也可以根据报错一个一个解决,缺什么装什么即可)

tar zxf mysql-boost-5.7.17.tar.gz #此压缩包需自行下载 cd mysql-5.7.17/ cat
CMakeLists.txt #每次cmake都会缓存在此文件,要是cmake报错之后要先删除此文件,再cmake cmake
-DCMAKE_INSTALL_PREFIX=/usr/local/lamp/mysql
-DMYSQL_DATADIR=/usr/local/lamp/mysql/data
-DMYSQL_UNIX_ADDR=/usr/local/lamp/mysql/data/mysql.sock
-DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1
-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all
-DWITH_BOOST=boost/boost_1_59_0/ # 指定安装目录,数据存放目录,Unix socket 文件路径,安装 myisam
存储引擎,安装 innodb 存储引擎,使用 utf8
字符,校验字符,安装所有扩展字符集,安装boots库(要是压缩包中没有boots则需自行下载,一般xxx-boots这类压缩包中都带有boots)

make && make install

注:重新编译时,需要清除旧的对象文件和缓存信息
make clean
rm -f CmakeCache.txt
cd /usr/local/lnmp/mysql/support-files cp my-default.cnf /etc/my.cnf cp
mysql.server /etc/init.d/mysqld vim /etc/my.cnf

groupadd -g 27 mysql useradd -g 27 -u 27 -M -d /usr/local/lnmp/mysql/ -s
/sbin/nologin mysql

vi ~/.bash_profile PATH=$PATH:/usr/local/lnmp/mysql/bin #添加环境变量 source
~/.bash_profile #使之生效

mysqld --initialize --user=mysql #数据库初始化,此时登陆数据库无法查看信息
mysql_secure_installation #按提示完成 mysql 安全设置,生产环境推荐使用 [root@server6 mysql]#
mysql_secure_installation Enter password for user root: #此处密码为上一条初始化命令生成的密码 New
password: #设定新密码 Re-enter new password: #再次输入新密码 Press y|Y for Yes, any other
key for No: # 只有y或Y表示yes其余全为NO Change the password for root ? ((Press y|Y for
Yes, any other key for No) : # 由于数据库密码设置要求过高,要是设定的密码较简单,此处直接回车,若是选择y则会重新设置密码
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y #
是否移除匿名用户 Disallow root login remotely? (Press y|Y for Yes, any other key for
No) : y # 是否不让root用户远程登陆 Remove test database and access to it? (Press y|Y for
Yes, any other key for No) : y # 删除test库和对test库的访问权限 Reload privilege tables
now? (Press y|Y for Yes, any other key for No) : y # 刷新授权表使修改生效 cd
/usr/local/lnmp/mysql/ #为安全起见修改权限 chown -R root . chown -R mysql data

/etc/init.d/mysqld start # 启动服务

<>php编译及配置 yum install -y libmcrypt-2.5.8-9.el6.x86_64.rpm
libmcrypt-devel-2.5.8-9.el6.x86_64.rpm net-snmp-devel curl-devel libxml2-devel
openssl-devel gmp-devel # 解决软件包依赖(和mysql一样,依赖可以根据编译报错一个一个解决,缺什么装什么即可)

rpm -ivh re2c-0.13.5-1.el6.x86_64.rpm

tar jxf php-5.6.35.tar.bz2 cd php-5.6.35 yum install libjpeg-devel -y



yum install libpng-devel -y

yum install freetype-devel -y

./configure --prefix=/usr/local/lnmp/php
--with-config-file-path=/usr/local/lnmp/php/etc --with-mysql=mysqlnd
--with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-openssl --with-snmp
--with-gd --with-zlib --with-curl --with-libxml-dir --with-png-dir
--with-jpeg-dir --with-freetype-dir --with-pear --with-gettext --with-gmp
--enable-inline-optimization --enable-soap --enable-ftp --enable-sockets
--enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx
--with-libdir=lib64 --with-ldap --with-ldap-sasl --with-mcrypt --with-mhash

make && make install cd /usr/local/lnmp/php/etc cp php-fpm.conf.default
php-fpm.conf


vim php-fpm.conf pid = run/php-fpm.pid # 去掉此行注释

cp /mnt/php-5.6.35/php.ini-production /usr/local/lnmp/php/etc/php.ini #
将配置文件复制到指定路径

vim /usr/local/lnmp/php/etc/php.ini #更改时区

cp /mnt/php-5.6.35/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm #将启动脚本复制到指定路径
chmod +x /etc/init.d/php-fpm #给启动脚本加以执行权限

useradd -M -d /usr/local/lnmp/nginx/ -u 800 nginx

/etc/init.d/php-fpm start # 启动服务

<>Nginx编译安装 tar zxf nginx-1.14.0.tar.gz cd nginx-1.14.0

yum install -y gcc openssl-devel pcre-devel # 解决软件包依赖,gcc openssl-devel 之前已经安装

vim nginx-1.14.0/src/core/nginx.h #删除nginx版本信息,为了安全,这样编译后外界无法获取程序的版本号

vim auto/cc/gcc #注释掉debug,编译以后程序只有几百 k

./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module
--with-http_stub_status_module --with-threads --with-file-aio --user=nginx
--group=nginx

vim /usr/local/lnmp/nginx/conf/nginx.conf #编辑配置文件 location ~ \.php$ {
#以.php结尾的访问,让php-fpm去管理这些访问进程 root html; fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php; #fastcgi_param SCRIPT_FILENAME
/scripts$fastcgi_script_name; include fastcgi.conf; }

location / { #将index.php置于默认发布页面最前面 root html; index index.php index.html
index.htm; }

ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/
#为了方便调用,将nginx启动脚本链接到/usr/local/sbin/或者/sbin/下

nginx -t # 检查是否有语法错误

vim /etc/security/limits.conf # 修改允许服务最大打开文件数

nginx # 开启nginx

vim /usr/local/lnmp/nginx/html/index.html

打开浏览器访问ip测试:

<>论坛的搭建
将下载的论坛压缩包解压到nginx的默认发布目录下

浏览器访问ip/upload 安装论坛
1)点击我同意

2)由于文件权限问题报错

修改相关文件权限即可

刷新网页,点击下一步继续

3)选择全新安装

4)填写mysql信息和管理员用户名及密码

5)显示数据库连接错误
需在/usr/local/lnmp/php/etc/php.ini文件中指定php连接mysql的通信接口,共有三处,完成后重新加载php




6)刷新网页继续安装,又会报错

这是连接数据库权限不够,修改数据库data目录权限为755即可

刷新网页继续安装

7)此时论坛已安装完成,点击右下角访问即可查看

8)在右上角管理员登陆登陆

9)至此lnmp架构搭建完成

数据库disczu已经自动创建

点击右上角管理中心,管理员登陆。

为了避免二次安装,会提示Please delete install/index.php via FTP!

直接删除upload/install/index.php文件,刷新网页即可
rm -fr /usr/local/lamp/nginx/html/upload/install/index.php