LNMP是指LNMP==Linux+Nginx+Mysql+PHP的结构体系。其工作原理如下:

首先,浏览器发送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的形式传送给浏览器。浏览器再进行解析与渲染然后进行呈现。

1.mysql源码安装

1)下载mysql包和编译工具

LNMP搭建及php+memcache-LMLPHP

2)编译(此时报错)

LNMP搭建及php+memcache-LMLPHP

yum install -y gcc gcc-c++ ncurses-devel bison openssl-devel zlib-devel   ##安装依赖包

再次编译时,清空Cmakecache,否则 cmake 时会读取错误文件           rm -fr CMakeCache.txt

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     #安装 myisam 存储引擎
> -DWITH_INNOBASE_STORAGE_ENGINE=1   #安装 innodb 存储引擎
> -DDEFAULT_CHARSET=utf8      #使用 utf8 字符
> -DDEFAULT_COLLATION=utf8_general_ci    #校验字符  
> -DEXTRA_CHARSETS=all     #安装所有扩展字符集

LNMP搭建及php+memcache-LMLPHP

make && make install

LNMP搭建及php+memcache-LMLPHP

3)mysql配置

[root@server2 mysql-5.7.17]# cd /usr/local/lnmp/mysql/

[root@server2 mysql]# cd support-files/
[root@server2 support-files]# ls
magic  my-default.cnf  mysqld_multi.server  mysql-log-rotate  mysql.server
[root@server2 support-files]# cp my-default.cnf /etc/my.cnf
cp: overwrite `/etc/my.cnf'? y

[root@server2 support-files]# cp mysql.server /etc/init.d/mysqld   #脚本文件

LNMP搭建及php+memcache-LMLPHP

LNMP搭建及php+memcache-LMLPHP

1)修改配置文件/etc/my.cnf

basedir =/usr/local/lnmp/mysql/               #安装路径
datadir =/usr/local/lnmp/mysql/data        #数据存放路径
port =3306                                                #端口
# server_id = .....
socket =/usr/local/lnmp/mysql/data/mysql.sock    # 文件路径

LNMP搭建及php+memcache-LMLPHP

2)新建mysql用户,指定uid、gid和家目录

groupadd -g 27 mysql

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

LNMP搭建及php+memcache-LMLPHP

3)修改mysql/目录权限

[root@server2 mysql]# chown -R mysql.mysql .

LNMP搭建及php+memcache-LMLPHP

4)修改 ~/.bash_profile,添加环境变量

source ~/.bash_profile 使配置生效

LNMP搭建及php+memcache-LMLPHP

LNMP搭建及php+memcache-LMLPHP

5)mysqld --initialize --user=mysql  #初始化mysql

LNMP搭建及php+memcache-LMLPHP

BR5T+l9a/wy# 是初始化密码

6)开启mysql服务,安全初始化:mysql_secure_installation

[root@server2 mysql]# /etc/init.d/mysqld start
[root@server2 mysql]# chown root . -R    #为了安全,改回权限
[root@server2 mysql]# chown mysql data/ -R   #只将data文件设为mysql用户可写

LNMP搭建及php+memcache-LMLPHP
[root@server2 mysql]# mysql_secure_installation
    Enter password for user root:            #输入初始化密码
    New password:                   #输入新密码
    enter new password:
    Re-Change the password for root ? ((Press y|Y for Yes, any other key for No) :
    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    #删除测试数据库并访问
    Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y   #重新加载权限表

6).登陆测试

mysql  -p  输入新密码

LNMP搭建及php+memcache-LMLPHP

 

2.PHP源码安装

1).下载PHP需要的数据包

libmcrypt-2.5.8-9.el6.x86_64.rpm        php-5.6.35.tar.bz2
libmcrypt-devel-2.5.8-9.el6.x86_64.rpm  re2c-0.13.5-1.el6.x86_64.rpm

2).解压编译,安装php所有依赖性

[root@server2 ~]# tar jxf php-5.6.35.tar.bz2

[root@server2 ~]# yum install libmcrypt-* -y

[root@server2 ~]# rpm -ivh re2c-0.13.5-1.el6.x86_64.rpm

LNMP搭建及php+memcache-LMLPHP

LNMP搭建及php+memcache-LMLPHP

编译:

[root@server2 php-5.6.35]# ./configure --prefix=/usr/local/lnmp/php --with-config-file-path=/usr/local/lnmp/php/etc --with-mysql=mysqlnd --enable-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-mcrypt --with-mhash

LNMP搭建及php+memcache-LMLPHP

缺少libxml2包,安装即可。就不一一列举了,此处同时安装多个依赖包

[root@server2 php-5.6.35]# yum install -y openssl-devel curl-devel gd-devel-2.0.35-11.el6.x86_64.rpm gmp-devel libmcrypt-* net-snmp-devel  libxml2-devel libpng-devel

然后继续编译,有报错继续安装。可用命令 yum provides * 查看是哪个安装包里的配件

出现以下页面表示成功了第一步。

LNMP搭建及php+memcache-LMLPHP

然后执行make && make  install 完成编译

3)php简单配置

a).创建nginx用户,指定家目录

[root@server2 php-5.6.35]# useradd -M -d /usr/local/lnmp/nginx -s /sbin/nologin nginx

b).复制配置文件并添加pid

LNMP搭建及php+memcache-LMLPHP

LNMP搭建及php+memcache-LMLPHP

c).复制启动文件并授权

LNMP搭建及php+memcache-LMLPHP

d).复制配置文件并配置时区

LNMP搭建及php+memcache-LMLPHP

LNMP搭建及php+memcache-LMLPHP

e).启动服务并查看监听端口

[root@server2 ~]# /etc/init.d/php-fpm start

[root@server2 ~]# netstat -antlp

LNMP搭建及php+memcache-LMLPHP

9000端口是打开状态,php安装完成

 

3.nginx源码安装

1).下载nginx需要的数据包,解压

nginx-1.6.2.tar.gz
nginx-goodies-nginx-sticky-module-ng-08a395c66e42.tar.gz

[root@server2 ~]# tar zxf nginx-1.6.2.tar.gz
[root@server2 ~]# tar zxf nginx-goodies-nginx-sticky-module-ng-08a395c66e42.tar.gz

LNMP搭建及php+memcache-LMLPHP

2)隐藏版本(删除14行nginx之后的内容)

[root@server2 nginx-1.6.2]# cd src/core/
[root@server2 core]# vim nginx.h

LNMP搭建及php+memcache-LMLPHP

3)注释debug下的内容(174行),纯净安装

[root@server2 nginx-1.6.2]# vim auto/cc/gcc

LNMP搭建及php+memcache-LMLPHP

4)解决依赖关系需要安装的包

[root@server2 nginx-1.6.2]# yum install -y pcre-devel

5)源码安装

[root@server2 nginx-1.6.2]# ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --user=nginx --group=nginx --with-threads --with-file-aio --add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42

完成之后make && make install

6).创建软连接,检测nginx是否正常,并开启服务

[root@server2 nginx-1.6.2]# ln -s /usr/local/lnmp/nginx/sbin/nginx   /sbin/
[root@server2 nginx-1.6.2]# nginx
[root@server2 nginx-1.6.2]# netstat -antlp |grep nginx

LNMP搭建及php+memcache-LMLPHP

7)修改最大连接数,添加环境变量

[root@server2 ~]# cd /usr/local/lnmp/nginx/

[root@server2 nginx]# vim conf/nginx.conf

LNMP搭建及php+memcache-LMLPHP

[root@server2 nginx]# vim /etc/security/limits.conf

LNMP搭建及php+memcache-LMLPHP

[root@server2 ~]# vim .bash_profile

[root@server2 ~]# source .bash_profile

LNMP搭建及php+memcache-LMLPHP

8)修改配置文件(/usr/local/lnmp/nginx/conf/nginx.conf)

设置php页面首先检测

[root@server2 ~]# vim /usr/local/lnmp/nginx/conf/nginx.conf

LNMP搭建及php+memcache-LMLPHP

与php结合

LNMP搭建及php+memcache-LMLPHP

编写php默认目录

[root@server2 ~]# cd /usr/local/lnmp/nginx/html/

[root@server2 html]# vim index.php

LNMP搭建及php+memcache-LMLPHP

9)重新加载配置文件并访问

[root@server2 html]# nginx -s reload

LNMP搭建及php+memcache-LMLPHP

至此,php安装完成。

 

4.mysql + php + nginx 搭建论坛

1)下载论坛模版,解压到/usr/local/lnmp/nginx/html/目录下

[root@server2 html]# yum install unzip -y

[root@server2 html]# unzip Discuz_X3.2_SC_UTF8.zip -d /usr/local/lnmp/nginx/html/

LNMP搭建及php+memcache-LMLPHP

2).修改upload目录名称

[root@server2 html]# mv upload/ bbs

LNMP搭建及php+memcache-LMLPHP

3).进入网页安装

http://172.25.0.117/bbs/install/

LNMP搭建及php+memcache-LMLPHP

4)检测安装环境,权限不够,需要修改权限

LNMP搭建及php+memcache-LMLPHP

 

[root@server2 bbs]# chmod 777 config/ data/ uc_client/ uc_server/ -R

LNMP搭建及php+memcache-LMLPHP

5)安装数据库

LNMP搭建及php+memcache-LMLPHP

数据库连接错误!!

LNMP搭建及php+memcache-LMLPHP

修改配置文件,重新加载php

[root@server2 ~]# cd /usr/local/lnmp/php/etc/

[root@server2 etc]# vim php.ini

[root@server2 etc]# /etc/init.d/php-fpm reload

LNMP搭建及php+memcache-LMLPHP

LNMP搭建及php+memcache-LMLPHP

LNMP搭建及php+memcache-LMLPHP

数据库data目录权限不够

[root@server2 ~]# cd /usr/local/lnmp/mysql/

[root@server2 mysql]# chmod 755 data/

LNMP搭建及php+memcache-LMLPHP

再次刷新重试

LNMP搭建及php+memcache-LMLPHP

LNMP搭建及php+memcache-LMLPHP

6).删除/usr/local/lnmp/nginx/html/bbs/install/index.php , 避免重复安装

[root@server2 ~]# cd /usr/local/lnmp/nginx/html/bbs/

[root@server2 bbs]# cd install/

[root@server2 install]# rm -fr index.php

LNMP搭建及php+memcache-LMLPHP

5.php添加memcach模块,测试访问压力

php+memcache
client—->nginx—->php-fpm—->php+memcache

memcache是一个高性能的分布式内存对象缓存系统,通过在内存里维护一个巨大的hash表,能够用来存储各种格式的数据。可以类比于 mysql这样的服务,而php扩展memcache实际上是连接memcahe的方式,一般的使用目的是通过缓存数据查询结果,减少终端的访问次数,以 提高动态web应用的速度,提高扩展性能。

1).下载memcache-2.2.5.tgz,并解压

[root@server2 ~]# tar zxf memcache-2.2.5.tgz

2).添加phpize命令

当php编译完成后,php的bin目录下会有phpize这个脚本文件。在编译你要添加的扩展模块之前,执行phpize命令,这里在php中加入memcache扩展模块

添加环境变量,并使其生效

LNMP搭建及php+memcache-LMLPHP

LNMP搭建及php+memcache-LMLPHP

LNMP搭建及php+memcache-LMLPHP

3).执行phpize后,编译、安装 memcached

[root@server2 memcache-2.2.5]# ./configure   --prefix=/usr/local/lnmp/php/memcache

[root@server2 memcache-2.2.5]# make

[root@server2 memcache-2.2.5]# make install

[root@server2 memcache-2.2.5]# yum install memcached -y

[root@server2 memcache-2.2.5]# /etc/init.d/memcached start

LNMP搭建及php+memcache-LMLPHP

 

4).修改配置文件(php-memcache模块扩展),并查看扩展的memcache模块是否加载

[root@server2 ~]# vim /usr/local/lnmp/php/etc/php.ini

[root@server2 ~]# /etc/init.d/php-fpm reload

LNMP搭建及php+memcache-LMLPHP

LNMP搭建及php+memcache-LMLPHP

5).查看 memcache 端口(memcache监听11211端口)

LNMP搭建及php+memcache-LMLPHP

6).设置 memcache.php , example.php

[root@server2 memcache-2.2.5]# cp memcache.php example.php /usr/local/lnmp/nginx/html/

[root@server2 memcache-2.2.5]# cd /usr/local/lnmp/nginx/html/

[root@server2 html]# vim memcache.php

LNMP搭建及php+memcache-LMLPHP

22,23行设置用户和密码,28行并指定本机的11211端口

LNMP搭建及php+memcache-LMLPHP

[root@server2 html]# vim example.php

[root@server2 html]# nginx -s reload

LNMP搭建及php+memcache-LMLPHP

访问 http://172.25.0.117/memcache.php输入用户及密码

LNMP搭建及php+memcache-LMLPHP

LNMP搭建及php+memcache-LMLPHP

此时的命中率为50,再次访问时,查看命中率的改变:(即进入example.php界面,然后再次进入memcache.php界面,查看命中率):此时,命中率有了一定的提高,意思是,所读取的内容是从缓存中进行拿取的,提高了速度,也减轻了后台服务器的压力)

访问:http://172.25.0.117/example.php

LNMP搭建及php+memcache-LMLPHP

LNMP搭建及php+memcache-LMLPHP

物理主机测试

[root@foundation78 lamp]# ab -c 10 -n 1000 http://172.25.0.117/example.php

LNMP搭建及php+memcache-LMLPHP

[root@foundation78 lamp]# ab -c 10 -n 1000 http://172.25.0.117/memcache.php

LNMP搭建及php+memcache-LMLPHP

[root@foundation78 lamp]# ab -c 10 -n 1000 http://172.25.0.117/index.php

LNMP搭建及php+memcache-LMLPHP

使用openresty软件:

OpenResty的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应

此处openresty与nginx是实现同样的功能的,所以必须将nginx进行关闭,否则会发生冲突

进行概念的简单理解:此处是在nginx处进行了一个缓存,使得整个一个从客户端到最后的数据库端,所经历的nginx,php-fpm,php之间,nginx处,php处均进行了一个缓存,这样是会使得服务器的压力大大降低,在并发行很大的情况下,不会使得服务器宕机

使用的包:openresty-1.13.6.1.tar.gz

[root@server2 ~]# nginx -s stop

1.解压编译:

[root@server2 ~]# tar zxf openresty-1.13.6.1.tar.gz

[root@server2 openresty-1.13.6.1]# ./configure --prefix=/usr/local/openresty

[root@server2 openresty-1.13.6.1]# gmake

[root@server2 openresty-1.13.6.1]# gmake install

安装后所处目录:

[root@server2 openresty-1.13.6.1]# cd /usr/local/openresty/nginx/

LNMP搭建及php+memcache-LMLPHP

2)重新启动服务:

[root@server2 nginx]# cd sbin/

[root@server2 sbin]# ./nginx

LNMP搭建及php+memcache-LMLPHP

3)访问172.25.0.117

LNMP搭建及php+memcache-LMLPHP

4)修改配置文件

[root@server2 conf]# vim nginx.conf

##设定负载均衡的服务器列表,可以指定多个服务器。##keepalive指令是指http-upstream-keeplive-module提供的功能,这里最大保持512个立即不关闭的连接用于提高性能

LNMP搭建及php+memcache-LMLPHP

memc_send_timeout 100ms;    ##后端服务器数据回传时间

memc_read_timeout 100ms;    ##连接成功后,后端服务器响应时间

##这里为memc-nginx-module配置location,我们配置为 /memc,所有请求都通过这个locaion来操作memcache,memc-nginx-module存取memcache是基于http/method语义的,使http的GET方法表示get,PUT方法表示set,DELETE方法表示delete。internal表示只接受内部网络,不接受外部http请求,如果需要接受外部访问 ,可以使用allow和deny来指令控制权限。$memc_key表示以什么key,这里直接使用nginx内置的$query_string来作为 key,$memc_exptime表示缓存失效时间,以秒记,实际应用中根据具体情况设置。

LNMP搭建及php+memcache-LMLPHP

location ~ \.php$ {        ##设置url以.php结尾

##~ \.php$这个location配置了缓存,这表示所有以.php结尾的请求结果都会被缓存。srcache_fetch表示注册一个输入拦截处理器到 location,这个配置进入时将被执行;而srcache_store表示注册一个输出拦截器到location,当location执行完成输出时 会被执行。完成以上配置后,相当于对nginx增加了这些逻辑:当所有请求以"'.php"结尾时,首先到memcahce中查询有没有以$url$args为key的数据,如果有则返回,否则执行location的逻辑。

LNMP搭建及php+memcache-LMLPHP

重新启动服务:

[root@server2 conf]# /usr/local/openresty/nginx/sbin/nginx -t

[root@server2 conf]# /usr/local/openresty/nginx/sbin/nginx -s reload

测试:

[root@foundation78 lamp]# ab -c 10 -n 50000 http://172.25.0.117/index.php

LNMP搭建及php+memcache-LMLPHP

6.nginx(ssl)模块使用

1.建立虚拟主机 vim /usr/local/lnmp/nginx/conf/nginx.conf

LNMP搭建及php+memcache-LMLPHP

2.建立默认发布目录,编写默认发布文件,重启服务。

LNMP搭建及php+memcache-LMLPHP

3.物理机做解析,并访问测试

LNMP搭建及php+memcache-LMLPHP

LNMP搭建及php+memcache-LMLPHPLNMP搭建及php+memcache-LMLPHP

4.加密访问

1)修改配置文件

[root@server2 www1]# vim /usr/local/lnmp/nginx/conf/nginx.conf

Nginx 配置Http跳转Https

LNMP搭建及php+memcache-LMLPHP

2)生成认证证书

[root@server2 ~]# cd /etc/pki/tls/

[root@server2 tls]# cd private/

[root@server2 private]# openssl genrsa 1024 > localhost.key            生成服务器私钥

LNMP搭建及php+memcache-LMLPHP

LNMP搭建及php+memcache-LMLPHP

创建证书;

[root@server2 certs]# make cert.pem

LNMP搭建及php+memcache-LMLPHP

3)重启服务,并查看是否有443端口

[root@server2 certs]# mv cert.pem /usr/local/lnmp/nginx/conf/

[root@server2 certs]# nginx -s reload

LNMP搭建及php+memcache-LMLPHP

4)访问www.westos.org,检测是否加密成功

LNMP搭建及php+memcache-LMLPHP

查看证书:

LNMP搭建及php+memcache-LMLPHP

LNMP搭建及php+memcache-LMLPHP

ssl加密成功。

 

 

10-05 19:41