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包和编译工具
2)编译(此时报错)
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 #安装所有扩展字符集
make && make install
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 #脚本文件
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 # 文件路径
2)新建mysql用户,指定uid、gid和家目录
groupadd -g 27 mysql
useradd -u 27 -g 27 -M -d /usr/local/lnmp/mysql/data -s /sbin/nologin mysql
3)修改mysql/目录权限
[root@server2 mysql]# chown -R mysql.mysql .
4)修改 ~/.bash_profile,添加环境变量
source ~/.bash_profile 使配置生效
5)mysqld --initialize --user=mysql #初始化mysql
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用户可写
[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 输入新密码
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
编译:
[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
缺少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 * 查看是哪个安装包里的配件
出现以下页面表示成功了第一步。
然后执行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
c).复制启动文件并授权
d).复制配置文件并配置时区
e).启动服务并查看监听端口
[root@server2 ~]# /etc/init.d/php-fpm start
[root@server2 ~]# netstat -antlp
9000端口是打开状态,php安装完成
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
2)隐藏版本(删除14行nginx之后的内容)
[root@server2 nginx-1.6.2]# cd src/core/
[root@server2 core]# vim nginx.h
3)注释debug下的内容(174行),纯净安装
[root@server2 nginx-1.6.2]# vim auto/cc/gcc
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
7)修改最大连接数,添加环境变量
[root@server2 ~]# cd /usr/local/lnmp/nginx/
[root@server2 nginx]# vim conf/nginx.conf
[root@server2 nginx]# vim /etc/security/limits.conf
[root@server2 ~]# vim .bash_profile
[root@server2 ~]# source .bash_profile
8)修改配置文件(/usr/local/lnmp/nginx/conf/nginx.conf)
设置php页面首先检测
[root@server2 ~]# vim /usr/local/lnmp/nginx/conf/nginx.conf
与php结合
编写php默认目录
[root@server2 ~]# cd /usr/local/lnmp/nginx/html/
[root@server2 html]# vim index.php
9)重新加载配置文件并访问
[root@server2 html]# nginx -s reload
至此,php安装完成。
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/
2).修改upload目录名称
[root@server2 html]# mv upload/ bbs
3).进入网页安装
http://172.25.0.117/bbs/install/
4)检测安装环境,权限不够,需要修改权限
[root@server2 bbs]# chmod 777 config/ data/ uc_client/ uc_server/ -R
5)安装数据库
数据库连接错误!!
修改配置文件,重新加载php
[root@server2 ~]# cd /usr/local/lnmp/php/etc/
[root@server2 etc]# vim php.ini
[root@server2 etc]# /etc/init.d/php-fpm reload
数据库data目录权限不够
[root@server2 ~]# cd /usr/local/lnmp/mysql/
[root@server2 mysql]# chmod 755 data/
再次刷新重试
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
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扩展模块
添加环境变量,并使其生效
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
4).修改配置文件(php-memcache模块扩展),并查看扩展的memcache模块是否加载
[root@server2 ~]# vim /usr/local/lnmp/php/etc/php.ini
[root@server2 ~]# /etc/init.d/php-fpm reload
5).查看 memcache 端口(memcache监听11211端口)
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
22,23行设置用户和密码,28行并指定本机的11211端口
[root@server2 html]# vim example.php
[root@server2 html]# nginx -s reload
访问 http://172.25.0.117/memcache.php输入用户及密码
此时的命中率为50,再次访问时,查看命中率的改变:(即进入example.php界面,然后再次进入memcache.php界面,查看命中率):此时,命中率有了一定的提高,意思是,所读取的内容是从缓存中进行拿取的,提高了速度,也减轻了后台服务器的压力)
访问:http://172.25.0.117/example.php
物理主机测试
[root@foundation78 lamp]# ab -c 10 -n 1000 http://172.25.0.117/example.php
[root@foundation78 lamp]# ab -c 10 -n 1000 http://172.25.0.117/memcache.php
[root@foundation78 lamp]# ab -c 10 -n 1000 http://172.25.0.117/index.php
使用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/
2)重新启动服务:
[root@server2 nginx]# cd sbin/
[root@server2 sbin]# ./nginx
3)访问172.25.0.117
4)修改配置文件
[root@server2 conf]# vim nginx.conf
##设定负载均衡的服务器列表,可以指定多个服务器。##keepalive指令是指http-upstream-keeplive-module提供的功能,这里最大保持512个立即不关闭的连接用于提高性能
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表示缓存失效时间,以秒记,实际应用中根据具体情况设置。
location ~ \.php$ { ##设置url以.php结尾
##~ \.php$这个location配置了缓存,这表示所有以.php结尾的请求结果都会被缓存。srcache_fetch表示注册一个输入拦截处理器到 location,这个配置进入时将被执行;而srcache_store表示注册一个输出拦截器到location,当location执行完成输出时 会被执行。完成以上配置后,相当于对nginx增加了这些逻辑:当所有请求以"'.php"结尾时,首先到memcahce中查询有没有以$url$args为key的数据,如果有则返回,否则执行location的逻辑。
重新启动服务:
[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
1.建立虚拟主机 vim /usr/local/lnmp/nginx/conf/nginx.conf
2.建立默认发布目录,编写默认发布文件,重启服务。
3.物理机做解析,并访问测试
4.加密访问
1)修改配置文件
[root@server2 www1]# vim /usr/local/lnmp/nginx/conf/nginx.conf
Nginx 配置Http跳转Https
2)生成认证证书
[root@server2 ~]# cd /etc/pki/tls/
[root@server2 tls]# cd private/
[root@server2 private]# openssl genrsa 1024 > localhost.key 生成服务器私钥
创建证书;
[root@server2 certs]# make cert.pem
3)重启服务,并查看是否有443端口
[root@server2 certs]# mv cert.pem /usr/local/lnmp/nginx/conf/
[root@server2 certs]# nginx -s reload
4)访问www.westos.org,检测是否加密成功
查看证书:
ssl加密成功。