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
1.mysql数据库
一.编译与安装(安装包需要下载好)
先建立一个lnmp目录 mkdir /usr/local/lnmp/
tar zxvf mysql-5.5.12.tar.gz
yum install cmake-2.8.12.2-4.el6.x86_64.rpm -y
yum install -y gcc gcc-c++ ncurses-devel bison 下载依赖包
##在目录/mnt/lnmp/mysql-5.7.17下面安装:
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql \
-DMYSQL_DATADIR=/usr/local/lnmp/mysql/data \
-DMYSQL_UNIX_ADDR=/usr/local/lnmp/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/
##更改虚拟机的内存和磁盘大小
make && make install
##重新编译时,需要清除旧的对象文件和缓存信息
make clean
rm -f CmakeCache.txt 次cmake都会缓存在此文件,要是cmake报错之后要先删除此文件,再cmake
##完成
[root@server1 mysql-5.7.17]# cd /usr/local/lnmp/
[root@server1 lnmp]# cd mysql/
[root@server1 mysql]# ll 会出现mysql的目录
total 56
drwxr-xr-x 2 root root 4096 Feb 16 15:10 bin
-rw-r--r-- 1 root root 17987 Nov 28 2016 COPYING
drwxr-xr-x 2 root root 4096 Feb 16 15:10 docs
drwxr-xr-x 3 root root 4096 Feb 16 15:10 include
drwxr-xr-x 4 root root 4096 Feb 16 15:10 lib
drwxr-xr-x 4 root root 4096 Feb 16 15:10 man
drwxr-xr-x 10 root root 4096 Feb 16 15:10 mysql-test
-rw-r--r-- 1 root root 2478 Nov 28 2016 README
drwxr-xr-x 28 root root 4096 Feb 16 15:10 share
drwxr-xr-x 2 root root 4096 Feb 16 15:10 support-files
二.mysql的配置:
[root@server1 mnt]# cp /mnt/mysql-5.7.17/support-files/mysql.server /etc/init.d/mysqld
[root@server1 mnt]# cd /etc/init.d/
[root@server1 init.d]# chmod +x mysqld ##拷贝启动脚本到系统中,并给执行权限
[root@server1 etc]# cp my.cnf my.cnf.bak
[root@server1 etc]# cd /mnt/mysql-5.7.17/
[root@server1 mysql-5.7.17]# cd support-files/
[root@server1 support-files]# cp my-default.cnf /etc/my.cnf ##根据你的主机内存复制 mysql 配置文件
[root@server1 etc]# vim my.cnf ###编辑配置文件
basedir = /usr/local/lnmp/mysql
datadir = /usr/local/lnmp/mysql/data
socket = /usr/local/lnmp/mysql/data/mysql.sock
[root@server1 etc]# groupadd -g 27 mysql 建立mysql用户和mysql用户组
[root@server1 etc]# useradd -u 27 -g 27 mysql
[root@server1 etc]# chown mysql.mysql /usr/local/lnmp/mysql/ -R
[root@server1 etc]# vim ~/.bash_profile ##编译环境变量
PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin
[root@server1 etc]# source ~/.bash_profile ##使其生效
[root@server1 etc]# chown root /usr/local/lnmp/mysql/ -R
[root@server1 mysql]# mkdir data
[root@server1 mysql]# chown mysql.mysql data/
[root@server1 mysql]# mysqld --user=mysql --initialize
[root@server1 mysql]# /etc/init.d/mysqld start ##启动服务
[root@server1 mysql]# mysql_secure_installation -pqGJ6d_rJuSj2
[root@server1 mysql]# mysql -uroot -pwestos 初始化配置,加可以登陆数据库了
php编译及配置
一.php编译
yum install libxml2-devel libcurl-devel openssl-devel jpeglib.h libjpeg-turbo-devel png.h freetype-config gmp.h freetype-config -y
yum install libjpeg-turbo-devel-1.2.1
yum install libpng-devel-1.2.49-1.el6_2.x86_64-1.el6.x86_64
yum install freetype-devel-2.3.11-14.el6_3.1.x86_64
yum install gmp-devel-4.3.1-7.el6_2.2.x86_64
yum install freetype-devel-2.3.11-14.el6_3.1.x86_64
yum install libmcrypt-* ##软件包(要下载)
tar jxf php-5.6.35.tar.bz2
cd php-5.6.35
./configure --prefix=/usr/local/lnmp/php --with-config-file-path=/usr/local/lnmp/php/etc --with-openssl --with-snmp --with-gd --with-zlib --with-curl --with-libxml-dir --with-png-dir --with-jpeg-dir --with-freetype-dir --with-gmp --with-gettext --with-pear --enable-mysqlnd --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-inline-optimization --enable-soap --enable-ftp --enable-sockets --enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-mcrypt --with-mhash
make && make install
二.php配置
[root@server1 php]# useradd nginx
[root@server1 php]# id nginx
uid=500(nginx) gid=500(nginx) groups=500(nginx)
[root@server1 php]# cd /usr/local/lnmp/php/etc/
[root@server1 etc]# cp php-fpm.conf.default php-fpm.conf
[root@server1 etc]# vim php-fpm.conf
pid = run/php-fpm.pid ##注释去掉
[root@server1 etc]# cd /mnt/php-5.6.35
[root@server1 php-5.6.35]# cp php.ini-production /usr/local/lnmp/php/etc/php.ini
[root@server1 php-5.6.35]# cd /usr/local/lnmp/php/etc/
[root@server1 etc]# vim php.ini
date.timezone = Asia/shanghai ##修改时区
[root@server1 etc]# cd /mnt/php-5.6.35
[root@server1 php-5.6.35]# cd sapi/
[root@server1 sapi]# cd fpm/
[root@server1 fpm]# cp init.d.php-fpm /etc/init.d/php-fpm ##拷贝启动脚本
[root@server1 fpm]# cd /etc/init.d/
[root@server1 init.d]# chmod +x php-fpm ##给启动脚本执行权限
[root@server1 init.d]# /etc/init.d/php-fpm start ##开启php
Starting php-fpm done
[root@server1 init.d]# netstat -nlpt ###查看php端口
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 873/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 951/master
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 4194/php-fpm
tcp 0 0 :::22 :::* LISTEN 873/sshd
tcp 0 0 ::1:25 :::* LISTEN 951/master
3.nginx的安装配置
[root@server1 ~]# tar zxf nginx-1.14.0.tar.gz
[root@server1 ~]# cd nginx-1.14.0
[root@server1 nginx-1.14.0]# vim src/core/nginx.h ##隐藏版本号
#define nginx_version 1014000
##define NGINX_VERSION "1.14.0"
##define NGINX_VER "nginx/"
[root@server1 nginx-1.14.0]# vim auto/cc/gcc ###注释调debug日至
# debug
# #CFLAGS="$CFLAGS -g"
[root@server1 nginx-1.14.0]# yum install pcre-devel -y ##下载依赖包
[root@server1 nginx-1.14.0]# ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio --user=nginx --group=nginx
[root@server1 nginx-1.14.0]# make && make install
[root@server1 nginx-1.14.0]# cd /usr/local/lnmp/
[root@server1 lnmp]# cd nginx/
[root@server1 nginx]# cd conf/
[root@server1 conf]# ls
fastcgi.conf koi-win scgi_params
fastcgi.conf.default mime.types scgi_params.default
fastcgi_params mime.types.default uwsgi_params
fastcgi_params.default nginx.conf uwsgi_params.default
koi-utf nginx.conf.default win-utf
[root@server1 conf]# vim nginx.conf ##编辑配置文件
location / {
root html;
index index.php index.html index.htm; ##添加php文件类型
}
location ~ \.php$ { ##改为php
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf;
}
[root@server1 sbin]# pwd
/usr/local/lnmp/nginx/sbin
[root@server1 sbin]# ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/ ##做软连接
[root@server1 sbin]# nginx -t
nginx: the configuration file /usr/local/lnmp/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/lnmp/nginx/conf/nginx.conf test is successful
[root@server1 sbin]# nginx
#nginx -t #检测语法
#nginx #运行 nginx
#nginx -s reload #重载主配置文件
#nginx -s stop #关闭 nginx
[root@server1 html]# netstat -nlpt
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4111/nginx
[root@server1 nginx]# ls
client_body_temp fastcgi_temp logs sbin uwsgi_temp
conf html proxy_temp scgi_temp
[root@server1 nginx]# cd html/ ##到nginx的发布目录
[root@server1 html]# vim index.php
<?php
phpinfo()
?>
网页测试:172.25.4.1,出现php测试页
4.搭建论坛
[root@server1 mnt]# yum install unzip -y
[root@server1 mnt]# unzip Discuz_X3.2_SC_UTF8.zip -d /usr/local/lnmp/nginx/html/ ##解压到nginx的发布目录下
[root@server1 mnt]# cd /usr/local/lnmp/nginx/html/
[root@server1 html]# ls
50x.html index.html index.php readme upload utility
[root@server1 html]# mv upload bbs ##修改名字,为了方便
[root@server1 html]# ls
50x.html bbs index.html index.php readme utility
[root@server1 html]# cd bbs/ ##给权限
[root@server1 bbs]# chmod 777 config/ -R
[root@server1 bbs]# chmod 777 data/ -R
[root@server1 bbs]# chmod 777 uc_*/ -R
[root@server1 bbs]# vim /usr/local/lnmp/php/etc/php.ini 文件中指定php连接mysql的通信接口,共有三处,完成后重新加载php
[root@server1 bbs]# /etc/init.d/php-fpm reload
[root@server1 bbs]# cd install/
[root@server1 install]# rm index.php
确保mysql的data权限问题
测试:
172.25.5.1/bbs在网页上创建一个用户
在本地数据库里面可以找到刚才添加的用户
[root@server1 bbs]# mysql -uroot -pwestos
mysql> show databases;
mysql> use ultrax;
Database changed
mysql> show tables;
mysql> select * from pre_ucenter_members ##可以看见刚才创建的用户