centos服务器安装后一系列配置参考(centos 6.x)

iptables

centos 6.x的iptables默认配置文件,开启必要的ssh,icmp/ping,不接受其它连接,有需要开放的端口再做手工开启;这是科学的。

不过,似乎,有些vps等环境下默认是空的,即接受任意连接;甚至没有安装iptables。这时,建议自行yum安装,并使用如下的默认配置文件,写入到 /etc/sysconfig/iptables,然后重启iptables。

# Generated by iptables-save v1.4.7 on Sat Dec 17 10:11:38 2011
# Manual customization of this file is not recommended.
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

注意:默认拒绝FORWARD转发,果真有需要请自行开放。

sshd: 端口

ssh的服务器端,重要性不需多讲。

其主配置文件 /etc/ssh/sshd_config  (注意不是 /etc/ssh/ssh_config),下面sshd相关配置都在该文件上修改

改一下监听端口,虽然刻意扫描你,还是没的跑,但起码隐藏了一点点。大概13行,Port指令,默认是注释掉的,取消注释,将其后端口号22改成你想要改的,下面以12345为例。注意不要超过65535,不要使用其它已监听端口

Port 12345

[至关重要] iptables里打开相关端口,不要断开当前连接、重启sshd 服务,保存iptables配置到磁盘(以备下次开机时自动生效)

# iptables -I INPUT 4 -m state --state NEW -p tcp --dport 12345 -j ACCEPT
# /etc/init.d/sshd restart
# /etc/init.d/iptables save

再开一个ssh客户端测试连接,确保改后的端口可以连接。(即使已改过端口,当前连接也还是会保持的)

指定自定义端口的ssh连接: ssh -p 12345  username@your.host.ip

sshd: 用户白名单

限制一下允许通过ssh远程登录的用户名(白名单),可以在文件结尾增加如下一行

AllowUsers user1 user2 user3

其中的user1 user2 user3 是允许通过ssh远程登录的用户,多个用户使用空格分隔。当然,你要事先创建这些普通用户,不然下次就连不上了。

sshd: 禁止root用户直接通过ssh登录

被暴力破解root密码是一件经常遇到的事情,所以严重推荐禁止掉,尤其是使用默认22端口时。增加下一行配置

PermitRootLogin no

日期时间的自动同步

首先确保rdate已安装,使用美国授时中心服务器,加入到crontab,每周日同步一次

# crontab -e
* * * * 0 rdate -s time.nist.gov

详细可参考 linux下日期时间自动同步设置(rdate,ntpdate两种方法)

yum源

epel

似乎centos 6.x的某一个版本起,其官方yum默认包含了epel-release的yum源,直接安装即可。

yum install epel-release

nginx

如果使用nginx的话,可以使用nginx的官方yum源。当然里面只有nginx,没有别的包,所以不会破坏centos原装包的依赖关系。

rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

详细参考nginx官方yum源说明 http://nginx.org/en/linux_packages.html#stable

selinux

这货很强悍,然而有时也很麻烦,尤其是不够熟的时候,可以考虑关闭,配置在文件 /etc/sysconfig/selinux

SELINUX=disabled
或
SELINUX=permissive

apache/httpd

取消默认欢迎页,/etc/httpd/conf.d/welcome.conf 注释掉相关配置行,但不建议删除该文件。因为yum update更新后,这个文件可能被自动恢复。

添加文件 /etc/httpd/conf.d/vhost.conf, 配置虚拟站点,但建议第一个设置成空站点。因为第一个VirtualHost是默认站点,没有匹配的host主机名,都会被apache丢给默认站点。

NameVirtualHost *:80
<VirtualHost *:80>
        ServerName default.host.com
        DocumentRoot "/var/www/html/default/html/"
        <Directory "/var/www/html/default/html/">
                AllowOverride None
                Order allow,deny
                Allow from all
        </Directory>
        <IfModule mod_php5.c>
        php_admin_value open_basedir "/tmp/:/var/www/html/default/html"
        </IfModule>
</VirtualHost>

<VirtualHost *:80>
        ServerName www.vhost1.com
        DocumentRoot "/var/www/html/vhost1.com/www/"
        <Directory "/var/www/html/vhost1.com/www/">
                AllowOverride All
                Order allow,deny
                Allow from all
        </Directory>
        <IfModule mod_php5.c>
        php_admin_value open_basedir "/tmp/:/var/lib/php/session:/var/www/html/vhost1.com/"
        </IfModule>
</VirtualHost>

启用http压缩,gzip压缩是否有必要启用,观点并不一致(CentOS默认配置是不启用的),如需启用,确认一下 apache主配置文件中(大约1011行)已经启用了mod_deflate.so模块,新增文件 /etc/httpd/conf.d/http_gzip.conf ,内容如下

<ifmodule mod_deflate.c>
#压缩率, 6是建议值
DeflateCompressionLevel 6
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php
AddOutputFilterByType DEFLATE image/svg+xml
</ifmodule>

禁止添加默认页面编码的http头,大概 759行

AddDefaultCharset UTF-8

最好注释掉,让浏览器自行选择编码,而不是弄巧成拙的强制UTF-8编码,造成非UTF-8页面全部乱码掉

MySQL-Server

配置参考 一份生产环境下MySQL服务配置优化参考样本 (请按硬件及负载酌情修改)

备份脚本,加入到crontab中,定时执行。注意其中备份存储目录、待备份数据库列表、及备份用户账号密码

#!/bin/bash
# Program:
#      auto backup mysql database
# History:
# 2012/05/14    fengyqf First release
#backup folder, with the last slash "/"
backup_folder="/home/user/backup/mysql/"
filename=`date +_%Y%m%d_%N`

for db in db1 db2 db3
do
mysqldump -hlocalhost --opt -e --max_allowed_packet=1048576 --net_buffer_length=16384 -uroot -pYourMysqlRootPassword $db |gzip > $backup_folder$db$filename.sql.gz
done

其它置参考

ulimit, 文件描述符 http://www.path8.net/tn/archives/2024

sysctl, 内核优化 #TODO#

 

供centos用的yum源(redhat, scientific)/不定期更新

简介

redhat/centos系列是追求稳定性的改造版,官方收纳的软件包很有限。实际使用中,我们要么自己编译,要么使用第三方编译好的二进制版;为简便起见我们常常选择后者。第三方yum源纳入包的标准不一,有些追求稳定,像epel,有些则求新。对于求稳定的朋友,建议安装过需要的软件后,卸载(可以将.epo文件改名备份)这些第三源,以免造成系统包被替换。像epel这样连centos官方都推荐的源,还有nginx官方源这种只有单一少数几个包的源,可以长期保留。

epel

这个不用多说了。

elrepo

elrepo 支持centos/redhat 5,6,7系列,大量的内核模块源,如hfsplus支持等。

在yum.repo配置里,部分选项默认没有启用,需要自行启用

http://elrepo.org/tiki/About

li.nux.ro/nux

目前有rhel/centos6及7两个版本的rpm/yum源,它需要依赖epel源。

使用说明,简洁,不啰嗦,http://li.nux.ro/repos.html

rpmfusion

(待补充)

atrpms

据说atrpms会替换系统包,毕竟rhel/epel的版本经常太老

更多参考CentOS官方wiki文档 https://wiki.centos.org/zh/AdditionalResources/Repositories

li.nux.ro/nux: 值得使用的一个redhat el7/centos7的rpm/yum源

之前在centos 6下一直用epel+rpmfusion源,但至今(2014-09-07),rpmfusion仍没有推出centos7/rhel7下的源,所以安装软件是痛苦的事情。

对于缺少yum的软件,我习惯是在 http://rpm.pbone.net/ 上手工查找,然后找最近似改造版的下载。例如在centos下,首选找同版本centos或redhat el包,没有的话找最近似的fedora版本下载,再没有,使用前一版本的centos/rhel包,或者fedora包。

也就是在昨天或者说今天凌晨,在通过 http://rpm.pbone.net/ 手工解决依赖安装smplayer/mplayer 的过程中,发现了这个源,因为有好几个包都是之这个域名下下载的,所以直接访问了一下,竟然是一个yum源,维护者是很积极的。在此表示由衷感谢!

li.nux.ro 上目前有rhel/centos6及7两个版本的rpm/yum源,它需要依赖epel源,所以要首先配置epel源。不过正常情况下大家都会装上epel源的吧,epel是连centos官方都推荐的优质源。

使用说明,很简洁,丝毫不啰嗦,http://li.nux.ro/repos.html

另外,atrpms这个源也是值得推荐的,没有比较这两个源之间的重复度或冲突情况。对于求稳定的朋友,建议安装过需要的软件后,卸载这些第三源,以免造成系统包被替换(或许有这个可能,据说atrpms会替换系统包,毕竟rhel/epel的版本经常太老)

centos 6下通过yum安装apache模块mod_h264_streaming, mod_flvx, mod_xsendfile等

centos因为上游redhat ep的原因,自带的包相对少一些,centos官方也建议可以安装一些第三方的yum源,如rpmfusion,epel等,本文所说的apache模块,rpmfusion,epel是支持的。

安装epel, rpmfusion源。

参看rpmfusion官方的“重要提示” (http://rpmfusion.org/Configuration) 说,安装rpmfusion前要先启用epel源

rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

yum makecache

rpm -ivh http://download1.rpmfusion.org/free/el/updates/6/i386/rpmfusion-free-release-6-1.noarch.rpm

rpm -ivh http://download1.rpmfusion.org/nonfree/el/updates/6/i386/rpmfusion-nonfree-release-6-1.noarch.rpm

h264模块是非自由(nonefree)软件,要启用nonefree源才可以。不是“非免费”,不收钱的~~

上面的rpm文件,可能会随着新版本的出现而有所改变,因此,请参看其官方的安装说明操作。

装过上述两个yum源后,然后直接yum install即可

yum install mod_xsendfile

yum install mod_h264_streaming

yum install mod_flvx

 

 

 

 

centos/redhat/fedora下rpm安装nload监测网卡流量/非手工编译/linux实时带宽监控

nload 是linux下简单易用的带宽流量监测工具,基于字符界面的动态图形显示网卡当前的流量。

不过centos官方源里并没有它,不能直接使用yum安装。我们可以到第三方rpm发布平台上下载,推荐使用 下面的源,它发布多个rpm包

http://pkgs.repoforge.org/nload/

安装方法:

1. 找合适版本:截止本文写作时间2013-6-7最新版本为0.7.4,centos6对应的版本是 el6, 32位系统使用i686的。我的linode vps, 32位 centos6,选择的是nload-0.7.4-1.el6.rf.i686.rpm

2. 切换到root用户直接运行rpm安装,即

rpm -ivh http://pkgs.repoforge.org/nload/nload-0.7.4-1.el6.rf.i686.rpm

3. 切回到普通用户,运行nload,即看到基于字符的动态图形,很简洁。按方向键切换下一块网卡。

linux/centos上安装配置gitosis(git服务器端)

gitosis长期没有更新了,换gitolite吧,或gitlab也行

[个人按本文方法是可以安装gitosis的,但在客户端git clone总是失败,也无法成功创建repo,所以个人改用gitolite,感觉比gitosis简单一些,而且一安装就可以正常工作]

安装gitosis,因为centos/redhat官方源不带gitosis,所以需要先添加EPEL软件仓库,或者手工下载gitosis的 rpm包及依赖包并手工安装。

gitosis rpm包安装后,会自动创建一个gitosis用户,为了简化其见,手工对其改名,改成git,涉及以下四个文件/etc/passwd, /etc/shadow, /etc/group, /etc/gshadow . 默认情况下,git用户(即改名前的gitosis用户)的home目录为 /var/lib/gitosis

这是git用户是作为git的管理账号之用。因为此时git用户没有设置登录密码,我们也不需要其密码,而是使用ssh密钥登录。但对gitosis的设置还是使用git用户登录比较方便。可以切换到root用户,然后 su git .

为git用户设置ssh密钥登录。上传一个ssh公钥,建议使用你的常用账号下的ssh公钥。并将其加入git用户的authorized_keys

sh-4.1$ cd ~/.ssh/
sh-4.1$ cat id_rsa.pub >>authorized_keys

确认可以使用公钥通过ssh登录。关于使用公钥自动登录ssh主机,更多可以参看这里 ssh无密码登入设置(完全版)/linux下免输入密码ssh登录

下面初始化gitosis . 要使用git用户执行下面命令

gitosis-init < [path of your id_rsa.pub]

结果大致如下

sh-4.1$ gitosis-init < id_rsa.pub
Initialized empty Git repository in /var/lib/gitosis/repositories/gitosis-admin.git/
Reinitialized existing Git repository in /var/lib/gitosis/repositories/gitosis-admin.git/
sh-4.1$ ls
gitosis  repositories

可以看到被创建的两个目录,gitosis与repositories .

运行 git clone git@localhost:repositories/gitosis-admin.git 即可把git管理配置文件的目同步到本地。需要修改配置,就在本地修改,然后git commit;git push同步到服务器上即可以即时生效了

关于gitosis资料,参考 http://linux-wiki.cn/wiki/zh-hans/%E9%85%8D%E7%BD%AEgitosis%EF%BC%88%E4%BB%A5CentOS%E4%B8%BA%E4%BE%8B%EF%BC%89

http://git-scm.com/book/zh/服务器上的-Git-Gitosis

http://git-scm.com/book/zh/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-%E5%9C%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E9%83%A8%E7%BD%B2-Git

手把手教你在centos下编译安装配置高性能web服务器环境nginx+php(fast-cgi)+mysql等/适合小内存vps使用

本文为实战操作过程的全程记录,采用一台新创建的linode vps(512M内存)环境,操作系统采用centos 6.2,以从源码编译的方式安装配置nginx, php(fast-cgi模式)web环境。

我们的目标:配置一台高性能、安全的web服务器。所需软件如下:

Nginx(英文) Nginx(简体中文) 公认的高性能web服务器[下载 http://nginx.org/en/download.html]

PHP 应用最广泛的web开发语言[下载 http://www.php.net/downloads.php]

MySQL 广泛应用于web服务器上的数据库,速度快[下载 http://www.mysql.com/downloads/mysql/]

phpMyAdmin 使用php开发的基于web的MySQL管理工具 [下载 http://www.phpmyadmin.net/home_page/downloads.php]

准备工作:

我的这台vps主机名为fsvps,有一个普通用户名为feng,通常我就使用这个用户登录管理,只有需要使用root身份时才su切换到管理员,只要不再需要使用root权限就退回到普通用户下。建议你也这样操作,以免误操作造成不可挽回的灾难。

通过ssh(windows下可以使用putty,建议去官方下载英文原版)登录服务器,确保已经安装过过如下的必要的软件(linux下软件编译环境)

centos 6.x下的 MySQL安装

我们先做最简单的,安装mysql. 因为我们不打算自己编译它,使用centos的yum安装就可以了。当然,如果你愿意,完全是可以的,参看这里{从源码编译并安装mysql数据库[本文待写]}

centos下,只需要一条命令就可以安装mysql服务器,执行su,按提示输入root密码,切换到root身份,然后运行yum install mysql-server

[feng@fsvps ~]$ su
[root@fsvps feng]# yum install mysql-server mysql-devel -y

yum安装了好几个包,其中

mysql-server-5.1.61-1.el6_2.1.i686.rpm 才是我们平时说的mysql;

mysql-5.1.61-1.el6_2.1.i686.rpm是命令行界面的mysql客户端,我们可以用它在服务器上创建数据库,管理mysql用户等,但我们通常使用更好用的phpMyAdmin;

mysql-devel-5.1.61-1.el6_2.1.i686.rpm则是mysql客户端源码的开发头文件,接下来编译php时要用的,所以安装mysql这一步要先做。

yum还安装好几个依赖包,如mysql-5.1.61-1.el6_2.1.i686.rpm, openssl-1.0.0-20.el6_2.5.i686.rpm, zlib-devel-1.2.3-27.el6.i686.rpm, openssl-devel-1.0.0-20.el6_2.5.i686.rpm等几个在php编译也会用到。

注:这里的几个包,你在操作时,其版本号可能不完全一致,这是因为yum源里的包会不定期升级,但不影响我们接下来的编译过程。

我们启动mysql服务,mysqld将完成初始化操作。运行 /etc/init.d/mysqld start 如下

[root@fsvps feng]# /etc/init.d/mysqld start
.....
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h fsvps password 'new-password'
.....
                                                         [确定]
正在启动 mysqld:                                          [确定]

注意消息里有如上斜体显示的部分。这时候,你的mysql的root用户还是空密码的,这非常不安全的,斜体行就是修改root密码的命令。假设我要把mysql 的 root密码修改成 Path8.net ,执行命令如下:

[root@fsvps feng]# /usr/bin/mysqladmin -u root password 'Path8.net'

[tips] 注意,mysql的root用户与linux系统的root用户是没有任何关系的,mysql 的root用户只用于登录mysql服务器。最好给他们设置成不同的密码,这样会安全一点。

试着登录一下,确认root密码已修改成功:

[root@fsvps feng]# mysql -uroot -pPath8.net
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.1.61 Source distribution

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

你没看错,mysql -uroot -pPath8.net 这行命令里, -u 与 -p 后面不必要加空格

如果你看到上面最后一行的 mysql> 提示符,说明已经成功登录。输入执行 show variables; 感受一下mysql

mysql> show variables;
+-----------------------------------------+------------------+
| Variable_name                           | Value            |
+-----------------------------------------+------------------+
| auto_increment_increment                | 1                |
| auto_increment_offset                   | 1                |
| autocommit                              | ON               |
.......(下略)

列出了很多变量,我们优化MySQL,主要是就是靠修改这些参数实现的。

输入exit ,退出mysql客户端。mysql安装配置至此结束,这一步简单吧!

Nginx安装

接下来编译Nginx,稍微复杂一点,照着做,肯定可以很顺利完成。

[强烈建议]如果你还在使用root用户,建议你执行exit退出root身份,使用普通用户的身份继续操作。

进入该普通用户的家目录,建两个目录  source 与 build ,分别用于存储下载的源代码及作为编译的工作目录。当然放到其它目录下也可以,名字也可以任意取,只要方便使用管理。

[root@fsvps feng]# mkdir source build

你没看错,一条命令就建了这两个目录。进入build目录

[root@fsvps feng]# cd build/

安装nginx的依赖包:pcre, pcre-devel

因为nginx需要安装一个叫PCRE的软件,在centos上可能找不到。笔者的经验是,就算你通过yum 安装了这个包,nginx也不认。 编译nginx事实上需要的依赖包是pcre-devel,可以执行yum install pcre-devel 安装它。不过这个包的编译安装很简单,正好我们拿它练练手,熟悉熟悉linux编译安装软件的一般过程。

[tips] linux下从源码编译安装软件一般是三步:配置、编译、安装。具体一点说就依次是执行三条命令:configure, make, make install. 不多讲理论,实际操作一下就明白了。

 在build目录下创建子目录pcre

[feng@fsvps build]$ mkdir pcre
[feng@fsvps build]$ cd pcre

使用wget 工具从pcre官方下载 pcre 包,下载链接为 ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.21.zip,将它解压缩到pcre目录下

[feng@fsvps build]$ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.21.zip

几秒钟就可以下载完成。(如果提示 bash: wget: command not found 那是你还没有安装wget,切换到root用户,yum install wget -y 安装之)

[feng@fsvps pcre]$ ls
pcre-8.21.zip

看一下,刚下载的 pcre源码包,这是个zip包,使用unzip命令解压缩之

[feng@fsvps pcre]$ unzip pcre-8.21.zip
[feng@fsvps pcre]$ ll
总用量 1680
drwxr-xr-x 6 feng feng    4096 12月 12 2011 pcre-8.21
-rw-rw-r-- 1 feng feng 1709377  6月 30 13:50 pcre-8.21.zip
[feng@fsvps pcre]$ cd pcre-8.21

进去看看里面都是些什么文件,特别注意一下configure文件

[feng@fsvps pcre-8.21]$ ll
总用量 3716
-rwxr-xr-x 1 feng feng   6961 10月  5 2009 132html
-rw-r--r-- 1 feng feng 338277 12月 11 2011 aclocal.m4
........  (略)
-rwxr-xr-x 1 feng feng 595700 12月 11 2011 configure
........  (略)
-rw-r--r-- 1 feng feng   3460  8月  2 2011 ucp.h

这个configure文件,就是“源码安装三步曲”的第一步的configure,它将检查你的系统是否具备了编译pcre必要的软件包,配置出用于编译pcre的环境,供第二步用。如果缺少某些软件,它会给出提示。

[tips] 另外,注意这个目录里还有几个文件README, INSALL,LICENCE,它们都是普通的文本文件,供使用人阅读,分别是 自述文件,安装说明,授权协议。通常linux/unix世界的源码包里都有这几个文件(有时作者会把INSTALL并成到README里),建议阅读一下,尤其是README与INSTALL。

执行第一步 configure

[feng@fsvps pcre-8.21]$ ./configure

注意configure命令前面要带上 ./ ,因为我们要执行的是在当前目录下的configure文件,。

configure过程中可能出现的几个报错,及原因:

  • 1) ./configure: error: C compiler gcc is not found 原因:你没有安装gcc ,这样可能你也没安装下面几个包,请一并安装
    yum install gcc gcc-c++ autoconf make
  • 2) Makefile: 权限不够 原因:当前用户没有权限读写nginx源码目录,请切换到root下运行如下命令,作用是将当前目录的所有文件所有者都设为我们正在使用的普通用户。
    [root@fsvps nginx-1.2.1]# chown -R feng:feng  ./
    [root@fsvps nginx-1.2.1]# exit

    然后exit退出到普通用户状态下。 chown 后的 feng:feng 分别是所使用的普通账号的用户名,及其用户组名。

开始编译,这步非常简单,运行make就可以,可能要花费几分钟时间,你可以干点其它,比如起身活动一下。

[feng@fsvps pcre-8.21]$ make

完了如果看到下面的消息:make[1]: Leaving directory `/home/feng/build/pcre/pcre-8.21'
说明编译完成了,那么开始安装。安装很简单,使用root用户权限,运行make install 就可以了。所以su,按提示输入root密码,切换到root身份

[feng@fsvps pcre-8.21]$ su
[feng@fsvps pcre-8.21]# make install

完了消息应该是 make[1]: Leaving directory `/home/feng/build/pcre/pcre-8.21'

这样pcre就安装好了。然后exit退回到普通用户状态下。

编译安装nginx

接下来才是真正安装nginx,过程差不多,但我们要多配置几个参数选项。

到 nginx官网上 http://nginx.org/en/download.html 找最新的稳定版的下载链接,写本文时2012-06-30 最新版本为 nginx-1.2.1  下载链接为 http://nginx.org/download/nginx-1.2.1.tar.gz 使用wget 将其下载到vps上。

[root@fsvps build]$ wget http://nginx.org/download/nginx-1.2.1.tar.gz

几秒钟就可以下载完成。(如果提示 bash: wget: command not found 那是你还没有安装wget,切换到root用户,yum install wget -y 安装之)

解压缩,然后把压缩包移动到source目录,以备不时之需。

[root@fsvps build]$ ll
总用量 708
-rw-r--r-- 1 root root 718161  6月  5 14:10 nginx-1.2.1.tar.gz
[root@fsvps build]$ tar xf nginx-1.2.1.tar.gz 
[root@fsvps build]$ ll
总用量 712
drwxr-xr-x 8 1001 1001   4096  6月  5 14:02 nginx-1.2.1
-rw-r--r-- 1 root root 718161  6月  5 14:10 nginx-1.2.1.tar.gz
[root@fsvps build]$ mv nginx-1.2.1.tar.gz ../source/

[tips] 文件名很长,打字太累? 试试tab键,比如先打出 mv ngi 然后按tab 键一次,没反应,再按一次,看有什么变化;然后继续打一个句点,再按一次tab键。相信你已经能悟出点什么了。

进入nginx源码目录,浏览一下里面的文件

[root@fsvps build]$ cd nginx-1.2.1/
[root@fsvps nginx-1.2.1]$ ll
总用量 560
drwxr-xr-x 6 1001 1001   4096  6月 30 11:39 auto
-rw-r--r-- 1 1001 1001 207988  6月  5 14:02 CHANGES
-rw-r--r-- 1 1001 1001 317085  6月  5 14:02 CHANGES.ru
drwxr-xr-x 2 1001 1001   4096  6月 30 11:39 conf
-rwxr-xr-x 1 1001 1001   2345  1月 18 15:07 configure
drwxr-xr-x 3 1001 1001   4096  6月 30 11:39 contrib
drwxr-xr-x 2 1001 1001   4096  6月 30 11:39 html
-rw-r--r-- 1 1001 1001   1365  1月 18 15:07 LICENSE
drwxr-xr-x 2 1001 1001   4096  6月 30 11:39 man
-rw-r--r-- 1 1001 1001     49 10月 31 2011 README
drwxr-xr-x 8 1001 1001   4096  6月 30 11:39 src

运行configure,就是本目录下的该文件,上面标红加;目录是配置nginx的编译环境,运行如下命令,参数比较长,可以直接复制帖。

[root@fsvps nginx-1.2.1]$ ./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/sbin/nginx --conf-path=/usr/local/conf/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --with-http_stub_status_module --with-http_gzip_static_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-http_random_index_module --with-cpu-opt=pentium4

注意configure命令要带上./ ,上面已经标红显示。大致讲一下是什么意思 [注]如果你仅仅想编译一个web环境用,而不想学习编译linux程序的一般方法,这部分那可以跳过不用看。

把参数重排下版,一行一个参数,简单注释一下

--prefix=/usr/local/nginx    #编译后安装到目录 /usr/local/nginx 
--sbin-path=/usr/local/sbin/nginx #
--conf-path=/usr/local/conf/nginx/nginx.conf #主配置文件路径
--error-log-path=/var/log/nginx/error.log  #错误日志目录
--pid-path=/var/run/nginx.pid    #nginx程序启用后,自动将其进程号写到该文件
--lock-path=/var/run/nginx.lock  #lock文件路径
--with-http_stub_status_module   #通过web查看nginx运行状态
--with-http_gzip_static_module   #gzip压缩支持
--with-http_sub_module     #加入ngx_http_sub_module模块
--with-http_flv_module     #加入flv模块
--with-http_mp4_module     #mp4模块
--with-http_random_index_module   #http_random_index_module模块
--with-cpu-opt=pentium4    #针对intel cpu优化

--with-xxxx_module的那些模块,如果你确定不需要,那就可以不要加入。那就这样指定参数

./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/sbin/nginx --conf-path=/usr/local/conf/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock  --with-http_stub_status_module --with-http_gzip_static_module

只带两个比较有用的模块。事实上这些参数一个都不指定,也是可以,这样就是按nginx的默认配置编译了。如果你想查看ngix的configure都有哪些参数选项可以运行 ./configure --help 查看,这里不多讲了。

如果报错:./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.

这是因为没有找到PCRE包,请检查是否正确安装了PCRE包:

不出意外,应该能看到这样报告消息:

Configuration summary
  + using system PCRE library
  + OpenSSL library is not used
  + md5: using system crypto library
  + sha1: using system crypto library
  + using system zlib library

  nginx path prefix: "/usr/local/nginx"
  nginx binary file: "/usr/local/sbin/nginx"
  nginx configuration prefix: "/usr/local/conf/nginx"
  nginx configuration file: "/usr/local/conf/nginx/nginx.conf"
  nginx pid file: "/var/run/nginx.pid"
  nginx error log file: "/var/log/nginx/error.log"
  nginx http access log file: "/usr/local/nginx/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"

有些软件的configure完成后会给出类似的一个配置报告,供我们检查配置选项是否正确。如果有不正确处,或还想改改,那就再运行一次configure --xx --yyy.

确认无误,开始编译

[feng@fsvps nginx-1.2.1]$ make

开始编译,非常快,可能一分钟就编译完成,最后消息大致如:make[1]: Leaving directory `/home/feng/build/nginx-1.2.1'

接下来,你应该知道了,切换到root身份,make install 安装。

nginx运行测试

下面的操作要在root身份下操作。

我们测试一下nginx是否正常工作。因为我们把nginx的二进制执行文件配置安装在 /usr/local/sbin/nginx  (前面的configure参数 --sbin-path=/usr/local/sbin/nginx ),目录/usr/local/sbin/默认在linux的PATH环境变量里,所以我们可以省略路径执行它:

[root@fsvps nginx-1.2.1]# nginx

它不会有任何信息显示。打开浏览器,通过IP地址访问你的nginx站点,如果看到这样一行大黑字,就证明nginx已经工作了:

Welcome to nginx!

看上去很简陋,只是因为没有给它做漂亮的页面。我们来简单配置一下它的运行配置。我们configure的参数--conf-path=/usr/local/conf/nginx/nginx.conf 这就是它的配置文件。我们去看看。

[root@fsvps nginx-1.2.1]# cd /usr/local/conf/nginx/
[root@fsvps nginx]# ls
fastcgi.conf          fastcgi_params.default  mime.types          nginx.conf.default   uwsgi_params
fastcgi.conf.default  koi-utf                 mime.types.default  scgi_params          uwsgi_params.default
fastcgi_params        koi-win                 nginx.conf          scgi_params.default  win-utf

如果这里没有nginx.conf,但有个 nginx.conf.default,我们用它复制个副本nginx.conf (早期版本默认是没有nginx.conf的)

用你熟悉的编辑器打开它,推荐使用vim;如果不会用,那可以使用nano, 功能简单,但一看就会用: nano nginx.conf

找到如下的部分,大概在35行,

server {
        listen       80 default;
        server_name  localhost;
        root /var/www/html/default;
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
        #    root   html;
            index  index.html index.htm;
        }
................
}

如上红色加粗显示部分,做三处修改:

  • listen 80 后插入“空格default”
  • 在里面加入一行 root /var/www/html/default;
  • 注释掉root html;一行

上面的server{....}是定义的一台虚拟主机,我们刚加入的一行是定义这个虚假主机的web目录。listen 行的default是表示这一个server{...}节点是默认的虚假主机(默认站点)

执行 nginx -t 测试刚才的nginx配置文件是否有语法错误:

[root@fsvps nginx]# nginx -t
nginx: the configuration file /usr/local/conf/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/conf/nginx/nginx.conf test is successful

显示没有错误,检测通过。如果不是这样,请返回仔细检查你的配置文件是否哪里写错了,注意行尾要有英文分号。

我们在硬盘上创建这个目录:

[root@fsvps nginx]# mkdir -p /var/www/html/default

写一个html文件index.html/var/www/html/default目录里,使用你熟悉的编辑器,随便写什么内容、怎么排版。

然后让nginx重新加载配置文件,看看刚才创作的html页面效果如何。

常见错误FAQ

1) 如果通常访问时看到还是 Welcome to nginx! ,请返回检查,重点在这几处:

  • 请确认/var/www/html/default 目录下有你创作的index.html 文件?
  • 检查该文件权限,other用户是否有读的权限? 如果不懂linux文件权限,请执行 chmod 755 /var/www/html/default/index.html
  • 检查nginx.conf配置文件里,只否只有一个server{...} 节点,并且该节点里是否有 listen       80 default;   一行,注意其中要有 default
  • 检查上述server{...}节点里是否有 root /var/www/html/default; 一行,注意路径是拼写是否正确。
  • 检查其中 location / {...} 节点里的 #    root   html;  一行,是否注释掉了。

2) 如果看到的是 404 Not Found 或者“找不到该页面”类似的提示:

  • 检查上述 location / {...} 节点中是否有这一行 index  index.html index.htm;

3) 如果访问时,显示“找不到服务器”、“无法连接到服务器”这样的错误:

  • 运行检查nginx进程在运行,运行ps aux |grep nginx 命令,正常情况有如下三条:
    nginx: master process nginx
    nginx: worker process
    grep nginx
    如果只有第三条,请运行nginx 重新启用nginx,如有报错请照说明检查。一般是配置文件的语法错误。
  • 请运行nginx -t 检查配置文件是否有语法错误。

[tips] location / {...} 节点里的 #    root   html;  一行,不注释掉也可以:请把你创造的index.html 放到/var/www/html/default/html目录下。

至此,我们的nginx也可以正常工作了。是否在纳闷“nginx怎么这么简陋?只能显示几个干巴巴的页面”,这是因为我们还没有给它装备PHP这个核动力引擎。

建议你稍微休息一下,然后进入下一步的“php安装”,要做好持久战的准备,它比前面所有要花费时间都长。

php的安装

php版本选择

php官方提供了很多版本,我们照例使用最新稳定版,http://www.php.net/downloads.php

本文写作时[2012-07-01],php最新版本有两个分支,分别是是PHP 5.4.4 (Current stable) 与 PHP 5.3.14 (Old stable),据说php 5.4分支的改动,会不支持比较旧的php程序,所以我们选择php 5.3分支(当前为php-5.3.14)。虽然仍会有极少数非常古老的程序,必须在更旧版下才能运行,但我们这里不迁就它们了,因为我们要使用fast-cgi,而5.2版本本身不带FPM (fast-cgi process manager),要打fpm补丁,会麻烦一些。如有兴趣,可参阅张宴的 Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版) http://blog.s135.com/nginx_php_v6/

下载php源码到vps上

从php官方下载页面上http://www.php.net/downloads.php 点所选的版本,选择距离最近的下载镜像。如果是美国vps,就选个美国的镜像,这样更快。我选择yahoo! inc.镜像,应该全球访问速度都比较快(php.net官方似乎就是yahoo! inc.镜像)。复制所选下载地址,通过wget下载到build/php目录下,并解压缩,然后把原始压缩包移动到source目录存档。

[root@fsvps php]$ wget http://cn.php.net/get/php-5.3.14.tar.bz2/from/www.php.net/mirror
[root@fsvps php]$ ll
总用量 11160
-rw-r--r-- 1 root root 11408016  6月 14 16:10 php-5.3.14.tar.bz2
[root@fsvps php]$ tar xf php-5.3.14.tar.bz2 
[root@fsvps php]$ mv php-5.3.14.tar.bz2 ../../source
[root@fsvps php]$ cd php-5.3.14/

进入php源码目录,浏览一下,里面文件相当多,注意里面也有configure, README等文件,还有其它的几个大写文件名的文件,有兴趣参阅一下。

[root@fsvps php-5.3.14]$ ll
总用量 4796
-rw-r--r--  1 101 101    3460  6月 13 08:20 acconfig.h
-rw-r--r--  1 101 101      28  6月 13 08:18 acconfig.h.in
-rw-r--r--  1 101 101   76103  6月 13 08:18 acinclude.m4
-rw-r--r--  1 101 101  306427  6月 13 08:20 aclocal.m4
drwxr-xr-x  2 101 101    4096  6月 13 08:18 build
-rwxr-xr-x  1 101 101     668  6月 13 08:18 buildconf
-rw-r--r--  1 101 101     334  6月 13 08:18 buildconf.bat
-rw-r--r--  1 101 101   11166  6月 13 08:18 CODING_STANDARDS
-rw-r--r--  1 101 101   44892  6月 13 08:18 config.guess
-rw-r--r--  1 101 101   33387  6月 13 08:18 config.sub
-rwxr-xr-x  1 101 101 3044114  6月 13 08:20 configure
-rw-r--r--  1 101 101   45450  6月 13 08:18 configure.in
-rw-r--r--  1 101 101      91  6月 13 08:18 CREDITS
drwxr-xr-x 79 101 101    4096  6月 13 08:18 ext
-rw-r--r--  1 101 101   24801  6月 13 08:18 EXTENSIONS
-rw-r--r--  1 101 101     137  6月 13 08:18 footer
-rw-r--r--  1 101 101    2233  6月 13 08:20 generated_lists
-rwxr-xr-x  1 101 101     486  6月 13 08:18 genfiles
-rw-r--r--  1 101 101    1143  6月 13 08:18 header
-rw-r--r--  1 101 101   93778  6月 13 08:18 INSTALL
-rw-r--r--  1 101 101       0  6月 13 08:20 install-sh
-rw-r--r--  1 101 101    3218  6月 13 08:18 LICENSE
-rw-r--r--  1 101 101  199728  6月 13 08:18 ltmain.sh
drwxr-xr-x  3 101 101    4096  6月 13 08:20 main
-rwxr-xr-x  1 101 101    3023  6月 13 08:18 makedist
-rw-r--r--  1 101 101    1073  6月 13 08:18 Makefile.frag
-rw-r--r--  1 101 101    2263  6月 13 08:18 Makefile.gcov
-rw-r--r--  1 101 101    5498  6月 13 08:18 Makefile.global
-rw-r--r--  1 101 101    5317  6月 13 08:18 makerpm
-rw-r--r--  1 101 101       0  6月 13 08:20 missing
-rw-r--r--  1 101 101       0  6月 13 08:20 mkinstalldirs
drwxr-xr-x  2 101 101    4096  6月 13 08:18 netware
-rw-r--r--  1 101 101  347865  6月 13 08:18 NEWS
drwxr-xr-x  2 101 101    4096  6月 13 08:20 pear
-rw-r--r--  1 101 101    1489  6月 13 08:18 php5.spec.in
-rw-r--r--  1 101 101    2523  6月 13 08:18 php.gif
-rw-r--r--  1 101 101   69609  6月 13 08:18 php.ini-development
-rw-r--r--  1 101 101   69631  6月 13 08:18 php.ini-production
-rw-r--r--  1 101 101    1570  6月 13 08:18 README.EXTENSIONS
-rw-r--r--  1 101 101    6249  6月 13 08:18 README.EXT_SKEL
-rw-r--r--  1 101 101    4618  6月 13 08:18 README.GIT-RULES
-rw-r--r--  1 101 101    5954  6月 13 08:18 README.input_filter
-rw-r--r--  1 101 101    3426  6月 13 08:18 README.MAILINGLIST_RULES
-rwxr-xr-x  1 101 101    6040  6月 13 08:18 README.namespaces
-rw-r--r--  1 101 101    6848  6月 13 08:18 README.PARAMETER_PARSING_API
-rw-r--r--  1 101 101    4740  6月 13 08:18 README.PHP4-TO-PHP5-THIN-CHANGES
-rw-r--r--  1 101 101   20918  6月 13 08:18 README.REDIST.BINS
-rw-r--r--  1 101 101   11244  6月 13 08:18 README.RELEASE_PROCESS
-rw-r--r--  1 101 101    4698  6月 13 08:18 README.SELF-CONTAINED-EXTENSIONS
-rw-r--r--  1 101 101   15373  6月 13 08:18 README.STREAMS
-rw-r--r--  1 101 101    7605  6月 13 08:18 README.SUBMITTING_PATCH
-rw-r--r--  1 101 101    6677  6月 13 08:18 README.TESTING
-rw-r--r--  1 101 101    4957  6月 13 08:18 README.TESTING2
-rw-r--r--  1 101 101    4261  6月 13 08:18 README.UNIX-BUILD-SYSTEM
-rw-r--r--  1 101 101     109  6月 13 08:18 README.WIN32-BUILD-SYSTEM
-rwxr-xr-x  1 101 101   78241  6月 13 08:18 run-tests.php
drwxr-xr-x 24 101 101    4096  6月 13 08:18 sapi
drwxr-xr-x  5 101 101    4096  6月 13 08:18 scripts
-rwxr-xr-x  1 101 101    2105  6月 13 08:18 server-tests-config.php
-rwxr-xr-x  1 101 101   51718  6月 13 08:18 server-tests.php
-rwxr-xr-x  1 101 101     108  6月 13 08:18 snapshot
-rw-r--r--  1 101 101      10  6月 13 08:18 stamp-h.in
-rw-r--r--  1 101 101       1  6月 13 08:18 stub.c
-rwxr-xr-x  1 101 101      50  6月 13 08:18 svnclean.bat
drwxr-xr-x 10 101 101    4096  6月 13 08:18 tests
-rw-r--r--  1 101 101    5109  6月 13 08:18 TODO
-rw-r--r--  1 101 101     163  6月 13 08:18 TODO-5.1
-rw-r--r--  1 101 101    3746  6月 13 08:18 TODO-PHP5
drwxr-xr-x  2 101 101    4096  6月 13 08:18 TSRM
-rwxr-xr-x  1 101 101   23267  6月 13 08:18 UPGRADING
-rw-r--r--  1 101 101     737  6月 13 08:18 UPGRADING.INTERNALS
-rwxr-xr-x  1 101 101     297  6月 13 08:18 vcsclean
drwxr-xr-x  3 101 101    4096  6月 13 08:18 win32
drwxr-xr-x  4 101 101    4096  6月 13 08:20 Zend

查看configure参数选项,

[root@fsvps php-5.3.14]$ ./configure --help

参数非常多,因为php功能实在太强大了。你熟悉php的话,就知道它有上百个模块,我们常用大概有几十个。通常离不开的模块,是默认被配置进去的,不需要我们通过configure指定,我们在configure步骤主要做两件事:

  • 定义一些路径,如php安装路径,配置文件路径
  • 选择所需的非默认模块

如果没有特殊需求,建议你按下面的选项来配置(为方便阅读,拆成多行了)

./configure
--prefix=/usr/local/php53
--with-config-file-path=/usr/local/etc
--with-config-file-scan-dir=/usr/local/etc/php.d
--mandir=/usr/local/man
--enable-fpm
--enable-calendar
--with-mcrypt
--enable-ftp
--with-zlib
--with-bz2
--with-curl
--with-gd
--enable-exif
--with-jpeg-dir
--with-png-dir
--with-freetype-dir
--enable-mbstring
--with-mysql
--with-mysqli
--with-pdo-mysql
--enable-zip
--enable-bcmath
--with-bz2

注意其中的 --enable-fpm 就是指定我们要启用php的fpm功能,一定要不能省的。

先不要急着运行./configure,现在运行几乎一定要报错:

configure: error: xxx not found. Please check your xxx installation.

原因你应该想到了,我们的centos中缺少依赖包。

解决依赖包问题

我们回过头来解决依赖包问题。我们的系统上缺少哪些包呢?按我在上面的configure 选项,下面几行命令中的包即是:

[root@fsvps feng]# yum -y install libxml2-devel
[root@fsvps feng]# yum -y install bzip2-devel
[root@fsvps feng]# yum -y install libcurl-devel
[root@fsvps feng]# yum -y install libjpeg-devel libpng-devel

这个依赖列表是怎么知道的呢?运行configure,看提示什么错误,就安装相应包,记录下来这些包名就知道了。或者检查configure文档或源码,也是可以的,不过这个工作量更庞大。

另外mcrype包centos源里没有的,要我们手工编译安装,步骤如下:

cd build/
mkdir mcrypt
cd mcrypt
wget http://nchc.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.bz2
tar xf libmcrypt-2.5.8.tar.bz2 
cd libmcrypt-2.5.8
./configure
make
make install

其中 sourceforge.net 上的地址,如果不能下载,请点此从本站(path8.net)下载:libmcrypt-2.5.8.tar.bz2.zip [注]本文件是再次zip压缩的,使用时需先unzip 再tar x]

或者你可以到http://mcrypt.sourceforge.net/下载,但要注意,我们需要的是 libmcrypt而不是mcrypt,这里很容易搞错。

开始configure php源码

现在应该对configure很熟悉了吧,用普通用户执行

[feng@fsvps php-5.3.14]$ ./configure --prefix=/usr/local/php53 --with-config-file-path=/usr/local/etc --with-config-file-scan-dir=/usr/local/etc/php.d --mandir=/usr/local/man --enable-fpm --enable-calendar --with-mcrypt --enable-ftp --with-zlib --with-bz2 --with-curl --with-gd --enable-exif --with-jpeg-dir --with-png-dir --with-freetype-dir --enable-mbstring --with-mysql --with-mysqli --with-pdo-mysql --enable-zip --enable-bcmath --with-bz2

这一步要花几分钟时间,不出意外将出现如下消息:

+--------------------------------------------------------------------+
| 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.

按下来,make,这一步更慢,可能要二十分钟,耐心等,或者做点其它事情。

看到如下消息,就是完成了。

Build complete.
Don't forget to run 'make test'.

可以执行一下make test 检测一下,不过一般没有必要,切换到root身份运行make install安装。

[feng@fsvps php-5.3.14]$ su
密码:
[root@fsvps php-5.3.14]# make  install
Installing PHP SAPI module:       fpm
Installing PHP CLI binary:        /usr/local/php53/bin/
Installing PHP CLI man page:      /usr/local/man/man1/
Installing PHP FPM binary:        /usr/local/php53/sbin/
Installing PHP FPM config:        /usr/local/php53/etc/
Installing PHP FPM man page:      /usr/local/man/man8/
Installing PHP FPM status page:      /usr/local/php53/share/php/fpm/
Installing build environment:     /usr/local/php53/lib/php/build/
Installing header files:          /usr/local/php53/include/php/
Installing helper programs:       /usr/local/php53/bin/
  program: phpize
  program: php-config
Installing man pages:             /usr/local/man/man1/
  page: phpize.1
  page: php-config.1
Installing PEAR environment:      /usr/local/php53/lib/php/
[PEAR] Archive_Tar    - installed: 1.3.7
[PEAR] Console_Getopt - installed: 1.3.0
[PEAR] Structures_Graph- installed: 1.0.4
[PEAR] XML_Util       - installed: 1.2.1
[PEAR] PEAR           - installed: 1.9.4
Wrote PEAR system config file at: /usr/local/php53/etc/pear.conf
You may want to add: /usr/local/php53/lib/php to your php.ini include_path
/home/feng/build/php/php-5.3.14/build/shtool install -c ext/phar/phar.phar /usr/local/php53/bin
ln -s -f /usr/local/php53/bin/phar.phar /usr/local/php53/bin/phar
Installing PDO headers:          /usr/local/php53/include/php/ext/pdo/

最好记下来这里的消息,它是php的几个重要配置文件的默认路径,下面用得着。

配置并启动php-fpm进程

php-fpm的配置文件位于/usr/local/php53/etc/,这里有个php-fpm.conf.default,用它复制出php-fpm.conf

[root@fsvps php-5.3.14]# ls -l /usr/local/php53/etc/
总用量 28
-rw-r--r-- 1 root root  1172  7月  1 07:20 pear.conf
-rw-r--r-- 1 root root 20891  7月  1 07:20 php-fpm.conf.default
[root@fsvps php-5.3.14]# cp /usr/local/php53/etc/php-fpm.conf{.default,}

修改php-fpm.conf如下几处:

(约第25行)   pid = /var/run/php-fpm.pid
(约第32行)   error_log = /var/log/php-fpm.log
(约第190行) pm = static

启动php-fpm进程

[root@fsvps php-5.3.14]# /usr/local/php53/sbin/php-fpm

执行后,没有任何输出。如果有错误请查看php-fpm的日志文件 /var/log/php-fpm.log

 

执行 ps aux|grep php 将显示有6个php-fpm进程,其中一个是root用户,另外5个是nobody用户。

整合php与nginx

直到现在,我们的nginx还是只能处理静态文件,我们接下来要做的是:让nginx把对.php文件的请求,转给php-fpm来处理。

打开nginx配置文件,在server{...}节点里面,有这样一行 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 ,下面的 location ...{...}节点取消注释,改成如下形式(修改部分使用红字加粗):

location ~ \.php$ {
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /var/www/html/default$fastcgi_script_name;
    include        fastcgi_params;
}

保存,检查配置nginx -t,无误后重新加载nginx配置 nginx -s reload

写一个php程序文件 /var/www/html/default/phpinfo.php 内容为

<?php
phpinfo();
?>

用浏览器通过ip地址访问phpinfo.php,看到你亲自编译的nginx+php-fpm在工作了吧。

继续完善环境/优化配置

先别太高兴,事实还没有完。

配置php主配置文件php.ini

有些读者已经已经发现,phpinfo页面里显示没有加载php.ini文件,是的,我们还没有把php.ini文件放到配置路径里。在php编译目录里,有两个,因为是生产环境,我们使用./php.ini-production

[root@fsvps php-5.3.14]# cp php.ini-production /usr/local/etc/php.ini

如果需要的话,请对php.ini作相应修改配置。发进程信号给php-fpm重新加载配置

kill -SIGUSR2  `cat /var/run/php-fpm.pid`

或者ps aux  |grep php-fpm 查出来php-fpm主进程号,然后 kill -SIGUSR2 进程号

按服务器内存情况配置php-fpm进程

php-fpm.conf

(约第200行)  pm.max_children = 5
(约第226行)  pm.max_requests = 100
(约第325行)  pm.status_path = /status.php

pm.max_children这是php-fpm启动后的php-fpm子进程数,512M内存以下,推荐设置在5左右。设为5,也说是说,最多接受5个并发的php请求。

pm.max_requests 是一个php-fpm子进程最多处理多少次请求后被关闭回收,小内存的主机,推荐设置小一点(100或者更小),避免处理一个占用内存大的请求后、进程没被回收而长时间占用内存。但是也不要设置得太小,否则频繁的创建php-fpm子进程,从而影响效率。

pm.status_path 是用于查看当前php-fpm的状态。修改保存后,重新加载php-fpm配置,使用浏览器打开 http://you-host-address/status.php ,可以看到一组php-fpm的状态数据,可以用来检查通常php-fpm并发进程数有多大,以及其它一些有用数据。

优化Nginx配置

nginx配置文件 /usr/local/conf/nginx/nginx.conf

worker_processes  1;     #nginx子进程数,512M内存以下推荐设置为1就够了,nginx并发能力很强
keepalive_timeout  25;   #连接保持的超时秒数
gzip  on;                #启用静态内容http请求的gzip压缩

你的站点里,如果有文件上传目录、图片目录等,那我们就不要允许这里的php文件请求传递给php-fpm,或直接拒绝访问。可以将下面一段代码加入到 location ~ \.php$ {....} 节点前面,nginx发现这种请求,就直接deny,而不再传给php-fpm了

location ~ ^/(uploads|images)/.*\.php {
        deny  all;
}

如果你需要在nginx上绑定多个域名,就把server{...} 节点复制一份,修改里面server_name(域名)参数、root参数(站点目录)

server {
    server_name  www.path8.net;
    root /var/chroot/home/pcobbs/www;
    ......
}

把多个域名绑定到同一目录上,就用空格分隔跟在后面,如

server_name  host1a.path8.net host2.path8.net;

升级或重新编译php

如果加入新和模块需要重新.configure然后make,make install,跟前面过程一样。编译安装过程中不需要停掉原php-fpm,不影响原站点的运行。编译安装后伪平滑过渡到新版本:通过ps查看原php-fpm进程号,然后在bash的同一行写两条命令kill原进程、启动新进程(如下行所示),然后查看进程列表,确认php-fpm进程已经启动,并且已经是新进程号

# kill 2451; /usr/local/php7/sbin/php-fpm

优化mysql配置

安装phpMyAdmin

centos 6.x下的empathy安装包/rpm

直接上安装包

empathy-2.30_rpm_for_centos_f13

fedora13的二进制包,可以在centos 6.2下成功安装,并正常使用。这些包之间解决了包信赖,应该不再需要其它包;如果真的缺少了某个包,请通过yum 安装。

如果你的centos6安装有pidgin,推荐卸载掉,因为有个rpm包与centos6带的pidgin有冲突。

对于使用QQ的朋友,推荐下载安装这个 https://code.google.com/p/libqq-pidgin/ ,empathy/pidgin自带的QQ协议老了,而不再被tx支持。

centOS 6下通过yum安装php-mssql以使php支持microsoft sql server连接

centos 6下,安装fedoraproject的epel-release源,即可以安装php的mssql模块。

注:epel是fedora开发组为centos开发的附加软件yum源,可以弥补centos上游redhat里缺少的软件包。epel的质量还是相当之高的。

[root@c12 html]# rpm -ivh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm
[root@c12 html]# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
[root@c12 html]# yum install php-mssql
[root@c12 html]# /etc/init.d/httpd graceful

完成。

phpinfo中可以看到mssql的信息

mssql模块实际还是FreeTDS,其功能主要是在Liunx下能够访问Sybase及MS SQL,官方网站是:http://www.freetds.org/ 。当然也可以手工编译mssql模块到php中,不过通过yum更简单一点。

关于epel源,参看这里 http://fedoraproject.org/wiki/EPEL/zh-cn

本方法来源于centOS 6更新yum以便可裝php-mssql (http://blog.hubin411.com/2011/10/13/centos-6%e6%9b%b4%e6%96%b0yum%e4%bb%a5%e4%be%bf%e5%8f%af%e8%a3%9dphp-mssql/) 阅读该页面请自备梯子。或参看如下转录的核心部分:

tep 1:
# wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm    //取得rpm檔案

step 2:
# rpm -ivh epel-release-6-5.noarch.rpm    //安裝取得的rpm檔案

step 3:
# yum update    //更新yum的資源庫

step 4:
# yum install php-mssql    //安裝php-mssql

step 5:
# service httpd restart    //重啟apache伺服器

centos 6.2 yum 升级时提示no module named yum

很怪的问题,同一个iso镜像,昨天安装好好的,这次安装后,运行yum update时,报错了 no module named yum

消息内容说是python的问题,看网上别人是使用过程中突然出现了 no module named yum 这样问题,而我是刚安装就被报 no module named yum,难道是人品问题?

参考网上的说法,把iso镜像挂上,到里面的rpm目录里,把rpm-xxxxxx.rpm的几个包重新安装一遍,rpm -ivh xxxxxxx,然后再运行yum update 就好了。

很是怪异的问题。

Pages: 1 2 Next