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的形式传送给浏览器。浏览器再进行解析与渲染然后进行呈现。
系统环境: RHEL6 x86-64 selinux and iptables disabled
本篇博客中涉及的所有软件包下载可参考此博客:https://blog.csdn.net/qq657886445/article/details/83662696
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 # 启动服务
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 # 启动服务
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
将下载的论坛压缩包解压到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