nginx+php+fastcg+xcache+mysql+openx

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: nginx+php+fastcg+xcache+mysql+openx说明:本文是使用nginx 安装广告发布系统openx2.4 其中参考文档:张宴BLOG  linuxtone.org论坛文档 官方文档同文发表在:http://www.linuxtone.org/thread-441-1-1.htmlhttp://liuyu.blog.51cto.com/183345/82841及CU个人空间下次将写为什么我们需要使用nginx 它有那此功能,与apache相比优势在那。
nginx+php+fastcg+xcache+mysql+openx说明:本文是使用nginx 安装广告发布系统openx2.4
其中参考文档:张宴BLOG  linuxtone.org论坛文档 官方文档
同文发表在: http://www.linuxtone.org/thread-441-1-1.html
http://liuyu.blog.51cto.com/183345/82841
及CU个人空间

下次将写为什么我们需要使用nginx 它有那此功能,与apache相比优势在那。

Nginx ("engine x") 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。Igor 将源代码以类BSD许可证的形式发布。
Nginx官方wiki: http://wiki.codemongers.com/NginxChs
openx官方首页: http://www.openx.org
php-fpm官网: http://php-fpm.anight.org/index.html

本文安装环境:
os:rh8 ,centos5
kernel:2.6

相关软件包:libjpeg libpng freetype libxml2 zlib  (这些可以用RPM包安装,相应的开发包也装上*-devel)
nginx0.6.31    http://sysoev.ru/nginx/nginx-0.6.31.tar.gz
pcre7.7       ftp://ftp.csx.cam.ac.uk/pub/soft ... cre/pcre-7.7.tar.gz
php5.2.6       http://www.php.net/get/php-5.2.6.tar.gz/from/this/mirror
mysql 5.0     我这里用的压缩版,直接解压设置权限使用的
xcache1.2.2    http://xcache.lighttpd.net/pub/Releases/1.2.2/xcache-1.2.2.tar.gz
php-fpm       http://php-fpm.anight.org/downlo ... 6-fpm-0.5.8.diff.gz (注意5.0的PHP没有相应的补丁包,php-fpm是为PHP打的一个FastCGI管理补丁,可以平滑变更php.ini配置而无需重启php-cgi)
同时也可以安装zend
openx2.4       http://download.openx.org/openx-2.4.6.tar.gz

nginx+php5+fastcgi+xcache+mysql 这套系统还可以安装discuz+zend

安装过程:
一、mysql  
     shell> /usr/sbin/groupadd mysql
     shell> /usr/sbin/useradd -g mysql mysql
     shell> groupadd mysql
     shell> useradd -g mysql mysql
     shell> cd /usr/local
     shell> gunzip < /PATH/TO/MYSQL-VERSION-OS.tar.gz | tar xvf -
     shell> ln -s FULL-PATH-TO-MYSQL-VERSION-OS mysql
     shell> cd mysql
     shell> scripts/mysql_install_db --user=mysql
     shell> chown -R root  .
     shell> chown -R mysql data
     shell> chgrp -R mysql .
     shell> bin/mysqld_safe --user=mysql &



我这里也是省事,没有选择编译安装,其实最主要是注意权限问题。mysql启动问题就不大。

二、PHP (本人在RH8上也安装成功,就是相关的依赖比较多)
  shell>tar zxvf php-5.2.6.tar.gz
     shell>gzip -cd php-5.2.6-fpm-0.5.8.diff.gz | patch -d php-5.2.6 -p1
     shell>cd php-5.2.6/
     shell>./configure --prefix=/usr/local/php5 --with-mysql=/usr/local/mysql --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-xml --disable-debug  --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring  --with-gd --with-openssl
     shell>make && make install
     shell>cp php.ini-dist /usr/local/php/etc/php.ini



注:没有php5.0 的php-fpm补丁包

参数可由自己定,php5却需要安装gd,libxml2,fastcgi,fpm,mbstring 对于memcache,xcache 可自行选择
gd又依赖:jpeg,png,zlib,freetype,gd2

在编译过程中有可能会遇到一些错误。
一般解决办法为:升级rpm为最新的,并安装相关的依赖包
下载源码包安装到其它目前,编译时指定相关的目录。

具体的情况可以多看./configure --help


三、xcache 给PHP加速(建议安装)
shell>tar zxvf xcache-1.2.2.tar.gz
    shell>cd xcache-1.2.2/
    shell>/usr/local/php5/bin/phpize
    shell>./configure --with-php-config=/usr/local/php5/bin/php-config --enable-xcache
    shell>make &&make install





四、修改php.ini (可下载附件进行查看)
sed -i 's#extension_dir = "./"#extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-
20060613/" /usr/local/webserver/php/etc/php.ini
sed -i 's#display_errors = On#display_errors = Off#' /usr/local/webserver/php/etc/php.ini



在未尾加入
  
[xcache-common]
zend_extension = /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/xcache.so

[xcache.admin]
xcache.admin.user = "xcache"
; xcache.admin.pass = md5($yourpasswd)
xcache.admin.pass = "8e6867a5d05144cf4761d6481fc674a8"

[xcache]
xcache.cacher = On
xcache.shm_scheme = "mmap"
xcache.size = 32M
; cpu number (cat /proc/cpuinfo |grep -c processor)
xcache.count = 2
xcache.slots = 8k
xcache.ttl = 0
xcache.gc_interval = 0
xcache.var_size = 2M
; cpu number (cat /proc/cpuinfo |grep -c processor)
xcache.var_count = 2
xcache.var_slots = 8K

xcache.var_ttl = 0
xcache.var_maxttl = 0
xcache.var_gc_interval = 300
xcache.readonly_protection = Off
xcache.mmap_path = "/dev/zero"  



五、修改php-fpm.conf (可下载附件进行查看)
vi /usr/local/php5/etc/php-fpm.conf
用户组及PHP目录及,其它的一些信息可以根据自己的环境和需求来定
# <?xml version="1.0" ?>   
# <configuration>   
#   
#         All relative paths in this config are relative to php's install prefix   
#   
#         <section name="global_options">   
#   
#                 Pid file   
#                 <value name="pid_file">/usr/local/webserver/php/logs/php-fpm.pid</value>   
#   
#                 Error log file   
#                 <value name="error_log">/usr/local/webserver/php/logs/php-fpm.log</value>   
#   
#                 Log level   
#                 <value name="log_level">notice</value>   
#   
#                 When this amount of php processes exited with SIGSEGV or SIGBUS ...   
#                 <value name="emergency_restart_threshold">10</value>   
#   
#                 ... in a less than this interval of time, a graceful restart will be initiated.   
#                 Useful to work around accidental curruptions in accelerator's shared memory.   
#                 <value name="emergency_restart_interval">1m</value>   
#   
#                 Time limit on waiting child's reaction on signals from master   
#                 <value name="process_control_timeout">5s</value>   
#   
#                 Set to 'no' to debug fpm   
#                 <value name="daemonize">yes</value>   
#   
#         </section>   
#   
#         <workers>   
#   
#                 <section name="pool">   
#   
#                         Name of pool. Used in logs and stats.   
#                         <value name="name">default</value>   
#   
#                         Address to accept fastcgi requests on.   
#                         Valid syntax is 'ip.ad.re.ss:port' or just 'port' or '/path/to/unix/socket'   
#                         <value name="listen_address">127.0.0.1:9000</value>   
#   
#                         <value name="listen_options">   
#   
#                                 Set listen(2) backlog   
#                                 <value name="backlog">-1</value>   
#   
#                                 Set permissions for unix socket, if one used.   
#                                 In Linux read/write permissions must be set in order to allow connections from web server.   
#                                 Many BSD-derrived systems allow connections regardless of permissions.   
#                                 <value name="owner"></value>   
#                                 <value name="group"></value>   
#                                 <value name="mode">0666</value>   
#                         </value>   
#   
#                         Additional php.ini defines, specific to this pool of workers.   
#                         <value name="php_defines">   
#                                 <value name="sendmail_path">/usr/sbin/sendmail -t -i</value>   
#                                 <value name="display_errors">0</value>   
#                         </value>   
#   
#                         Unix user of processes   
#                         <value name="user">www</value>   
#   
#                         Unix group of processes   
#                         <value name="group">www</value>   
#   
#                         Process manager settings   
#                         <value name="pm">   
#   
#                                 Sets style of controling worker process count.   
#                                 Valid values are 'static' and 'apache-like'   
#                                 <value name="style">static</value>   
#   
#                                 Sets the limit on the number of simultaneous requests that will be served.   
#                                 Equivalent to Apache MaxClients directive.   
#                                 Equivalent to PHP_FCGI_CHILDREN environment in original php.fcgi   
#                                 Used with any pm_style.   
#                                 <value name="max_children">128</value>   
#   
#                                 Settings group for 'apache-like' pm style   
#                                 <value name="apache_like">   
#   
#                                         Sets the number of server processes created on startup.   
#                                         Used only when 'apache-like' pm_style is selected   
#                                         <value name="StartServers">20</value>   
#   
#                                         Sets the desired minimum number of idle server processes.   
#                                         Used only when 'apache-like' pm_style is selected   
#                                         <value name="MinSpareServers">5</value>   
#   
#                                         Sets the desired maximum number of idle server processes.   
#                                         Used only when 'apache-like' pm_style is selected   
#                                         <value name="MaxSpareServers">250</value>   
#   
#                                 </value>   
#   
#                         </value>   
#   
#                         Time limit on waiting execution of single request   
#                         Should be used when 'max_execution_time' ini option does not terminate execution for some reason   
#                         <value name="request_execution_timeout">31s</value>   
#   
#                         Set open file desc rlimit   
#                         <value name="rlimit_files">51200</value>   
#   
#                         Set max core size rlimit   
#                         <value name="rlimit_core">0</value>   
#   
#                         Chroot to this directory at the start   
#                         <value name="chroot"></value>   
#   
#                         Chdir to this directory at the start   
#                         <value name="chdir"></value>   
#   
#                         Redirect workers' stdout and stderr into main error log.   
#                         If not set, they will be redirected to /dev/null, according to FastCGI specs   
#                         <value name="catch_workers_output">yes</value>   
#   
#                         How much requests each process should execute before respawn.   
#                         Useful to work around memory leaks in 3rd party libraries.   
#                         For endless request processing please specify 0   
#                         Equivalent to PHP_FCGI_MAX_REQUESTS   
#                         <value name="max_requests">51200</value>   
#   
#                         Comma separated list of ipv4 addresses of FastCGI clients that allowed to connect.   
#                         Equivalent to FCGI_WEB_SERVER_ADDRS environment in original php.fcgi (5.2.2+)   
#                         Makes sense only with AF_INET listening socket.   
#                         <value name="allowed_clients">127.0.0.1</value>   
#   
#                         Pass environment variables like LD_LIBRARY_PATH   
#                         All $VARIABLEs are taken from current environment   
#                         <value name="environment">   
#                                 <value name="HOSTNAME">$HOSTNAME</value>   
#                                 <value name="PATH">/usr/local/bin:/usr/bin:/bin</value>   
#                                 <value name="TMP">/tmp</value>   
#                                 <value name="TMPDIR">/tmp</value>   
#                                 <value name="TEMP">/tmp</value>   
#                                 <value name="OSTYPE">$OSTYPE</value>   
#                                 <value name="MACHTYPE">$MACHTYPE</value>   
#                                 <value name="MALLOC_CHECK_">2</value>   
#                         </value>   
#   
#                 </section>   
#   
#         </workers>   
#   
# </configuration>




启动php-cgi
/usr/local/php5/sbin/php-fpm start(stop)

六、建立nginx运行的用户及组
/usr/sbin/groupadd www -g 48
/usr/sbin/useradd -u 48 -g www www
php-fpm也用此用户及组启动


七、安装nginx
tar zxvf pcre-7.7.tar.gz
cd pcre-7.7/
./configure
make && make install
cd ../

tar zxvf nginx-0.6.31.tar.gz
cd nginx-0.6.31/
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make && make install

编译安装速度超快。不需要像apache那样漫长的等待,我这里并没有发生错误。呵


八、配置启动nginx 配置fcgi
见附件
/usr/local/nginx/sbin/nginx
相关命令:
/usr/local/nginx/sbin/nginx -t 测试配置文件
/usr/local/nginx/sbin/nginx -v 查看相关版本
/usr/local/nginx/sbin/nginx –c </path/to/config>为nginx指定配置文件
退出nginx
kill –QUIT nginx_pid
重启nginx
kill -HUP nginx-pid
笨方法就是:ps -ef |grep nginx 再kill pid  

九、nginx启动脚本(linuxtone.org)
vi /etc/init.d/nginx  
chkconfig --level 35 nginx on

#! /bin/sh
### BEGIN INIT INFO
# Provides:          Nginx-php-fpm(fastcgi)
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     3 5
# Default-Stop:      0 1 6
# Short-Description: Start and stop nginx-fcgi in external FASTCGI mode
# Description:       Start and stop nginx-fcgi in external FASTCGI mode
# http://www.linxutone.org msn:cnseek@msn.com
### END INIT INFO

set -e

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="nginx daemon"
NAME=nginx
DAEMON=/usr/local/nginx/sbin/$NAME
CONFIGFILE=/usr/local/nginx/conf/nginx.conf
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0

d_start() {
  /usr/local/php-fcgi/sbin/php-fpm start > /dev/null 2>&1
  $DAEMON -c $CONFIGFILE || echo -n " already running"
}

d_stop() {
  /usr/local/php-fcgi/sbin/php-fpm stop > /dev/null 2>&1
  kill -QUIT `cat $PIDFILE` || echo -n " not running"
}

d_reload() {
  /usr/local/php-fcgi/sbin/php-fpm reload > /dev/null 2>&1
  kill -HUP `cat $PIDFILE` || echo -n " can't reload"
}

case "$1" in
  start)
        echo -n "Starting $DESC: $NAME"
        d_start
        echo "."
        ;;
  stop)
        echo -n "Stopping $DESC: $NAME"
        d_stop
        echo "."
        ;;
  reload)
        echo -n "Reloading $DESC configuration ..."
        d_reload
        echo "reloaded."
  ;;
  restart)
        echo -n "Restarting $DESC: $NAME"
        d_stop
        sleep 1
        d_start
        echo "."
        ;;
  *)
          echo "Usage: $SCRIPTNAME {start|stop|restart|reload}" >&2
          exit 3
        ;;
esac

exit 0




十、nginx日志处理脚本:
注意:不能直接删除/.../access.log。加入crontab
#!/bin/sh

# This file run at 00:00

date=$(date -d "yesterday" +"%Y-%m-%d")

gzip -c /..../logs/access.log > /.../logs/${date}.log.gz

:>/..../logs/access.log  




另一个脚本:
#!/bin/bash

# linuxtone.org

log_dir="/data/logs"

time=`date +%Y%m%d`   

/bin/mkdir -p  ${log_dir}/${date_dir} > /dev/null 2>&1

/bin/mv  ${log_dir}/access_count.linxutone.org.log ${log_dir}/access_count.linuxtone.org.$time.log

kill -USR1 `cat  /var/run/nginx.pid`


十一、安装openx2.4
解压后放到/usr/local/nginx/html目录。
设置权限 chown www:www -R openx
         chmod 777 -R openx/var

在浏览器里输入 http://192.168.19.60/openx
就可以安装了,图形的很好安装

相关的升级文档说明,翻译,及错误都在附件里。
大家可以下载~~

openx 的升级翻译Warning: Server timezone not correctly set in PHP.
Please see the documentation about setting this variable for PHP.

If you are using PHP 5.1 or 5.2 set the correct timezone in your php.ini file:
date.timezone = Europe/London
If you are using PHP 4.3, 4.4 or 5.0 export the TZ environment variable in your web server configuration. If you are using an Apache web server, do this using the SetEnv directive in httpd.conf:
SetEnv TZ Europe/London
If you do not have access to set the timezone on your server ask your system administrator or your hosting provider to set this up for you.
Alternatively, you can call "date_timezone_default_set()" on PHP 5.1 and PHP 5.2 or you can set "date.timezone" in a .htaccess file.


############################################################################################
Prepare the database 准备数据库
The upgrade process guides you through synchronising your old and new databases. But there can be additional preparations:
升级过程将指导你完成同步新旧数据库.

before you perform the upgrade.
前缀字母小写:如果你现有的数据库前缀中包含大写字母, 你必须在升级动作之前把所有前缀改成小写字母
Large database: During the upgrade, OpenX copies each affected table, which can be very time-consuming for large databases. To avoid this process, create a file named "NOBACKUPS" in the var/ directory for your new version of OpenX. When the Install Wizard detects this file, it does not copy tables.
扩大数据库:升级过程中, OpenX会复制每一个涉及到的表格, 因此对于较大数据库来说这个过程耗时较长. 为了避免这种情况, 为你的新OpenX系统创建一个名为"NOBACKUPS"的文件.一旦安装程序找到这个文件, 将不再进步复制.


Database Setup
Upgrade only

The Database Setup page displays database settings detected from your existing installation. Check the settings to ensure they are correct. If the settings are not correct, amend them in your configuration file and go back to the start of the install and upgrade wizard. When you are satisfied the settings are in order, click Continue to start the process of altering your database. This process can take some time. When the process is finished, the screen updates to report that your database has been upgraded successfully.

Click Continue to open the Configuration Setup page.

升级专用  数据库安装页面显示检测到的你已安装的的文件.检查设置是否正确.如果不对,在配置文件中修复然后重新启动升级向导. 如果你认为设置正确可以占击继续开始更新数据库. 此过程需要一定时间. 安装过程结束后, 屏幕会显示你的数据库升级成功. 点击继续打开配置文件页面

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
前端开发 关系型数据库 MySQL
PHP与MySQL动态网站开发实战指南####
【10月更文挑战第21天】 本文将深入浅出地探讨如何使用PHP与MySQL构建一个动态网站,从环境搭建到项目部署,全程实战演示。无论你是编程新手还是希望巩固Web开发技能的老手,都能在这篇文章中找到实用的技巧和启发。我们将一起探索如何通过PHP处理用户请求,利用MySQL存储数据,并最终呈现动态内容给用户,打造属于自己的在线平台。 ####
59 0
|
1月前
|
存储 关系型数据库 MySQL
PHP与MySQL动态网站开发:从基础到实践####
本文将深入探讨PHP与MySQL的结合使用,展示如何构建一个动态网站。通过一系列实例和代码片段,我们将逐步了解数据库连接、数据操作、用户输入处理及安全防护等关键技术点。无论您是初学者还是有经验的开发者,都能从中获益匪浅。 ####
|
2月前
|
安全 关系型数据库 MySQL
PHP与MySQL动态网站开发实战指南####
——深入探索LAMP栈下的高效数据交互与处理技巧 ####
|
1月前
|
关系型数据库 MySQL PHP
php实现一个简单的MySQL分页
通过本文的详细步骤和代码示例,我们实现了一个简单的PHP MySQL分页功能。主要步骤包括计算总记录数、设置分页参数、查询当前页的数据以及生成分页链接。这种分页方式适用于大多数Web应用,能够有效提升用户体验和页面响应速度。
28 4
|
2月前
|
关系型数据库 MySQL PHP
PHP与MySQL动态网站开发实战指南####
深入探索PHP与MySQL的协同工作机制,本文旨在通过一系列实战案例,揭示构建高效、稳定且用户友好的动态网站的秘诀。从环境搭建到数据交互,再到最佳实践分享,本文为开发者提供了一条清晰的学习路径,助力其在LAMP(Linux, Apache, MySQL, PHP/Perl/Python)栈上实现技术飞跃。 ####
|
2月前
|
关系型数据库 MySQL PHP
PHP与MySQL的无缝集成:构建动态网站的艺术####
本文将深入探讨PHP与MySQL如何携手合作,为开发者提供一套强大的工具集,以构建高效、动态且用户友好的网站。不同于传统的摘要概述,本文将以一个生动的案例引入,逐步揭示两者结合的魅力所在,最终展示如何通过简单几步实现数据驱动的Web应用开发。 ####
|
2月前
|
SQL 关系型数据库 MySQL
PHP与MySQL的高效协同开发策略####
本文深入探讨了PHP与MySQL在Web开发中的协同工作机制,通过优化配置、最佳实践和高级技巧,展示了如何提升数据库交互性能,确保数据安全,并促进代码可维护性。我们将从环境搭建讲起,逐步深入到查询优化、事务管理、安全防护及性能调优等核心环节,为开发者提供一套实战驱动的解决方案框架。 ####
|
2月前
|
SQL 关系型数据库 MySQL
PHP与MySQL动态网站开发深度探索####
本文旨在为读者提供一份详尽的指南,深入剖析PHP与MySQL在动态网站开发中的应用。通过具体实例与代码解析,揭示如何高效结合这两种技术构建功能强大、响应迅速的Web应用。文章将逐一探讨PHP的基础语法、MySQL数据库管理以及二者交互的关键技巧,旨在帮助开发者提升技能,优化项目开发流程。 ####
|
28天前
|
SQL 关系型数据库 MySQL
PHP与MySQL的高效交互:从基础到实践####
本文深入探讨了PHP与MySQL数据库之间的高效交互技术,涵盖了从基础连接到高级查询优化的全过程。不同于传统的摘要概述,这里我们直接以一段精简代码示例作为引子,展示如何在PHP中实现与MySQL的快速连接与简单查询,随后文章将围绕这一核心,逐步展开详细讲解,旨在为读者提供一个从入门到精通的实战指南。 ```php <?php // 数据库配置信息 $servername = "localhost"; $username = "root"; $password = "password"; $dbname = "test_db"; // 创建连接 $conn = new mysqli($se
29 0
|
2月前
|
关系型数据库 MySQL PHP
PHP与MySQL的深度整合:构建高效动态网站####
在当今这个数据驱动的时代,掌握如何高效地从数据库中检索和操作数据是至关重要的。本文将深入探讨PHP与MySQL的深度整合方法,揭示它们如何协同工作以优化数据处理流程,提升网站性能和用户体验。我们将通过实例分析、技巧分享和最佳实践指导,帮助你构建出既高效又可靠的动态网站。无论你是初学者还是有经验的开发者,都能从中获得宝贵的见解和实用的技能。 ####
25 0