转: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

最新文章

  1. 关于SVG的viewBox
  2. shutil复制粘贴和压缩
  3. html选中图片时,在页面回写图片
  4. 【Git】笔记2
  5. Java---NullPoint经验解析
  6. uva live 6170
  7. Android 定时器实现的几种方式和removeCallbacks失效问题详解
  8. html5 geolocation API
  9. 201521123037 《Java程序设计》第14周学习总结
  10. JavaScript八张思维导图—字符串用法
  11. 超级简便的容器化部署工具(使用 ASP.NET Core 演示)
  12. Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解
  13. PC逆向之代码还原技术,第五讲汇编中乘法的代码还原
  14. ajax post json格式返回
  15. UnicodeMath编码教程
  16. Python开发【项目】:学员管理系统(mysql)
  17. C++和java的区别和联系
  18. SQL-40 表中新增一列
  19. JDK1.6在LINUX下的安装配置[转]
  20. Solr 使用自定义 Query Parser(短语查询,精准查询)

热门文章

  1. 微博传播数量和传播深度的预测--基于pyspark和某个回归算法
  2. NPN&amp;PNP
  3. Java中String,StringBuffer,StringBuilder的区别及其使用
  4. iOS - UISplitViewController
  5. php PDO链接SQL SERVER
  6. Oracle 遇到的错误及处理整理 - 记录
  7. Web服务器异常问题记录
  8. Integer封装与拆箱
  9. hibernate.properties和hibernate.cfg.xml
  10. Redhat 6.4_联网 yum 配置