LNMMP:Memcache+LNMP

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介:

本次试验主要作用:

1、利用Nginx实现LNMP动静分离;

2、利用Memcache对php查询做缓存;

大致规划:

主机 IP 描述
nginx 192.168.0.111 Nginx作为代理服务器实现动静分离
php 192.168.0.112 处理动态请求
httpd 192.168.0.113 处理静态请求
mariadb 192.168.0.114 数据库存储
memcache 192.168.0.115 对php查询做缓存

一、安装配置Nginx

下载安装包:http://nginx.org/ 目前稳定版本是1.4最新

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
[root@node1 ~] # ls
anaconda - ks.cfg  install.log  install.log.syslog  nginx - 1.4 . 7   nginx - 1.4 . 7.tar .gz
[root@node1 ~] # cd nginx-1.4.7
[root@node1 nginx - 1.4 . 7 ] # ls
CHANGES  CHANGES.ru  LICENSE  Makefile  README  auto  conf  configure  contrib  html  man  objs  src
[root@node1 nginx - 1.4 . 7 ] # ./configure \
>    - - prefix = / usr \
>    - - sbin - path = / usr / sbin / nginx \
>    - - conf - path = / etc / nginx / nginx.conf \
>    - - error - log - path = / var / log / nginx / error.log \
>    - - http - log - path = / var / log / nginx / access.log \
>    - - pid - path = / var / run / nginx / nginx.pid  \
>    - - lock - path = / var / lock / nginx.lock \
>    - - user = nginx \     #注意这里用的nginx用户,等下就需要创建对应用户
>    - - group = nginx \
>    - - with - http_ssl_module \
>    - - with - http_flv_module \
>    - - with - http_stub_status_module \
>    - - with - http_gzip_static_module \
>    - - http - client - body - temp - path = / var / tmp / nginx / client /  \
>    - - http - proxy - temp - path = / var / tmp / nginx / proxy /  \
>    - - http - fastcgi - temp - path = / var / tmp / nginx / fcgi /  \
>    - - http - uwsgi - temp - path = / var / tmp / nginx / uwsgi \
>    - - http - scgi - temp - path = / var / tmp / nginx / scgi \
>    - - with - pcre
[root@node1 nginx - 1.4 . 7 ] # make && make install
#这些编译安装过程如果有报错提示依赖其他安装包只需按照提示安装即可
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
#提供一个启动脚本
[root@node1 nginx - 1.4 . 7 ] # vim /etc/rc.d/init.d/nginx
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# config:      /etc/sysconfig/nginx
# pidfile:     /var/run/nginx.pid
# Source function library.
/ etc / rc.d / init.d / functions
# Source networking configuration.
/ etc / sysconfig / network
# Check that networking is up.
"$NETWORKING"  =  "no"  ] && exit  0
nginx = "/usr/sbin/nginx"
prog = $(basename $nginx)
NGINX_CONF_FILE = "/etc/nginx/nginx.conf"
- / etc / sysconfig / nginx ] && .  / etc / sysconfig / nginx
lockfile = / var / lock / subsys / nginx
make_dirs() {
    # make required directories
    user = `nginx  - 2 >& 1  | grep  "configure arguments:"  | sed  's/[^*]*--user=\([^ ]*\).*/\1/g'  - `
    options = `$nginx  - 2 >& 1  | grep  'configure arguments:' `
    for  opt  in  $options; do
        if  [ `echo $opt | grep  '.*-temp-path' ` ]; then
            value = `echo $opt | cut  - "="  - 2 `
            if  [ !  - "$value"  ]; then
                # echo "creating" $value
                mkdir  - p $value && chown  - R $user $value
            fi
        fi
    done
}
start() {
     - x $nginx ] || exit  5
     - f $NGINX_CONF_FILE ] || exit  6
     make_dirs
     echo  - n $ "Starting $prog: "
     daemon $nginx  - c $NGINX_CONF_FILE
     retval = $?
     echo
     [ $retval  - eq  0  ] && touch $lockfile
     return  $retval
}
stop() {
     echo  - n $ "Stopping $prog: "
     killproc $prog  - QUIT
     retval = $?
     echo
     [ $retval  - eq  0  ] && rm  - f $lockfile
     return  $retval
}
restart() {
     configtest ||  return  $?
     stop
     sleep  1
     start
}
reload () {
     configtest ||  return  $?
     echo  - n $ "Reloading $prog: "
     killproc $nginx  - HUP
     RETVAL = $?
     echo
}
force_reload() {
     restart
}
configtest() {
   $nginx  - - c $NGINX_CONF_FILE
}
rh_status() {
     status $prog
}
rh_status_q() {
     rh_status > / dev / null  2 >& 1
}
case  "$1"  in
     start)
         rh_status_q && exit  0
         $ 1
         ;;
     stop)
         rh_status_q || exit  0
         $ 1
         ;;
     restart|configtest)
         $ 1
         ;;
     reload )
         rh_status_q || exit  7
         $ 1
         ;;
     force - reload )
         force_reload
         ;;
     status)
         rh_status
         ;;
     condrestart| try - restart)
         rh_status_q || exit  0
             ;;
     * )
         echo $ "Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
         exit  2
esac
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
#给个执行权限即可启动测试
[root@node1 nginx - 1.4 . 7 ] # service nginx start
Starting nginx:                                            [  OK  ]
[root@node1 nginx - 1.4 . 7 ] # ss -tunl | grep 80
tcp    LISTEN      0       128                     * : 80                     * : *

在node2上安装php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#安装php
[root@node2 ~] # tar xf php-5.4.26.tar.bz2
[root@node2 ~] # cd php-5.4.26
[root@node2 php - 5.4 . 26 ] # ls
acinclude.m4      install - sh           README.EXTENSIONS                 run - tests.php
aclocal.m4        LICENSE              README.EXT_SKEL                   sapi
build             ltmain.sh            README.GIT - RULES                  scripts
#php的安装在之前的LAMP中已有介绍;这里就不详细说明
#注意:这里的php监听的地址要改为自己的ip地址;不能使用本地地址
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
[root@node2 ~] # service fpmd start
Starting php - fpm  done
[root@node2 ~] # ss -tunl | grep 9000
tcp    LISTEN      0       128             192.168 . 0.112 : 9000                   * : *

详情参考:http://chenpipi.blog.51cto.com/8563610/1381835

二、配置Nginx整合到php

Nginx的模块和变量相当多;这里无法一一介绍清楚;直接给出官方连接;

详细可以查阅:http://nginx.org/en/docs/     http://wiki.nginx.org/Modules

配置Nginx:

node1配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
[root@node1 html] # vim /etc/nginx/nginx.conf
#user  nobody;
worker_processes   4 ;    worker进程数
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
     worker_connections   1024 ;    每个进程处理请求数
}
http {
     include       mime.types;
     default_type  application / octet - stream;
     #proxy_cache_path   /cache/nginx levels=1:2 keys_zone=web:10m inactive=12h max_size=1g;
     #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
     #                  '$status $body_bytes_sent "$http_referer" '
     #                  '"$http_user_agent" "$http_x_forwarded_for"';
     #access_log  logs/access.log  main;
     sendfile        on;
     #tcp_nopush     on;
     #keepalive_timeout  0;
     keepalive_timeout   5 ;        持久连接  5s
     #gzip  on;
     server {                配置虚拟服务器
         listen        80 ;
         root         / var / www / html;     #站点路径
         server_name  www.soul.com;
         #charset koi8-r;
         #access_log  logs/host.access.log  main;
         location  /  {             #属性,正常请求全部代理到node3上
             index  index.php index.html index.htm;
             proxy_pass  http: / / 192.168 . 0.113 ;
         }
         #error_page  404              /404.html;
         # redirect server error pages to the static page /50x.html
         #
         error_page    500  502  503  504   / 50x .html;
         location  =  / 50x .html {
             root   html;
         }
         location ~ \.php$ {             #这里就是整合php;以.php结尾的文件
             fastcgi_pass    192.168 . 0.112 : 9000 ;     #以fastcgi协议代理到node2的9000端口
             fastcgi_index  index.php;          #如果没有参数;则以index.php为参数
             fastcgi_param  SCRIPT_FILENAME   / scripts$fastcgi_script_name;         
             include        fastcgi_params;     #fastcgi的配置参数文件
         }
}

修改/etc/nginx/fastcgi_params,将其内容替换:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@node1 ~] # vim /etc/nginx/fastcgi_params
fastcgi_param  GATEWAY_INTERFACE  CGI / 1.1 ;
fastcgi_param  SERVER_SOFTWARE    nginx;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

配置node3

1
2
3
4
5
[root@node3 ~] # rpm -q httpd
httpd - 2.2 . 15 - 29.el6 .centos.x86_64
[root@node3 ~] # service httpd start
Starting httpd:                                            [  OK  ]
[root@node3 ~] #

配置完成后;对nginx和fpmd进行重启并提供主页面进行测试;这里现在就不测试

三、配置memcache

下面开始配置memcach

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#在node5上直接yum安装memcached
# yum -y install memcached
[root@node5 ~] # rpm -ql memcached    安装完成查看生成的文件
/ etc / rc.d / init.d / memcached 
/ etc / sysconfig / memcached     #配置文件
/ usr / bin / memcached
/ usr / bin / memcached - tool 
[root@node5 ~] # vim /etc/sysconfig/memcached
PORT = "11211"
USER = "memcached"
MAXCONN = "1024"
CACHESIZE = "64"
OPTIONS = ""     #其实很简单;不需要任何配置;直接启动
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
[root@node5 ~] # ss -tunl | grep 11211
udp    UNCONN      0       0                       * : 11211                  * : *  
udp    UNCONN      0       0                      ::: 11211                 ::: *  
tcp    LISTEN      0       128                    ::: 11211                 ::: *  
tcp    LISTEN      0       128                     * : 11211                  * : *

在node2上安装php的memcache的扩展

1
2
3
4
5
6
7
8
9
10
11
12
[root@node2 ~] # rm -rf memcache-2.2.7
[root@node2 ~] # tar xf memcache-2.2.7.tgz
[root@node2 ~] # cd memcache-2.2.7
[root@node2 memcache - 2.2 . 7 ] # ls
config9.m4  CREDITS      memcache_consistent_hash.c  memcache_queue.c    memcache_standard_hash.c
config.m4   example.php  memcache.dsp                memcache_queue.h    php_memcache.h
config.w32  memcache.c   memcache.php                memcache_session.c  README
[root@node2 memcache - 2.2 . 7 ] # /usr/local/php/bin/phpize
[root@node2 memcache - 2.2 . 7 ] # ./configure --with-php-config=/usr/local/php/bin/php-config --enable-memcache
[root@node2 memcache - 2.2 . 7 ] # vim /etc/php.ini
extension  =  / usr / local / php / lib / php / extensions / no - debug - non - zts - 20100525 / memcache.so
#添加如上一行;注意上述路径是编译后生成的路径

提供测试文件测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#提供两个文件;一个html;一个php
#该文件放在node2,node3各一份;
[root@node2 ~] # vim /var/www/html/index.html  
<h1>This  is  test page< / h1>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
[root@node2 ~] # vim /var/www/html/index.php 
<?php     #这里测试memcache是否正常连接
$mem  =  new Memcache;
$mem - >connect( "192.168.0.115" 11211 )   or  die( "Could not connect" );
$version  =  $mem - >getVersion();
echo  "Server's version: " .$version. "<br/>\n" ;
$mem - > set ( 'hellokey' 'Hello World' 0 600 or  die( "Failed to save data at the memcached server" );
echo  "Store data in the cache (data will expire in 600 seconds)<br/>\n" ;
$get_result  =  $mem - >get( 'hellokey' );
echo  "$get_result is from memcached server." ;
?>
<?php
         phpinfo();         #php测试页面
?>

wKioL1Ncx-3BeBcXAAFOl56b9Is845.jpg

上述页面显示的memcache连是正常的;且也显示该网页是来自node2.soul.com这台主机的

测试正常访问

wKiom1NchAWTmT3sAADIhf5jVtM633.jpg

测试html页面正常返回。此处也给php安装了xcache;

wKiom1NcyGqRRHE2AAEWp5oKct8810.jpg

安装过程就不再赘述;前面的博客都有详解。

到此;前面的nginx配置已完成;下面配置mariadb。

四、安装mariadb

MariaDB的安装与mysql一样没有任何区别;只是名称不一样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
anaconda - ks.cfg                                   install.log
drbd - 8.4 . 3 - 33.el6 .x86_64.rpm                      install.log.syslog
drbd - kmdl - 2.6 . 32 - 431.el6 - 8.4 . 3 - 33.el6 .x86_64.rpm  mariadb - 10.0 . 10 - linux - x86_64.tar.gz
[root@node4 ~] #
[root@node4 ~] # tar xf mariadb-10.0.10-linux-x86_64.tar.gz -C /usr/local/
#剩下步骤就是依次做个软连接到mysql
#更改权限;建议使用LVM作为存储
#存储目录权限也需要更改
#初始化
#复制启动脚本和配置文件;更改下配置文件;启动
[root@node4 ~] # mysql
Welcome to the MariaDB monitor.  Commands end with ;  or  \g.
Your MariaDB connection  id  is  5
Server version:  10.0 . 10 - MariaDB - log MariaDB Server
Copyright (c)  2000 2014 , Oracle, SkySQL Ab  and  others.
Type  'help;'  or  '\h'  for  help Type  '\c'  to clear the current  input  statement.
MariaDB [(none)]> use mysql
Database changed
MariaDB [mysql]> grant  all  privileges  on  * . *   to  'root' @ '192.168.0.%'  identified by  '123456' ;
MariaDB [mysql]> flush privileges;
#授权php主机可以连接
#到此mysql配置也结束

可以测试php是否可以连接mariadb

1
2
3
4
5
6
7
8
9
10
[root@node2 ~] # vim /var/www/html/index.php
#添加如下信息
<?php
         $link  =  mysql_connect( '192.168.0.114' , 'root' , '123456' );
         if ($link)
                 echo  "Success..." ;
         else
                 echo  "Failure..." ;
         mysql_close;
?>

访问测试

wKioL1Nczsaih1BtAAFgcazAB3Y134.jpg



五、安装论坛测试

在node2,node3上各放一个论坛程序

然后访问安装

wKiom1Nc6gKzzPYEAAFov6Bkuzc326.jpg

测试安装正常。现在来看下memcache缓存的状态;

1
2
3
4
[root@node2 ~] # cd /var/www/html/
[root@node2 html] # ls
Discuz_X3. 1_SC_UTF8 . zip   index.html  index.php  memadmin  readme  upload  utility
[root@node2 html] #

wKiom1Nc63jAFqniAAKXbHLdV-s885.jpg

查看memcache的详细信息;此处都有统计。

到此;memcache+lnmp已配置完成。



本文转自Mr_陈 51CTO博客,原文链接:http://blog.51cto.com/chenpipi/1403724,如需转载请自行联系原作者

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
Linux 测试技术 Docker
Linux系统:第十三章:centos误删文件如何恢复文件数据
Linux系统:第十三章:centos误删文件如何恢复文件数据
924 0
Linux系统:第十三章:centos误删文件如何恢复文件数据
|
关系型数据库 MySQL 数据库
MySQL 集群部署实战指南:高可用与可扩展的数据库架构
本文深入讲解MySQL集群部署方案,涵盖主从复制、MHA高可用架构及InnoDB Cluster,结合实战配置与监控维护,助力构建高性能、高可用的数据库系统。
221 0
|
安全 Shell 网络安全
基于Vulnhub靶场—DC4渗透测试过程
Vulhub是一个开源项目,专注于安全漏洞的复现和学习。包括Web应用、容器和操作系统漏洞。项目特点包括丰富的漏洞场景、详细的复现指南、便捷的环境部署和持续更新。通过Vulhub,安全从业者可以学习和研究漏洞利用技术。此外,文章还介绍了如何下载和搭建Vulhub靶机DC-4,并详细描述了利用Burp Suite进行密码爆破和命令执行,最终获取root权限的过程。
1342 0
|
27天前
|
存储 运维 监控
Docker常用命令有哪些?掌握这些Docker命令,让容器管理事半功倍
本文系统介绍Docker常用命令,涵盖镜像、容器、网络、存储及系统管理,助您高效掌握容器技术核心技能,提升开发与运维效率。
225 4
|
27天前
|
Linux 网络安全 iOS开发
Cisco Packet Tracer 9.0 (macOS, Linux, Windows) - 思科网络模拟工具
Cisco Packet Tracer 9.0 (macOS, Linux, Windows) - 思科网络模拟工具
182 0
Cisco Packet Tracer 9.0 (macOS, Linux, Windows) - 思科网络模拟工具
|
Web App开发 网络协议 Linux