CPC中文印刷社区官方博客

2010-03-19

rhel 5.x 完整www安装教程V2.0

归类于: 服务器技术 — 二戒 @ 13:04

rhel 5.x 完整www安装教程V2.0

V2.0 2010.3.13.修改自http://www.cnprint.org/bbs/blogs/1/blog312.html
操作系统更换为rhel 5.4,WWW服务器更改为nginx,php更改为php-fastcgi,mysql采用mysql 5.5.x等。

V1.0 2008.10.23.修改自http://www.cnprint.org/bbs/blogs/1/blog66.html
操作系统更换为rhel 5.2,WWW服务器更改为nginx,php更改为php-fastcgi等。
下次更新将修改为nginx 0.7.x mysql 5.1.x php 5.3.x,并且将采用mysqlnd,SSL连接

更换操作系统的原因,还是觉得RHEL更适合自己,更适合用作公网上运行的操作系统。

本文章将在http://www.cnprint.org/bbs/blogs/1/blog312.html
长期维护。欢迎转帖,转帖请注意出处。谢谢。

先声明,以下的这些文字个人的安装笔记,是参考了网上许多高手的成功经验组合而成的,说实话我自己的东西不多 :)我想把这些经验写下来,既可以对其他跟我一样摸索的兄弟一个经验,也可以防止以后自己都忘记了,嘿嘿。

所以如果某个大虾看到我借用了您的资源,请不要生气。同时欢迎大家指出错误。

by wangyu1314

关于redhat 5.4 的下载

1、在redhat注册一个用户,免费的那种
2、进入http://www.redhat.com/rhel/details/eval/,点击Download 30-day evaluation
3、输入你注册的用户名和密码,在填下表格,记得邮箱不要弄错了,其他好像无所谓。
4、收下邮件,会看到Your Red Hat Evaluation is being processed,再等
5、再收到邮件 Your 30-day Unsupported Evaluation Red Hat Enterprise Linux (Up to 2 Sockets) subscription
6、登陆redhat.com,点击右上角的Downloads ,点击Download your software here ,在下载软件就有可下载软件的列表了:

Red Hat Enterprise Linux (v. 5 for 32-bit x86)
Red Hat Enterprise Linux (v. 5 for 32-bit x86) Beta
RHEL Supplementary (v. 5 for 32-bit x86)
RHEL Supplementary (v. 5 for 32-bit x86) Beta
RHEL Virtualization (v. 5 for 32-bit x86)
Red Hat Enterprise Linux (v. 5 for 64-bit x86_64)
Red Hat Enterprise Linux (v. 5 for 64-bit x86_64) Beta
RHEL Supplementary (v. 5 for 64-bit x86_64)
RHEL Supplementary (v. 5 for 64-bit x86_64) Beta
RHEL Virtualization (v. 5 for 64-bit x86_64)
Red Hat Enterprise Linux (v. 5 for 64-bit Itanium)

下载你需要的就行了。

另外网上很难下载到rhel-client版本,这儿提供一个FTP可以下载安装,ftp://ftp.wallawalla.edu/pub/isos/redhat/rhel/,但是我没有找到从官方申请到安装序列号的方法,请慎用。

一、基本系统安装
1、下载RHEL 5
我是下载的DVD版本,大家也可以下载服务器CD安装版本,其实都差不多。大家可以到这儿下载,速度很快的。
ftp://ftp.wallawalla.edu/pub/isos/redhat/rhel/5.4/rhel-server-5.4-i386-dvd.iso
建议在windows下用BT或迅雷下载,速度会快很多。

下载后刻录成光盘。我建议您刻录DVD啦,如果是菜鸟,把图形界面也装上,可以在图形界面进行学习,当然强烈不建议在服务器上装桌面。
RHEL 5系列任何一个低版本都是可以的,安装后可以通过yum upgrade直接更新为最新版本。

2、安装RHEL 5
作为服务器,不安装不需要的组件,所以在选择组件的时候,除了选择FTP SERVER外取消所有组件的选择。也不要选web服务器。因为我们后面要手动编译安装。
系统约定RPM包和源码包存放位置
RPM包和源码包存放位置 /usr/local/src
源码包编译安装位置(prefix) /usr/local/webserver/
脚本以及维护程序存放位置 /usr/local/sbin
MySQL 数据库位置 /var/lib/mysql
nginx 网站根目录 /website/htdocs/
nginx 虚拟主机日志根目录 /website/logs/www
yum RPM包信息文件 /etc/yum.list

3、系统环境部署及调整
(1)检查系统是否正常
# more /var/log/messages //检查有无系统内核级错误信息
# dmesg //检查硬件设备是否有错误信息
# ifconfig //检查网卡设置是否正确
# ping www.163.com // 检查网络是否正常
(2)关闭不需要的服务
# export LANG=’en_US’ //设置语言
# setup //选择启动的服务
进入system service 选项。
以space 键选定所需服务。
以下仅列出需要启动的服务,未列出的服务一律关闭:

autitd
cpuspeed
crond
haldaemon
irqbalance 仅当服务器CPU为S.M.P架构或支持双核心、HT技术时,才需开启,否则关闭。
microcode_ctl
network
iptables
lvm2-monitor
messagebus
microcode_ctl
network
sshd
syslog
xinted

在命令行下输入下列命令进行注册,
rhn_register
根据屏幕提示一步步输入你的序列号后,如果你在安装时使用的是红帽提供给你的试用号,这儿操作步骤就更简单了,就可以使用红帽官方提供的在线更新和在线yum操作了。大约一个序列号可以在线更新2个月。
这样,穷人可以通过反复申请序号而长期使用RHEL,当然推荐商用还是购买红帽的服务,毕竟服务是比程序更有价值的。

在红帽企业Linux 5上默认启动用IPv6协议。但在某些情况下,需要禁用IPv6。
首先,在/etc/modprobe.conf文件中,如果如下一行存在的话将其删除:(大多数红帽企业Linux系统里面并没有这一行)
alias net-pf-10 ipv6
接下来,在/etc/modprobe.conf文件中添加一行:
alias net-pf-10 off

重启系统。IPv6支持现在已经被禁用。
如果要重新启用IPv6,只要将alias net-pf-10 off这一行从/etc/modprobe.conf文件中删除并重启机器就可以了。

(4)更新系统,我们使用yum(特别说明,如果没有使用上面说rhn_register注册程序,你无法在线yum更新的),
运行:
# yum upgrade
建议更新所有列出的程序,包括内核,目前,rhel 5.X的稳定性已经很不错了。

(5)定时校正服务器时间
# yum install –y ntp
# crontab -e
0 23 * * * /usr/sbin/ntpdate 210.167.182.10
以上命令设置好后存盘。
# /sbin/service crond reload
重载计划任务配置
您的机器将在每天的23:00根据日本的某个NTP服务器时间自动校准时间。

(6)FTP服务器的配置
vi /etc/vsftpd/vsftpd.conf
把anonymous_enable=YES
修改为anonymous_enable=No不允许匿名登录。
添加两句
chroot_local_user=yes
listen_port=2121
将用户锁定在主目录,并将FTP监听端口修改为2121
把ftpd_banner=*前的注释去掉。后面改成您的欢迎信息(这样设置可以避免显示ftp服务器的版本信息)
然后保存,service vsftpd start就可以了。
这时应当添加用户,因为root默认不能通过FTP方式登录,也不安全。
groupadd upload
useradd upload -g upload -d /website/htdocs/ -M

如果FTP登录时出现
ftp服务器连接失败,错误提示:
500 OOPS: cannot change directory:/home/*******
500 OOPS: child died
解决方法:
# setsebool ftpd_disable_trans 1
# service vsftpd restart
这样对于我们上传一些文件到系统中很方便。
大家有兴趣的可以看下这篇文章对vsftpd进行一个比较详细的了解

http://blog.chinaunix.net/u/10047/showart_198837.html

4、重新启动系统
# init 6
此时系统启动成功,可以删除老的内核

二、安装mysql, nginx, php, Zend Optimizer等基本环境
5. 使用 yum 程序安装所需开发包(以下为标准的rpm包名称)
# yum install gcc gcc-c++ flex bison autoconf automake bzip2-devel zlib-devel ncurses-devel libjpeg-devel libpng-devel libtiff-devel freetype-devel pam-devel openssl-devel libxml2-devel gettext-devel pcre-devel
#这里我们将编译GD所必须的一些小软件比如libpng,libtiff,freetype,libjpeg,gettext-devel等先用RPM 的方式一并安装好,避免手动编译浪费时间,同时也能避免很多错误,这几个小软件的编译很麻烦。这几个小软件编译错误了,GD当然安装不了,php5的编译当然也没戏了。所以我们抓大放小,对这些小牛鬼蛇神采取快速简洁的方式进行安装。并且对服务器的性能也不能产生什么影响。
另外libxml2系统已经默认安装了,所以我们不需要手工编译了,直接安装它的开发包就行了。

6. 源码编译安装所需包 (Source)
(1) GD2
# cd /usr/local/src
# wget http://www.libgd.org/releases/gd-2.0.36RC1.tar.gz
# tar xzvf gd-2.0.36RC1.tar.gz
# cd gd-2.0.36RC1
# yum install libtool libtool-ltdl
# aclocal
# CHOST=”i686-pc-linux-gnu” CFLAGS=”-O2 -msse -msse2 -msse3 -mmmx -mfpmath=sse -march=pentium4 -pipe -fomit-frame-pointer” CXXFLAGS=”-O2  -msse -msse2 -msse3 -mmmx  -mfpmath=sse -funroll-loops -march=pentium4 -pipe -felide-constructors -fno-exceptions -fno-rtti -fomit-frame-pointer” ./configure –prefix=/usr/local/webserver/gd2 –mandir=/usr/share/man
// 注意,CHOST=”i686-pc-linux-gnu” CFLAGS=”-O2 -msse -msse2 -msse3 -mmmx -mfpmath=sse -march=pentium4 -pipe -fomit-frame-pointer” CXXFLAGS=”-O2  -msse -msse2 -msse3 -mmmx  -mfpmath=sse -funroll-loops -march=pentium4 -pipe -felide-constructors -fno-exceptions -fno-rtti -fomit-frame-pointer” 这个环境参数只针对intel P4 芯片,如果您的CPU是AMD的,注意不能使用。请查看相应的编译优化参数。否则程序会无法编译,即使编译成功也无法运行,嘿嘿。
关于其他CPU的优化参见我的BLOG的一篇转贴:

http://www.cnprint.org/bbs/blogs/1/blog43.html

//./configure 配置。
# make //make 是用来编译的,它从 Makefile 中读取指令,然后编译。
# make install //make install 是用来安装的,它也从 Makefile 中读取指令,安装到指定的位置。

安装 google-perftools

为什么要用它?
TCMalloc(Thread-Caching Malloc)是google开发的开源工具──“google-perftools”中的成员。
与标准的glibc库的malloc相比,TCMalloc在内存的分配上效率和速度要高得多,对于提高mysql的性能很有好处。

wget http://google-perftools.googlecode.com/files/google-perftools-1.5.tar.gz
cd /usr/local/src
tar zxvf google-perftools-1.5.tar.gz
cd google-perftools-1.5/
./configure
make && make install

7、编译mysql 5.5.2
mysql 5.5.2目前还是开发版本,个人经过测试已经比较稳定了,对个人网站足够了,如果你对mysql的稳定性要求极高,建议你使用mysql 5.1.xx系列。
#cd /usr/local/src
# wget http://mirror.provenscaling.com/mysql/enterprise/source/5.0/mysql-5.0.70.tar.gz
tar zxvf mysql-5.5.2.tar.gz
cd mysql-5.5.2
sed -i ’s#151, 1#1088, 1#’ sql/mysqld.cc
CHOST=”i686-pc-linux-gnu” CFLAGS=”-O2 -msse -msse2 -msse3 -mmmx -mfpmath=sse -march=pentium4 -pipe -fomit-frame-pointer” CXXFLAGS=”-O2 -msse -msse2 -msse3 -mmmx -mfpmath=sse -funroll-loops -march=pentium4 -pipe -felide-constructors -fno-exceptions -fno-rtti -fomit-frame-pointer” ./configure ‘–prefix=/usr/local/webserver/mysql’ ‘–localstatedir=/var/lib/mysql’ ‘–with-comment=Source’ ‘–with-mysqld-user=mysql’ ‘–without-debug’ ‘–with-big-tables’ ‘–with-charset=utf8′ ‘–with-collation=utf8_general_ci’ ‘–with-extra-charsets=gbk,latin1,gb2312′ ‘–with-pthread’ ‘–enable-static’ ‘–with-client-ldflags=-all-static’ ‘–with-mysqld-ldflags=-all-static’ ‘–enable-assembler’ ‘–without-ndb-debug’ ‘–enable-thread-safe-client’ –with-unix-socket-path=/tmp/mysql.sock
make && make install
useradd mysql
cd /usr/local/webserver/mysql
bin/mysql_install_db –user=mysql
chown -R root:mysql .
chown -R mysql /var/lib/mysql
chgrp -R mysql .
cp share/mysql/my-medium.cnf /etc/my.cnf
cp share/mysql/mysql.server /etc/rc.d/init.d/mysqld
chmod 755 /etc/rc.d/init.d/mysqld
chkconfig –add mysqld
chkconfig –level 345 mysqld on
echo “/usr/local/webserver/mysql/lib” >> /etc/ld.so.conf && ldconfig

vi /etc/my.cnf
修改 MySQL 配置,增加部分优化参数,如下:
[mysqld]
ft_min_word_len=2

再添加一行,加载google-perftools
[mysqld_safe]
malloc-lib=/usr/local/lib/libtcmalloc_minimal.so

运行以下命令即可启动 MySQL 服务器:
# /etc/rc.d/init.d/mysqld start //启动 MySQL
# bin/mysqladmin -u root password “password_for_root”
# service mysqld stop //关闭 MySQL

8、创建www用户和组,以及供虚拟主机使用的目录:
/usr/sbin/groupadd www -g 58
/usr/sbin/useradd -u 58 -g www www
mkdir -p /website/htdocs/cnprint
chmod +w /website/htdocs/cnprint
chown -R www:www /website/htdocs/blog
mkdir -p /website/htdocs/job
chmod +w /website/htdocs/job
chown -R www:www /website/htdocs/job

安装pcre
cd /usr/local/src
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.01.tar.gz

tar zxvf pcre-8.01.tar.gz
cd pcre-8.01/
CHOST=”i686-pc-linux-gnu” CFLAGS=”-O2 -msse2 -mmmx -mfpmath=sse -march=pentium4 -pipe -fomit-frame-pointer -fstack-protector -ftracer -fvisibility=hidden -fweb -frename-registers” CXXFLAGS=”-O2 -msse2 -mmmx -mfpmath=sse -funroll-loops -march=pentium4 -pipe -felide-constructors -fno-exceptions -fno-rtti -fomit-frame-pointer -fvisibility-inlines-hidden -fno-enforce-eh-specs -fstack-protector -ftracer -fvisibility=hidden -fweb -frename-registers” LDFLAGS=”-Wl,-O2 -Wl,-z -Wl,–sort-common -s” ./configure
make && make install

9、编译php 5.2.13
Suhosin是php增强型安全补丁,可以编译到静态内核中,也可以编译成php动态扩展。我个人强烈您建议安装成静态内核。Suhosin已经进入 Gentoo Linux、FreeBSD、OpenSuSE Linux、Mandriva Linux、Debian Linux官方包。下面的以下先说静态安装步骤。当然您也可以在安装php后将它编译成php的动态扩展。
在使用FastCGI方式运行php的时候,如果我们改变了php.ini的设置,就得重新启动php的fastcgi守护程序。如果你的系统负载比较大的话,这个重启过程或许会让你的系统中断服务一段时间。php-fpm就是为了解决这个问题而诞生的,它可以在php的fastcgi进程不中断的情况下重新加载你改动过的php.ini。
而且php-fpm可以不用再依赖其它的fastcgi启动器,比如lighttpd的spawn-fcgi,对于我来说终于可以摆脱lighttpd的影子了。

# cd /usr/local/src
# wget http://cn.php.net/get/php-5.2.13.tar.gz/from/this/mirror
# wget http://download.suhosin.org/suhosin-patch-5.2.13-0.9.7.patch.gz
wget http://php-fpm.org/downloads/php-5.2.13-fpm-0.5.13.diff.gz
# tar zxvf php-5.2.13.tar.gz
# gzip -cd suhosin-patch-5.2.13-0.9.7.patch.gz | patch -d php-5.2.13 -p1
# gzip -cd php-5.2.13-fpm-0.5.13.diff.gz | patch -d php-5.2.13 -p1
# cd php-5.2.13
# ./buildconf –force
# CHOST=”i686-pc-linux-gnu” CFLAGS=”-O2 -msse -msse2 -msse3 -mmmx -mfpmath=sse -march=pentium4 -pipe -fomit-frame-pointer” CXXFLAGS=”-O2  -msse -msse2 -msse3 -mmmx  -mfpmath=sse -funroll-loops -march=pentium4 -pipe -felide-constructors -fno-exceptions -fno-rtti -fomit-frame-pointer” ./configure –prefix=/usr/local/webserver/php –with-pear=/usr/share/php –with-zlib-dir –with-bz2 –with-libxml-dir=/usr –with-gd=/usr/local/webserver/gd2 –enable-gd-native-ttf –enable-gd-jis-conv –with-freetype-dir –with-jpeg-dir –with-png-dir –with-ttf=shared,/usr –enable-mbstring –with-mysql=/usr/local/webserver/mysql –with-mysqli=/usr/local/webserver/mysql/bin/mysql_config –with-config-file-path=/etc –with-iconv –disable-ipv6 –enable-static –enable-inline-optimization –enable-zend-multibyte –enable-sockets –with-gettext –enable-sysvsem –enable-mbregex –enable-fastcgi –enable-fpm –enable-force-cgi-redirect –enable-suhosin –without-sqlite –disable-pdo –disable-reflection

配置成功会提示:
+——————————————————————–+
| License: |
| This software is subject to the PHP License, available in this |
| distribution in the file LICENSE. By continuing this installation |
| process, you are bound by the terms of this license agreement. |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point. |
+——————————————————————–+
Thank you for using PHP.
# sed -i ’s#-lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt#& -liconv#’ Makefile
# make
# make test
# make install
# cp php.ini-recommended /etc/php.ini
# echo “/usr/local/webserver/php/lib” >> /etc/ld.so.conf && ldconfig

在这里也顺便说一下将suhosin安装成为php的动态扩展的方法。毕竟网上根本不见它的中文安装教程。
虽然我个人不推荐这种方式。
wget http://download.suhosin.org/suhosin-0.9.29.tgz
tar zxvf suhosin-0.9.29.tgz
cd suhosin-0.9.29
./configure –with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
会提示编译的模块存在的目录,记住它。
Installing shared extensions: /usr/local/webserver/php/lib/php/extensions/no-debug-zts-20060613/
然后在php.ini中增加一行下列语句。
extension=”/usr/local/webserver/php/lib/php/extensions/no-debug-zts-20060613/suhosin.so”

10、创建php-fpm配置文件(php-fpm是为PHP打的一个FastCGI管理补丁,可以平滑变更php.ini配置而无需重启php-cgi):
在/usr/local/webserver/php/etc/目录中创建php-fpm.conf文件:
rm -f /usr/local/webserver/php/etc/php-fpm.conf
vi /usr/local/webserver/php/etc/php-fpm.conf

输入以下内容(如果您安装 Nginx + PHP 用于程序调试,请将以下的<value name=”display_errors”>0</value>改为<value name=”display_errors”>1</value>,以便显示PHP错误信息,否则,Nginx 会报状态为500的空白错误页):

<?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”>1</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”>35</value>

</value>

</value>

The timeout (in seconds) for serving a single request after which the worker process will be terminated
Should be used when ‘max_execution_time’ ini option does not stop script execution for some reason
‘0s’ means ‘off’
<value name=”request_terminate_timeout”>0s</value>

The timeout (in seconds) for serving of single request after which a php backtrace will be dumped to slow.log file
‘0s’ means ‘off’
<value name=”request_slowlog_timeout”>0s</value>

The log file for slow requests
<value name=”slowlog”>logs/slow.log</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, absolute path
<value name=”chroot”></value>

Chdir to this directory at the start, absolute path
<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”>10240</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>

11、启动php-cgi进程:
ulimit -SHn 51200
/usr/local/webserver/php/sbin/php-fpm start

注:/usr/local/webserver/php/sbin/php-fpm还有其他参数,包括:start|stop|quit|restart|reload|logrotate,修改php.ini后不重启php-cgi,重新加载配置文件使用reload。

PHP5.1.x开始需要设置时区,默认时区与中国时区差8个小时,这种情况需要在php.ini中这么设置,找到date.timezone,去掉前面的分号,修改为以下值,大陆地区可用的值是:Asia/Chongqing ,Asia/Shanghai ,Asia/Urumqi (依次为重庆,上海,乌鲁木齐)
不然一些php程序的时间老是和中国标准时间相差8个小时。我的我的VBB论坛在windows上就是这样。这儿有亚洲地区的对应时区。

http://www.php.net/manual/en/timezones.asia.php

12. 编译安装 nginx

Nginx (“engine x”) 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。Igor 将源代码以类BSD许可证的形式发布。
Nginx 超越 Apache 的高性能和稳定性,使得国内使用 Nginx 作为 Web 服务器的网站也越来越多,其中包括新浪博客、新浪播客、网易新闻等门户网站频道,六间房、56.com等视频分享网站,Discuz!官方论坛、水木社区等知名论坛,豆瓣、YUPOO相册、海内SNS、迅雷在线,中文印刷社区等新兴Web 2.0网站。

# cd /usr/local/src
# wget http://sysoev.ru/nginx/nginx-0.7.65.tar.gz
# tar zxvf nginx-0.7.65.tar.gz
# cd nginx-0.7.65
# CHOST=”i686-pc-linux-gnu” CFLAGS=”-O2 -msse -msse2 -msse3 -mmmx -mfpmath=sse -march=pentium4 -pipe -fomit-frame-pointer” CXXFLAGS=”-O2  -msse -msse2 -msse3 -mmmx  -mfpmath=sse -funroll-loops -march=pentium4 -pipe -felide-constructors -fno-exceptions -fno-rtti -fomit-frame-pointer” ./configure –user=www –group=www –prefix=/usr/local/webserver/nginx –with-http_stub_status_module
# make
# make install

13、创建Nginx日志目录
mkdir -p /website/logs
chmod +w /website/logs
chown -R www:www /website/logs

14、创建Nginx配置文件
①、在/usr/local/webserver/nginx/conf/目录中创建nginx.conf文件:
rm -f /usr/local/webserver/nginx/conf/nginx.conf
vi /usr/local/webserver/nginx/conf/nginx.conf

输入以下内容:

user  www www;

worker_processes 8;

# error_log  /website/logs/nginx_error.log  crit;

pid        /usr/local/webserver/nginx/logs/nginx.pid;

#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;

events
{
use epoll;

worker_connections 51200;
}

http
{
include       mime.types;
default_type  application/octet-stream;

charset  utf-8;

server_names_hash_bucket_size 128;
server_tokens  off;
client_max_body_size 50m;
#access_log /dev/null;
error_log /dev/null;

sendfile on;
tcp_nopush     on;

keepalive_timeout 2;

tcp_nodelay on;

fastcgi_connect_timeout 300;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
fastcgi_temp_path /dev/shm;

gzip off;
gzip_min_length  1k;
gzip_buffers     4 16k;
gzip_http_version 1.1;
gzip_comp_level 1;
gzip_types       text/plain application/x-javascript text/css application/xml;
gzip_vary on;

server
{
listen       80;
server_name  www.cnprint.org;
index index.php index.html;
root  /website/htdocs/cnprint;
location /bbs/ {
rewrite ^/bbs/((urllist|sitemap_).*\.(xml|txt)(\.gz)?)$ /bbs/vbseo_sitemap/vbseo_getsitemap.php?sitemap=$1 last;

if ($request_filename ~ “\.php$”) {
rewrite ^(.*)$ /bbs/vbseo.php?vbseourl=$1 last;
}

if (!-e $request_filename) {
rewrite ^/bbs/(.*)$ /bbs/vbseo.php?vbseourl=$1 last;
}

}

location ~ .*\.php?$
{
include fcgi.conf;
#fastcgi_pass  unix:/tmp/php-cgi.sock;
fastcgi_pass  127.0.0.1:9000;
fastcgi_index index.php;
}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires      30d;
}

location ~ .*\.(js|css)?$
{
expires      1h;
}

log_format  access  ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” $http_x_forwarded_for’;
sendfile on;
keepalive_timeout 2;

tcp_nodelay on;

fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
tcp_nopush on;
client_body_buffer_size    256k;
}

server
{
listen       80;
server_name  www.cpcjob.com;
index index.php index.html index.htm;
root  /website/htdocs/job;

location ~ .*\.php?$
{
include fcgi.conf;
#fastcgi_pass  unix:/tmp/php-cgi.sock;
fastcgi_pass  127.0.0.1:9000;
fastcgi_index index.php;
}

sendfile on;
tcp_nopush on;
}
}

②、在/usr/local/webserver/nginx/conf/目录中创建fcgi.conf文件:
vi /usr/local/webserver/nginx/conf/fcgi.conf

输入以下内容:

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;

# PHP only, required if PHP was built with –enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

15、启动Nginx
ulimit -SHn 51200
/usr/local/webserver/nginx/sbin/nginx

# pkill nginx
# /usr/local/webserver/nginx/sbin/nginx //重启 nginx

17、在不停止Nginx服务的情况下平滑变更Nginx配置
1、修改/usr/local/webserver/nginx/conf/nginx.conf配置文件后,请执行以下命令检查配置文件是否正确:
/usr/local/webserver/nginx/sbin/nginx -t

如果屏幕显示以下两行信息,说明配置文件正确:
the configuration file /usr/local/webserver/nginx/conf/nginx.conf syntax is ok
the configuration file /usr/local/webserver/nginx/conf/nginx.conf was tested successfully

这时,输入以下命令查看Nginx主进程号:
ps -ef | grep “nginx: master process” | grep -v “grep” | awk -F ‘ ‘ ‘{print $2}’

屏幕显示的即为Nginx主进程号,例如:
6302
这时,执行以下命令即可使修改过的Nginx配置文件生效:
kill -HUP 6302

或者无需这么麻烦,找到Nginx的Pid文件:
kill -HUP `cat /usr/local/webserver/nginx/nginx.pid`

其实更简单的方法就是不管啥子进程
直接用
pkill nginx
结束程序所有进程

开机自动启动php-fpm和nginx,有两种方法。
一种修改rc.local文件,设置自启动。

在/etc/rc.d/rc.local文件中加入两行

/usr/local/webserver/php/sbin/php-fpm start
/usr/local/webserver/nginx/sbin/nginx

这样每次重新启动系统以后,php-fpm和nginx也会随系统一起启动.

另外一种方法是设置成系统服务,这是红帽上比较便于管理。

vi /etc/init.d/php-fpm
新增加下列文本:

#!/bin/bash
# php-fpm Startup script for the php-fpm
# this script create it by jackbillow at 2007.10.15.
# it is v.0.0.2 version.
# if you find any errors on this scripts,please contact jackbillow.
# and send mail to jackbillow at gmail dot com.
# chkconfig: – 85 15
# description: php-fpm is a high-performance fastcgi.
#              It has a lot of features, but it’s not for everyone.
# processname: php-fpm
# pidfile: /usr/local/webserver/php/logs/php-fpm.pid
# config: /usr/local/webserver/php/etc/php-fpm.conf

php_fpm_BIN=/usr/local/webserver/php/bin/php-cgi
php_fpm_CONF=/usr/local/webserver/php/etc/php-fpm.conf
php_fpm_PID=/usr/local/webserver/php/logs/php-fpm.pid

php_opts=”–fpm-config $php_fpm_CONF”

wait_for_pid () {
try=0

while test $try -lt 35 ; do

case “$1″ in
‘created’)
if [ -f "$2" ] ; then
try=”
break
fi
;;

‘removed’)
if [ ! -f "$2" ] ; then
try=”
break
fi
;;
esac

echo -n .
try=`expr $try + 1`
sleep 1

done

}

case “$1″ in
start)
echo -n “Starting php_fpm ”

$php_fpm_BIN –fpm $php_opts

if [ "$?" != 0 ] ; then
echo ” failed”
exit 1
fi

wait_for_pid created $php_fpm_PID

if [ -n "$try" ] ; then
echo ” failed”
exit 1
else
echo ” done”
fi
;;

stop)
echo -n “Shutting down php_fpm ”

if [ ! -r $php_fpm_PID ] ; then
echo “warning, no pid file found – php-fpm is not running ?”
exit 1
fi

kill -TERM `cat $php_fpm_PID`

wait_for_pid removed $php_fpm_PID

if [ -n "$try" ] ; then
echo ” failed”
exit 1
else
echo ” done”
fi
;;

quit)
echo -n “Gracefully shutting down php_fpm ”

if [ ! -r $php_fpm_PID ] ; then
echo “warning, no pid file found – php-fpm is not running ?”
exit 1
fi

kill -QUIT `cat $php_fpm_PID`

wait_for_pid removed $php_fpm_PID

if [ -n "$try" ] ; then
echo ” failed”
exit 1
else
echo ” done”
fi
;;

restart)
$0 stop
$0 start
;;

reload)

echo -n “Reload service php-fpm ”

if [ ! -r $php_fpm_PID ] ; then
echo “warning, no pid file found – php-fpm is not running ?”
exit 1
fi

kill -USR2 `cat $php_fpm_PID`

echo ” done”
;;

logrotate)

echo -n “Re-opening php-fpm log file ”

if [ ! -r $php_fpm_PID ] ; then
echo “warning, no pid file found – php-fpm is not running ?”
exit 1
fi

kill -USR1 `cat $php_fpm_PID`

echo ” done”
;;

*)
echo “Usage: $0 {start|stop|quit|restart|reload|logrotate}”
exit 1
;;

esac

保存。
chmod 755 /etc/init.d/php-fpm
chkconfig –add php-fpm
chkconfig –level 345 php-fpm on
这样php-fpm系统服务就设置成功了。

同样再设置nginx成系统服务:

vi /etc/init.d/nginx
新增加下列文本:
#!/bin/bash
# nginx Startup script for the Nginx HTTP Server
# this script create it by jackbillow at 2007.10.15.
# it is v.0.0.2 version.
# if you find any errors on this scripts,please contact jackbillow.
# and send mail to jackbillow at gmail dot com.
# chkconfig: – 85 15
# description: Nginx is a high-performance web and proxy server.
#              It has a lot of features, but it’s not for everyone.
# processname: nginx
# pidfile: /usr/local/webserver/nginx/logs/nginx.pid
# config: /usr/local/webserver/nginx/conf/nginx.conf

nginx=/usr/local/webserver/nginx/sbin/nginx
nginx_config=/usr/local/webserver/nginx/conf/nginx.conf
nginx_pid=/usr/local/webserver/nginx/logs/nginx.pid

RETVAL=0
prog=”nginx”

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

[ -x $nginx ] || exit 0

# Start nginx daemons functions.
start() {

if [ -e $nginx_pid ];then
echo “nginx already running….”
exit 1
fi

echo -n $”Starting $prog: ”
daemon $nginx -c ${nginx_config}
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/nginx
return $RETVAL

}

# Stop nginx daemons functions.
stop() {
echo -n $”Stopping $prog: ”
killproc $nginx
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /usr/local/webserver/nginx/logs/nginx.pid
}

# reload nginx service functions.
reload() {

echo -n $”Reloading $prog: ”
#kill -HUP `cat ${nginx_pid}`
killproc $nginx -HUP
RETVAL=$?
echo

}

# See how we were called.
case “$1″ in
start)
start
;;

stop)
stop
;;

reload)
reload
;;

restart)
stop
start
;;

status)
status $prog
RETVAL=$?
;;
*)
echo $”Usage: $prog {start|stop|restart|reload|status|help}”
exit 1
esac

exit $RETVAL

保存。

chmod 755 /etc/init.d/nginx
chkconfig –add nginx
chkconfig –level 345 nginx on

18、安装 Zend Optimizer
# cd /usr/local/src
# wget http://downloads.zend.com/optimizer/3.3.9/ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz
# tar xzvf ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz
# cp ZendOptimizer-3.3.9-linux-glibc23-i386/data/5_2_x_comp/ZendOptimizer.so /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613

再加入到php.ini文件中

# vi /etc/php.ini
把下列行加入php.ini的最后就行了
zend_optimizer.optimization_level=15
zend_extension=/usr/local/Zend/ZendOptimizer.so
总之一句话,如果您的服务器环境不需要ZendOptimizer,那么能不安就不安装这个

2010-03-14

两个域名成功转移到Godaddy

归类于: 论坛相关 — 二戒 @ 13:44

基于国内的形势,我们决定将论坛拥有的两个域名cnprint.org和cpcjob.com转出中国大陆,期间悲喜曲折,实在令人扼腕。

去年12月底联系cnprint.org的域名代理商“中国域名网”的客服,要求转出域名,他们同意,但是说根据规定,要先续费1年才允许转出,我们心想,为了能够转出也行吧。要求交100元续费1年,问为什么这么贵,说价格早就涨了,晕。后来了解到很多新网互联的代理的续费价格才50多元。这个混帐客服。

续费1年后,要求寄资料到北京新网互联去审核,按照他们的要求寄了资料,两天后,新网互联的回复简直让人傻眼:

你好:

cnprint.org
1.域名转移申请表所有者签字的地方未签字
2.无代理的身份证复印件
3.域名在2009-12-25续费,国际域名续费60天后才可以提交转移,请续费60天后再重新邮寄完整的转移资料办理转移。

这时跑去问域名网的客服,她才忙去打电话询问,问清楚才知道,现在新网互联转出根本不要求续费,她在代理后台“看到”的已经是老皇历了。这下完了,续费了反而转不出去了。也没有其他办法了。只有再等2个月。这个混帐客服一句道歉的话都没有,简直令人郁闷。

期间为了办论坛的电子公告,要将域名从个人名下转移到公司名下,域名“过户”时再询问这个域名网的客服,就已经不怎么理睬了,问10句最多回复1-2句,好像我们已经很令她厌烦了。

今年2月底,续费60天到期了,我便要求域名网的客服提供代理的身份证件,我晕,这个时候,她根本就不理了,问100句都不会回复你一句。真是太混帐了。只有找他们老板,终于套出来了,他们在新网互联根本没有客户了,那个个人代理早就离开公司,他们也找不到人和联系方式了,就跟我续费100元都费了不少力。看看,这是什么代理?在此情况也曾经想过重新转移代理,用新代理的身份资料去搞域名转移,但是一转移,又要续费,一续费又要等两个月,纯粹是恶性循环。

在此情况下,我就只有自己问新网互联,先写信投诉他们,回复说如果找不到代理,联系他们的北京渠道人员处理。也行吧。那就再打总机找到北京渠道,渠道说,她了解的转移转移不需要代理的身份证件,只要邮箱确认就行了,同时给了我那个具体的个人代理的两个手机号,叫我先跟联系一下,联系不到代理再说。然后又给了一个他们负责域名转移的高小姐的联系电话,高小姐也说邮箱也可以的。

这时我们突然想到,当初域名过户时,我那代理也回复了一封信件表示同意,看来代理的邮箱是有效的。然后根据北京渠道提供的两个手机号,打过去找代理人,晕,居然找到了。好话说了一篇,代理同意回复邮件。

在跟新网互联联系期间,曾经根据网上资料去ICCAN投诉过3次,晕,想直接获取自己的转移密码,结果一点消息都没有。

然后我们重新寄资料给新网互联,3月1日圆通快递,期间曾经给代理发过1个短消息打过一个电话催促确认,3月9日上午10点终于发来了域名转移密码链接。

尊敬的合作伙伴,您好!

域名c*****t.org的转移申请我们已经审核通过,请点击下列链接,获取该域名的转移密码。
注:请勿双击。如果无法点击,请完整复制链接到IE的地址栏进行访问。
此链接只能点击一次,如果因为网络原因导致页面打开慢,请您耐心等待,不要刷新页面或者重复点击链接。
获取到转移密码后,请您在5天内提交转移,超过5天需要重新索取。

http://www.dns.com.cn/main/getoncetranferpassword.php?enstring=dcJcY1uVufbMGA56qHQE55JdL9CCnE2r56XgjoA95hvskgnyUw2ZsYw3o1nOOKTH

点击这个链接,获得了转移密码:

尊敬的用户,您好!
以下是您索取的转移密码,请您在5天内提交转移,超过5天需要
重新索取。
域名:c*****t.org
转移密码:h4d1rq^h
如有问题,欢迎咨询新网互联各分支机构。
技术支持电话:95105612(免长话费)
北京

然后马上办理域名转移,先前看到其他人说新网互联转出域名,会发用户发来一封手动确认的邮件,我也以为会发来,结果一直没等到,耐心等待了5天,3月14日的上午11点,Godaddy发来了转移成功的信件。

Congratulations! The transfer request for the following domain name(s) has been completed:

CNPRINT.ORG

查看whois,已经变更成:

Domain ID:D104479193-LROR
Domain Name:CNPRINT.ORG
Created On:31-May-2004 05:35:16 UTC
Last Updated On:14-Mar-2010 03:51:19 UTC
Expiration Date:31-May-2012 05:35:16 UTC
Sponsoring Registrar:GoDaddy.com, Inc. (R91-LROR)
Status:CLIENT DELETE PROHIBITED
Status:CLIENT RENEW PROHIBITED
Status:CLIENT TRANSFER PROHIBITED
Status:CLIENT UPDATE PROHIBITED
Status:TRANSFER PROHIBITED
Status:TRANSFERPERIOD
Registrant ID:CR43827854
Registrant Name:wang jing
Registrant Organization:Chongqing ChuanXia Technology Co., Ltd.
Registrant Street1:Jiangbei Distruct Chongqing

总结这次的域名转移,吃了很多亏,快递费和电话费都不少于100元,心力更是费却无数。
这次吃亏的原因是 碰上了一个不负责的个人代理,既不熟悉业务,服务意识也非常差。稍微实力大点的代理,就没有这么多问题了。这个从我转移cpcjob.com的过程中可以看到。

cpcjob.com是在厦门数字引擎注册的,他们是新网的代理,根据他们网页的提示,下载了相关的表格打印签名填好后寄去。

2月25日寄的资料,3月1日下午数字引擎的人就打电话过来确认,先说不是在他们那儿注册的域名,呵呵,未必我会搞错?找了半天,终于确认了。过了两分钟,又一个帅哥打座机来确认是不是本人的意愿,确认后,马上就说,通过审核请注意查收域名密码,几分钟后,就收到了转移密码了:

件人: xinnet
发送时间: 2010-03-01 15:04:54
收件人: 1688
抄送:
主题: 新网域名转出信 (域名转移注册商转出新网信)

尊敬的用户:

您好!

本邮件是[cpcjob.com] 域名转出新网的确认通知信

域名转移密码:[P7V5l3x0]

请将以上密码在5天内提供给域名转入服务商,并触发转移,如果您未及时将密码提供给域名转入方或是域名转入方未能在5天内触发转移指令,以上转移密码将会失效,请联系该域名代理商重新获得。

注:此邮件目的是保证域名所有人拥有域名转移的权利,以上转移密码是触发转移的唯一凭证,请确保密码的安全,如果不希望进行域名转移,则不需要对此邮件做出反应。

—————————————————-

感谢您对新网的支持与合作,如果有任何问题,欢迎随时与我们联系!

顺祝

工作顺利!

北京新网数码信息技术有限公司
www.xinnet.com
————————
公司地址:北京亦庄经济技术开发区北工大软件园2号楼1层
邮政编码: 100176
联系电话: 4007005766
传真号码: 010-58022077
客服邮箱: support@xinnet.com

马上转移,新网也是不会人工确认转移的,耐心等待5天后,域名自动转移到Godaddy。相对来说,cpcjob.com的转移轻松得多。

经此之后我们的两个域名都转移到国外,再也不用担心无法获取转移密码了,再也不担心没有备案被停止解析了,再也不担心因为有“低俗”内容被hold了。

经过这次转移获得几点经验:
注册域名,尽可能选择在国外注册,国外任何一家注册商都比大陆好,域名的风险都要小得多,域名始终都是你自己的。

如果一定要在国内注册,请找那种可以直接在线获取转移密码,可以在线修改注册人的注册商,不需要寄什么资料,国内貌似易名和名富转移“过户”都很容易。

如果你一定要注册万网新网新网互联这些注册商的,请找大代理,请填写正确的注册信息,小代理你千万不要找,否则你转移的时候不是一般的痛苦,甚至转移不了。貌似最近万网和新网也开通了“有问必答在线获取转移密码”的方式了,可惜我没有享受到。

国外的域名更便宜,同时域名解析更稳定,很少听说国外的DNS出现毛病的情况。Godaddy一个com域名1年才不到50元,相对国内实在便宜太多,国内人工远低于美国,为什么域名却更贵,呵呵,估计请了很多不必请的人,管了很多不该管的事有关吧。Godaddy管理2700万域名也有大量的主机业务,员工7-800人,按照这个比例,新网互联管理20多万个域名,6-7人就够了。呵呵。现实呢?

2010-03-11

论坛从个人名下转到公司

归类于: 论坛相关 — 二戒 @ 12:15

关于ICP备案申请审核通过的通知

webmaster@mail.miibeian.gov.cn
发送至 我

显示详细信息 10:08 (2 小时前)

尊敬的用户[重庆川夏科技有限公司]:您的ICP备案申请已通过审核,备案/许可证编号为: 渝ICP备05004292号 ,审核通过日期:2010-03-11。

2009-12-28

欢迎!

归类于: 未分类 — 二戒 @ 06:54

欢迎您的到来,此博客为CPC中文印刷社区的官方正式博客,用于发布和社区有关的信息。

Powered by WordPress