转:http://www.linuxidc.com/Linux/2015-07/120580.htm

Nginx+php-fpm+MySQL分离部署详解

[日期:2015-07-26] 来源:Linux社区  作者:tae44 [字体:  ]
 
 

相信大家将这三者部署到同一台主机应该已经不陌生了,今天在这里,给大家演示一下如何将三者部署到三台主机上。

实验系统:CentOS 6.6_x86_64

实验前提:大部分软件使用编译安装,请提前准备好编译环境,防火墙和selinux都关闭

实验软件:nginx-1.9.3 mariadb-10.0.20 php-5.6.11 memcache-2.2.7 xcache-3.2.0

实验拓扑:

Nginx+PHP-FPM时快时慢的解决  http://www.linuxidc.com/Linux/2014-10/108011.htm

LAMP-PHP-fpm服务器配置 http://www.linuxidc.com/Linux/2014-06/103093.htm

Ubuntu 14.04 LTS 安装 LNMP Nginx\PHP5 (PHP-FPM)\MySQL http://www.linuxidc.com/Linux/2014-05/102351.htm

高负载PHP-FPM调优 http://www.linuxidc.com/Linux/2013-07/86963.htm

Nginx php-fpm出现502解决办法和调优心得 http://www.linuxidc.com/Linux/2013-01/78566.htm

Nginx+PHP-FPM在两台服务器实现 http://www.linuxidc.com/Linux/2012-11/74001.htm

Ubuntu 10.04配置 nginx + php-fpm 模式 http://www.linuxidc.com/Linux/2012-11/74001p2.htm

Nginx&&PHP-FPM配置及优化指南(上) http://www.linuxidc.com/Linux/2012-07/65732.htm

一、安装nginx

  1.解决依赖关系:

    需要专门安装pcre-devel包:

1 yum -y install pcre-devel

  2.添加nginx用户:

1 useradd -r nginx

  3.解压并编译安装nginx:

 1 tar xf nginx-1.9.3.tar.gz
2 cd nginx-1.9.3
3 ./configure \
4 --prefix=/usr/local/nginx \                    //安装位置
5 --sbin-path=/usr/local/nginx/sbin/nginx \            //程序文件
6 --conf-path=/etc/nginx/nginx.conf \               //配置文件安装位置
7 --error-log-path=/var/log/nginx/error.log \           //错误日志安装位置
8 --http-log-path=/var/log/nginx/access.log \           //访问日志安装位置
9 --pid-path=/var/run/nginx/nginx.pid \              //pid文件位置
10 --lock-path=/var/lock/nginx.lock \                //锁文件位置
11 --user=nginx \                            //运行进程时使用的用户身份
12 --group=nginx \                           //运行进程时使用的用户组
13 --with-http_ssl_module \                      //支持ssl模块
14 --with-http_flv_module \                      //支持flv模块
15 --with-http_stub_status_module \                 //支持stub_status模块
16 --with-http_gzip_static_module \                 //支持gzip_static模块
17 --http-client-body-temp-path=/var/tmp/nginx/client/ \    //存储HTTP客户端请求body体的临时文件位置
18 --http-proxy-temp-path=/var/tmp/nginx/proxy/ \        //存储HTTP代理的临时文件位置
19 --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \        //存储fasycgi临时文件位置
20 --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \         //存储uwsgi临时文件位置
21 --http-scgi-temp-path=/var/tmp/nginx/scgi \          //存储scgi临时文件位置
22 --with-pcre                             //支持pcre库
23 make && make install
 

  4.提供脚本文件:

  1 vim /etc/init.d/nginx
2 --------------------------------
3 #!/bin/sh
4 #
5 # nginx - this script starts and stops the nginx daemon
6 #
7 # chkconfig: - 85 15
8 # description: Nginx is an HTTP(S) server, HTTP(S) reverse \
9 # proxy and IMAP/POP3 proxy server
10 # processname: nginx
11 # config: /etc/nginx/nginx.conf
12 # config: /etc/sysconfig/nginx
13 # pidfile: /var/run/nginx.pid
14
15 # Source function library.
16 . /etc/rc.d/init.d/functions
17
18 # Source networking configuration.
19 . /etc/sysconfig/network
20
21 # Check that networking is up.
22 [ "$NETWORKING" = "no" ] && exit 0
23
24 nginx="/usr/local/nginx/sbin/nginx"
25 prog=$(basename $nginx)
26
27 NGINX_CONF_FILE="/etc/nginx/nginx.conf"
28
29 [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
30
31 lockfile=/var/lock/subsys/nginx
32
33 make_dirs() {
34 # make required directories
35 user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
36 options=`$nginx -V 2>&1 | grep 'configure arguments:'`
37 for opt in $options; do
38 if [ `echo $opt | grep '.*-temp-path'` ]; then
39 value=`echo $opt | cut -d "=" -f 2`
40 if [ ! -d "$value" ]; then
41 # echo "creating" $value
42 mkdir -p $value && chown -R $user $value
43 fi
44 fi
45 done
46 }
47
48 start() {
49 [ -x $nginx ] || exit 5
50 [ -f $NGINX_CONF_FILE ] || exit 6
51 make_dirs
52 echo -n $"Starting $prog: "
53 daemon $nginx -c $NGINX_CONF_FILE
54 retval=$?
55 echo
56 [ $retval -eq 0 ] && touch $lockfile
57 return $retval
58 }
59
60 stop() {
61 echo -n $"Stopping $prog: "
62 killproc $prog -QUIT
63 retval=$?
64 echo
65 [ $retval -eq 0 ] && rm -f $lockfile
66 return $retval
67 }
68
69 restart() {
70 configtest || return $?
71 stop
72 sleep 1
73 start
74 }
75
76 reload() {
77 configtest || return $?
78 echo -n $"Reloading $prog: "
79 killproc $nginx -HUP
80 RETVAL=$?
81 echo
82 }
83
84 force_reload() {
85 restart
86 }
87
88 configtest() {
89 $nginx -t -c $NGINX_CONF_FILE
90 }
91
92 rh_status() {
93 status $prog
94 }
95
96 rh_status_q() {
97 rh_status >/dev/null 2>&1
98 }
99
100 case "$1" in
101 start)
102 rh_status_q && exit 0
103 $1
104 ;;
105 stop)
106 rh_status_q || exit 0
107 $1
108 ;;
109 restart|configtest)
110 $1
111 ;;
112 reload)
113 rh_status_q || exit 7
114 $1
115 ;;
116 force-reload)
117 force_reload
118 ;;
119 status)
120 rh_status
121 ;;
122 condrestart|try-restart)
123 rh_status_q || exit 0
124 ;;
125 *)
126 echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
127 exit 2
128 esac
129 --------------------------------
130 chmod +x /etc/init.d/nginx
131 chkconfig --add nginx
132 chkconfig nginx on
133 service nginx start

  5.测试访问页面,nginx安装完毕:

二、安装mysql

  1.添加mysql用户和创建数据目录:

1 useradd -r mysql
2 mkdir -pv /mydata/data
3 chown -R mysql:mysql /mydata/data

  2.解压并初始化mysql:

1 tar xf mariadb-10.0.20-linux-x86_64.tar.gz -C /usr/local/
2 cd /usr/local/
3 ln -sv mariadb-10.0.20-linux-x86_64 mysql
4 cd mysql/
5 chown -R root:mysql .
6 scripts/mysql_install_db --user=mysql --datadir=/mydata/data/

  3.提供配置文件:

1 cp support-files/my-large.cnf /etc/my.cnf
2 vim /etc/my.cnf
3 修改此文件中thread_concurrency的值为你的CPU个数乘以2,比如:thread_concurrency = 2
4 另外还需要添加如下行指定mysql数据文件的存放位置:datadir = /mydata/data

  4.提供脚本文件:

1 cp support-files/mysql.server /etc/init.d/mysqld
2 chkconfig --add mysqld
3 chkconfig mysqld on
4 service mysqld start

  使用mysql目录的下的bin/mysql去连接mysql,出现如下画面表示连接成功:

  5.输出mysql的man手册至man命令的查找路径:   

    编辑/etc/man.config,添加如下行即可:MANPATH  /usr/local/mysql/man

  6.输出mysql的头文件至系统头文件路径/usr/include:
    这可以通过简单的创建链接实现: 
1 ln -sv /usr/local/mysql/include  /usr/include/mysql

  7.输出mysql的库文件给系统库查找路径:

1 echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
2 ldconfig

三、安装PHP

  1.解决依赖关系:

1 yum -y install libxml2-devel bzip2-devel libcurl-devel libmcrypt-devel

  2.编译安装php:

 1 ./configure --prefix=/usr/local/php \      //安装位置
2 --with-mysql \                   //支持mysql
3 --with-pdo-mysql \                //支持pdo模块
4 --with-mysqli \                  //支持mysqli��块         
5 --with-openssl \                  //支持openssl模块
6 --enable-fpm \                   //支持fpm模式
7 --enable-sockets \                //启用socket支持
8 --enable-sysvshm \                //启用系统共享内存支持
9 --enable-mbstring \                //使多字节字符串的支持
10 --with-freetype-dir \              //设置FreeType安装前缀路径
11 --with-jpeg-dir \                //设置libjpeg安装前缀路径
12 --with-png-dir \                //设置libpng安装前缀路径
13 --with-zlib-dir \                //设置libz安装前缀路径
14 --with-libxml-dir=/usr \            //设置libxml2安装路径
15 --enable-xml \                 
16 --with-mhash \                 //支持mhash
17 --with-mcrypt \                 //支持mcrypt
18 --with-config-file-path=/etc \        //配置文件路径
19 --with-config-file-scan-dir=/etc/php.d \ //配置文件扫描路径
20 --with-bz2 \               //支持BZip2
21 --with-curl                   //支持curl
22 make && make install

  3.提供配置文件:

1 cp php.ini-production /etc/php.ini

  4.为php-fpm提供脚本:

1 cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
2 chmod +x /etc/init.d/php-fpm
3 chkconfig --add php-fpm
4 chkconfig php-fpm on

  5.提供php-fpm配置文件并编辑:

1 cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
2 ------------------------------------------------------
3 pm.max_children = 150
4 pm.start_servers = 8
5 pm.min_spare_servers = 5
6 pm.max_spare_servers = 10
7 pid = /usr/local/php/var/run/php-fpm.pid
  6.启动php-fpm服务:
1 service php-fpm start

四、整合nginx与PHP

  1.nginx服务器建立网页文件存放目录/www,并修改其权限:

1 mkdir /www
2 chown -R nginx:nginx /www

  2.修改nginx配置文件:

 1 vim /etc/nginx/nginx.conf
2 --------------------------------------
3 location / {
4 root /www;
5 index index.php index.html index.htm;
6 }
7
8 location ~ \.php$ {
9 root /www;
10 fastcgi_pass 192.168.19.92:9000;
11 fastcgi_index index.php;
12 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
13 include fastcgi_params;
14 }
 

  3.修改fastcgi_params文件为:

 1 fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
2 fastcgi_param SERVER_SOFTWARE nginx;
3 fastcgi_param QUERY_STRING $query_string;
4 fastcgi_param REQUEST_METHOD $request_method;
5 fastcgi_param CONTENT_TYPE $content_type;
6 fastcgi_param CONTENT_LENGTH $content_length;
7 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
8 fastcgi_param SCRIPT_NAME $fastcgi_script_name;
9 fastcgi_param REQUEST_URI $request_uri;
10 fastcgi_param DOCUMENT_URI $document_uri;
11 fastcgi_param DOCUMENT_ROOT $document_root;
12 fastcgi_param SERVER_PROTOCOL $server_protocol;
13 fastcgi_param REMOTE_ADDR $remote_addr;
14 fastcgi_param REMOTE_PORT $remote_port;
15 fastcgi_param SERVER_ADDR $server_addr;
16 fastcgi_param SERVER_PORT $server_port;
17 fastcgi_param SERVER_NAME $server_name;
  4.在PHP服务器上,建立nginx用户,要保证和nginx服务器上的nginx用户id号、组id号一致:
  5.修改php-fpm配置文件,并重启:
1 vim /usr/local/php/etc/php-fpm.conf
2 ---------------------------------------------
3 listen = 192.168.19.92:9000     //监听物理网卡地址,供其它机器调用
4 user = nginx //php-fpm以nginx用户运行
5 group = nginx
6 ---------------------------------------------
7 service php-fpm restart

  6.在PHP服务器上创建/www目录,并开启nfs服务:

1 mkdir /www
2 chown -R nginx:nginx /www
3 vim /etc/exports
4 ---------------------------------------------
5 /www 192.168.19.0/24(rw,no_root_squash)
6 ---------------------------------------------
7 service nfs start

  7.nginx服务器挂载nfs文件,并测试php,测试成功后删除index.php:

1 mount -t nfs 192.168.19.92:/www /www
2 vim /www/index.php
3 ---------------------------------------
4 <?php
5 phpinfo();
6 ?>
7 --------------------------------------
8 service nginx restart

【转】Nginx+php-fpm+MySQL分离部署详解的更多相关文章

  1. nginx+php-fpm+mysql分离部署详解

    相信大家将这三者部署到同一台主机应该已经不陌生了,今天在这里,给大家演示一下如何将三者部署到三台主机上. 实验系统:CentOS 6.6_x86_64 实验前提:大部分软件使用编译安装,请提前准备好编 ...

  2. MySQL高可用方案-PXC(Percona XtraDB Cluster)环境部署详解

    MySQL高可用方案-PXC(Percona XtraDB Cluster)环境部署详解 Percona XtraDB Cluster简称PXC.Percona Xtradb Cluster的实现是在 ...

  3. legend3---Windows 7/8/10 系统下Laravel框架的开发环境安装及部署详解(Vagrant + Homestead)

    legend3---Windows 7/8/10 系统下Laravel框架的开发环境安装及部署详解(Vagrant + Homestead) 一.总结 一句话总结: 1.安装的话就是下载好git,va ...

  4. Windows下Nginx Virtual Host多站点配置详解

    Windows下Nginx Virtual Host多站点配置详解 此教程适用于Windows系统已经配置好Nginx+Php+Mysql环境的同学. 如果您还未搭建WNMP环境,请查看 window ...

  5. Nginx+Tomcat的服务器端环境配置详解

    这篇文章主要介绍了Nginx+Tomcat的服务器端环境配置详解,包括Nginx与Tomcat的监控开启方法,需要的朋友可以参考下 Nginx+tomcat是目前主流的Javaweb架构,如何让ngi ...

  6. MySQL 联合索引详解

    MySQL 联合索引详解   联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c ...

  7. centos7.2环境elasticsearch-5.0.1+kibana-5.0.1+zookeeper3.4.6+kafka_2.9.2-0.8.2.1部署详解

    centos7.2环境elasticsearch-5.0.1+kibana-5.0.1+zookeeper3.4.6+kafka_2.9.2-0.8.2.1部署详解 环境准备: 操作系统:centos ...

  8. MySQL关闭过程详解和安全关闭MySQL的方法

    MySQL关闭过程详解和安全关闭MySQL的方法 www.hongkevip.com 时间: -- : 阅读: 整理: 红客VIP 分享到: 红客VIP(http://www.hongkevip.co ...

  9. Nginx 常用全局变量 及Rewrite规则详解

    每次都很容易忘记Nginx的变量,下面列出来了一些常用 $remote_addr //获取客户端ip $binary_remote_addr //客户端ip(二进制) $remote_port //客 ...

随机推荐

  1. MySQl的几个配置项

    对对于MySQL的日志功能,我们可以完全自己控制到底写还是不写.一般来说,binlog我们一般会开启,而对于慢查询我们一般会在开发的时候调试和观 察SQL语句的执行速度.但今天发现一个问题.在使用sh ...

  2. 进程&线程

    进程与线程的区别 什么是进程(Process):普通的解释就是,进程是程序的一次执行,而什么是线程(Thread),线程可以理解为进程中的执行的一段程序片段.在一个多任务环境中下面的概念可以帮助我们理 ...

  3. ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'db'

    1.问题 在刚刚安装MySQL之后,进入到mysql环境下,创建数据库,出现下面的提示信息: ERROR 1044 (42000): Access denied for user ''@'localh ...

  4. 禁止ubuntu的super快捷键

    在mac上安装了ubuntu虚拟机, 但是发现command健(ubuntu中叫super健)被系统占用了, 习惯了command健的同学来说非常不方便, 如何禁用默认的command健呢? You ...

  5. 构件工具Maven----坐标、依赖、仓库、生命周期的简单学习

    这篇文章对Maven中几个比较重要的概念坐标.依赖.仓库.生命周期做一个简单的介绍. 1.关于Maven坐标 用来区别Maven世界中任何一个构件,Maven坐标的元素包括groupId.artifa ...

  6. Object Pascal 语言基础

    Delphi 是以Object Pascal 语言为基础的可视化开发工具,所以要学好Delphi,首先要掌握的就是Object Pascal 语言.Object Pascal语言是Pascal之父在1 ...

  7. android 回调函数的使用

    // activity 之间方法调用的桥梁 public class ActivityCallBridge { static ActivityCallBridge mBridge; private O ...

  8. Android 项目中常用到的第三方组件

    项目中常用到的第三方组件 1 社会化分享ShareSDK-Core-2.5.9.jarShareSDK-QQ-2.5.9.jarShareSDK-QZone-2.5.9.jarShareSDK-Sin ...

  9. you don't have permission to view it 解决

    the file couldn't be opened because you don't have permission to view it   简单设置下面的选项即可,不要谢我啊! change ...

  10. h5 input file ajax实现文件上传

    <input type="file" accept="image/*" height="0" class="file_inp ...