centos lemp搭建wordpress(nginx+php-fastcgi)

作者 FarLee 2011年2月21日 14:59:22   ‖浏览(59,053)

Vps 因性能限制,安装Apache服务器搭建LAMP这个Stack比较耗费服务器资源。在vps上安装Nginx这个轻量级web服务器就成为首选。在Centos 下安装LAMP前面有所介绍,这里主要记录如何在Linux Centos 5.5下搭建LEMP组合(或叫LNMP)来安装wordpress博客的步骤,包括nginx、php-fastcgi(php-fpm)、Mysql、phpmyadmin 的安装和配置,以及wordpress url重写等在nginx服务器的配置。如果需要简单点,可以使用LNMP一键安装包,参考LNMP安装配置的介绍。

安装Nginx服务器

nginx可以从源码编译安装,但不易维护,更方便的是选择从EPEL源中选择nginx安装包:

rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
yum update
yum install nginx sudo

(若rpm源无法访问,可以到http://mirrors.fedoraproject.org/publiclist/EPEL/ 找一个镜像站;
另外x86_64 centos系统的rpm注意也要换下,如:http://mirrors.sohu.com/fedora-epel/5/x86_64/epel-release-5-4.noarch.rpm)
以上命令将在centos 5.5 下安装nginx 0.8.53 版本,然后启动nginx并设置重启后自动启动:

/etc/init.d/nginx start
chkconfig --add nginx
chkconfig nginx on

但nginx启动后出现问题:[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)。运行 ps -e 后发现vps默认安装了sshd、sendmail、httpd等程序。原来是安装了apache,被httpd占用了98端口的问题。停止httpd服务并卸载apache:

/etc/init.d/httpd stop
yum -y remove httpd

然后再启动nginx即可。nginx的主配置文件为/etc/nginx/nginx.conf,默认网站根目录为/var/www

安装PHP Fastcgi

Apache一般以mod_php模式来安装php,nginx 可以使用php内置的php-cgi来运行wordpress php程序,但是更为高效的是安装spawn-fcgi使用lighttpd的fastcgi模式运行php。

rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
yum update
yum install php-cli php spawn-fcgi wget

然后从linode下载一段PHP-FastCGI脚本,配置init脚本控制程序、启动程序并确保下次重启vps时自动启动fastcgi程序(linode 脚本下载地址已改,从本站下载):

cd /opt
wget -O php-fastcgi-rpm.sh http://h.farll.com/wp-content/uploads/2011/06/lemp-php-fastcgi-rpm.txt
mv php-fastcgi-rpm.sh /usr/bin/php-fastcgi
chmod +x /usr/bin/php-fastcgi
wget -O php-fastcgi-init-rpm.sh http://h.farll.com/wp-content/uploads/2011/06/lemp-php-fastcgi-init-rpm.txt
mv php-fastcgi-init-rpm.sh /etc/rc.d/init.d/php-fastcgi
chmod +x /etc/rc.d/init.d/php-fastcgi
chkconfig --add php-fastcgi
chkconfig php-fastcgi on
/etc/init.d/php-fastcgi start

php-fastcgi 启动成功,如果restart重启时出现/etc/init.d/php-fastcgi: line 44: configtest: command not found的提示无法重启,可将init脚本中的configtest || return $?一行去掉。再次重启失败stop()里将killproc 改成killall -9 php-cgi
如果启动时出现too many arguments的错误提示,则init启动脚本中if [ \`grep -c "nginx" /etc/passwd\` = "1" ]在变量两边加上双引号,即if [ "\`grep -c "nginx" /etc/passwd\`" = "1" ]。启动php-fastcgi程序:/etc/init.d/php-fastcgi start,若出现Starting php-fastcgi: sudo: unknown user: /usr/bin/php-fastcgi的错误提示,则要修改/etc/sudoersDefaults requiretty这一行前加#注释掉(只读文件,sudo vi /etc/sudoers,按:wq!保存退出)。
php-fastcgi安装完毕,可以上次phpinfo()函数测试php探针,可以看到安装的php版本是5.1.6,以及其他启用的模块。

若程序使用php版本太低,刚开始可以用更新的源,请看 php 升级 5.3.

安装mysql

Centos 5 yum安装mysql数据库,第一次启动并设置重启vps自动启动mysql。

yum install mysql-server php-mysql
/etc/rc.d/init.d/mysqld start
chkconfig mysqld on

安装完毕执行mysql_secure_installation命令安全安装mysql,在这过程中设置root密码、设置只允许root本地localhost登陆mysql服务器等安全设置。然后以root本地登陆,为wordpress博客网站创建好数据库和用户,并赋予用户数据库操作权限:

mysql -u root -p
CREATE DATABASE farlee_info;
CREATE USER 'farlee' IDENTIFIED BY 'info';
GRANT ALL PRIVILEGES ON *.* TO 'farlee';
FLUSH PRIVILEGES;

Mysql安装完毕记得重启php,或重启vps,否则会出现以下错误:
Your PHP installation appears to be missing the MySQL extension which is required by WordPress.
其他:删除mysql用户:Drop USER user;

配置Nginx和虚拟主机

Nginx默认的www Web目录是/var/www,如果需要在另外的目录中创建web网站目录(如/srv/www),则需要将该目录的属主改成nginx (chrown -R nginx /srv/www)(上传新的文件后也可能要重新赋予nginx属主权限),否则wordpress 安装目录wp-content需要改成777权限(或666,如Sitemap.xml),wordpress 管理员才能在管理后台拥有写入权限,普通的755(或644)权限将无法在后台上传图片、安装wordpress主题、修改主题文件等。即使将wp-content 目录改成777权限,安装插件时也需要输入FTP用户名密码。以下是Nginx配置虚拟主机和php-fastcgi来安装wordpress博客的例子:

创建虚拟主机目录:

mkdir -p /srv/www/farlee.info/public_html
mkdir /srv/www/farlee.info/logs
chown -R nginx:nginx /srv/www/farlee.info

Nginx配置文件/etc/nginx/nginx.conf

# The default server 禁止ip访问,防止恶意域名绑定dns解析到服务器ip,301重定向(或return 500;)。
server {
listen 80 default;
server_name _;
rewrite ^(.*) http://h.farll.com permanent;
}
# 1.设置www域名301跳转到不带www域名
server {
listen    80;
server_name www.farlee.info;
rewrite ^(.*) http://h.farll.com$1 permanent;
}

# 2.设置虚拟主机访问日志、错误日志路径,root目录等
# 最主要是加入wordpress URL重写(permalinks)的设置wordpress.conf
server {
listen       80;
server_name farlee.info;
#charset koi8-r;
#access_log  logs/host.access.log  main;
access_log /srv/www/farlee.info/logs/access.log;
error_log /srv/www/farlee.info/logs/error.log;
location / {
root   /srv/www/farlee.info/public_html;
index  index.html index.htm index.php;
include /etc/nginx/wordpress.conf;
}

# 3.设置phpMyAdmin二级目录配置,下面安装phpmyadmin会用到
location ~ ^/phpMyAdmin {
root    /srv/www/farlee.info/public_html;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /srv/www/farlee.info/public_html$fastcgi_script_name;
include        fastcgi_params;
if (-d $request_filename){
  rewrite ^/(.*)([^/])$ $1$2/ permanent;
  }
}

# 4.配置Nginx使用Php-fastcgi模式运行wordpress PHP程序
location ~ \.php$ {
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /srv/www/farlee.info/public_html$fastcgi_script_name;
include        /etc/nginx/fastcgi_params;
}

# 5.Nginx配置其他虚拟主机目录,和/etc/nginx/nginx.conf的目录设置基本差不多
include /etc/nginx/conf.d/*.conf;

WordPress url rewrite配置文件:/etc/nginx/wordpress.conf

if (!-e $request_filename) {
        rewrite ^/(.+)$ /index.php?q=$1 last;
      }

修改配置文件后,重启Nginx(/etc/init.d/nginx restart),然后若出现403 Forbidden  nginx/0.8.53的提示,原因是根目录下没有上传index文件,若设置允许Nginx列出目录,则要设置参数autoindex on;

要在Nginx下搭建多个网站,再在/etc/nginx/conf.d/virtual.conf 配置其他虚拟主机即可。

安装phpmyadmin

运行yum安装yum install phpmyadmin,将自动安装phpmyadmin和相关依赖模块libmcrypt、php-mcrypt、php-mbstring,不用修改php.ini配置文件加载模块,在/etc/php.d/*.ini中已经加载了配置文件。要以http://h.farll.com/ phpmyadmin的二级目录形式访问phpmyadmin,则要在网站根目录下为phpmyadmin的默认安装目录添加软链接

cd /srv/www/farlee.info/public_html
ln -s /usr/share/phpMyAdmin

然后修改phpMyAdmin的配置文件vi /etc/phpMyAdmin/config.inc.php设置$cfg['Servers'][$i]['auth_type'] = 'cookie'; $cfg['blowfish_secret'] = '随便填';,注意若mysql设置了root不允许远程登录,则无法用root账号通过phpmyadmin进入数据库管理。这些设置需要重启php生效。phpmyadmin配置的关键步骤是修改nginx.conf配置文件,建立规则来匹配phpMyAdmin,在前面nginx配置中已有介绍.

其中if (-d $request_filename){rewrite ^/(.*)([^/])$ $1$2/ permanent;}指的是:若请求文件名有同名的目录存在,则将请求跳转到目录里,即不带斜杠的url会被重写,301跳转到末尾加上斜杠的网址,加斜杠的网址也会自动以目录形式访问index文件。也就是farlee.info/phpMyAdminfarlee.info/phpMyAdmin/实际都会访问farlee.info/phpMyAdmin/index.php

可能出现的问题:若http://h.farll.com/wp-admin不能跳转到带斜杠的http://h.farll.com/wp-admin/,也可以在Wordpress配置文件中加入这条设置;如果上传wordpress文件后,只能通过http://youdomain.com/wp-admin/install.php这样的完整url安装wp博客,无法只访问域名安装wordpress博客,也可以尝试在location ~ \.php$中加入这条设置;如果Google chrome浏览器还是跳转到下载页面,无法打开,可能是缓存的问题,清除缓存或换一台电脑/浏览器试试成功。
另外如果访问http://www.domain.com/phpMyAdmin/index.php出现错误

phpMyAdmin – Error:
Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly.  Permission deny.

检查php.ini的session保存路径设置为session.save_path = "/var/lib/php/session",查看该目录属性ls -l /var/lib/phpdrwxrwx--- 2 root apache 2048 Jul 17 11:56 session,用户组为apache导致了nginx无法访问phpmyadmin,修改该目录的用户组为Nginx即可:

sudo chown -R root:nginx /var/lib/php/session

Nginx安装wordpress

在本地通过scp上传wordpress.zip,scp命令中vps远程主机使用ip,无法连接,改用域名才能连接,第一次需确认key。
scp local_file remote_username@www.markfloor.com:remote_folder->cd->unzip .zip -d /srv/www/….(参照ls /srv/www依次解压到wordpress安装目录)。最后修改wordpress的config文件:vi wp-config.php。然后为wordpress博客创建好数据库,就可以开始安装wordpress博客了。
Wordpress安装好之后,若没有将网站目录的属主设置为nginx,则需要修改wp-content相关目录的文件的权限为777或666,才能顺利安装插件、主题、上传图片文件,修改权限(也可以在本地linux系统下将文件权限修改好再上传),如:

chmod 644 -R /srv/www/farlee.info/public_html/wp-content
chmod +X -R /srv/www/farlee.info/public_html/wp-content

首选将wp-content目录、以及子目录、目录里的文件递归地赋予644权限,然后+X(大写)只给wp-content目录及其子目录再增加可执行权限。


“centos lemp搭建wordpress(nginx+php-fastcgi)”文章评论(13)

  1. 卸载rpm apache:rpm -qa |grep httpd,分别rpm -e httpd-x.x.x

    • 需要在安装php之前卸载掉,不然会出现依赖性问题:error: Failed dependencies:
      httpd-mmn = 20051115 is needed by (installed) php-5.1.6-27.el5_5.3.i386

  2. 喜欢远方大哥的文章!但是在nginx下,一些缓存插件估计会有些问题!

  3. Nginx有尝试过,对wordpress的支持不是很好。

  4. 没有尝试过。路过宝地,学些了。

  5. young

    你好,我这样安装出来后phpMyAdmin里面所有图片都显示不出来,有什么办法吗,我加了root:nginx权限也不行。

  6. 如果安装了php后使用yum remove卸载httpd,php会和apache一起被卸载;其实不用卸载直接禁止apache开机自动启动httpd进程:sudo /sbin/chkconfig httpd off

  7. 20120611-MySQL惊天漏洞,知道用户名比如root,最多尝试256次就可登录mysql,部分Linux 版本暴露安全问题: https://community.rapid7.com/community/metasploit/blog/2012/06/11/cve-2012-2122-a-tragically-comedic-security-flaw-in-mysql ,本文中 mysql_secure_installation 配置了只允许localhost 访问则没有问题。没有设置的修改my.cnf 中 [mysqld] “bind-address” 为 “127.0.0.1”.

    • That’s a slick answer to a chgilenalng question

  8. hi

    怎么您的配置文件copy过来不能直接用,我需要完整版的dylan-cn#hotmail.com 请把#换成@

Trackbacks/Pingbacks

  1. Centos5配置Python mod_wsgi Django安装osqa – 远方博客
  2. 未找到页面 | 乱⑺⑧糟的个人bolg
  3. Centos5配置Python easy_install mod_wsgi Django安装osqa(转载)

来说兩句