Other · 2016-10-23 2

将WordPress从Apache迁移到nginx

前言


Nginx (“engine x”) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

1、Nginx安装


1.1 安装依赖环境包

zlib(gzip模块),pcre (rewrite模块),openssl(ssl 功能,不开启可以不安装)

以上软件安装类似,解压后进行configure, make ,make install ,如果需要明确指定软件安装目录,需要在configure的时候指定prefix

1.2 安装nginx

1.下载nginx,在http://nginx.org/en/download.html 进行下载,我下载的是stable版本,然后进行解压缩

2.  ./configure –prefix=/opt/nginx  –with-pcre=/root/package/pcre-8.31/  –with-openssl=/usr/lib64/openssl/engines(这里必须制定到pcre的源码,否则会报找不到configure)

3. make && make install

到此,nginx 安装完成。

2、Nginx 配置


2.1 nginx.conf

Nginx 安装完成后,在conf文件下面,我们主要修改 nginx.conf,来配置nginx,推荐做法是自己建一个conf文件然后include进来。

1、 在http层添加include /usr/local/nginx/conf/vhost/*.conf;

2、贴上我的vhost的配置文件

server {
	listen       80;  --这里表示监听端口
	server_name  *.fordba.com;  --这里表示绑定的域名
	location / {   -- 根目录,表示网站的存放目录
		root   /www/fordba;
		index  index.php index.html index.htm;  --添加index.php作为首页支持
	if (-f $request_filename/index.html){
					rewrite (.*) $1/index.html break;
			}
	if (-f $request_filename/index.php){
					rewrite (.*) $1/index.php;
			}
	if (!-f $request_filename){
					rewrite (.*) /index.php;
			}
	}                               -- 这里的if 语句为添加url rewrite。即静态URL
	error_page   500 502 503 504  /50x.html;
	location = /50x.html {
		root   html;
	}
	location ~* \.(ini|docx|doc)$ {  
		 deny all;  
	}  

	location = /xmlrpc.php {     -- 这个一定要禁止,防止被暴力密码破解
		 deny all;  
	}  
	location ~ \.php$ {       -- 这一部分表示添加php支持,nginx  本身是无法进行php文件解析,需要将他传输给php-frm处理或者给apache处理
		root           html;
		fastcgi_pass   127.0.0.1:9000;
		fastcgi_index  index.php;
		fastcgi_param  SCRIPT_FILENAME  /www/fordba$fastcgi_script_name;
		include        fastcgi_params;    
	}
	location ~ /\.ht {   -- 禁止访问.htaccess 文件
	deny  all;
	}
}

 

上面的配置就完成了一个vhost的配置,也可以添加多个配置,然后用nginx -s reload 重新加载配置文件。

3、 PHP 配置


如果你的PHP在一开始编译的时候没有添加php-fpm  支持,那么重新编译PHP吧。

./configure –prefix=/usr/local/php –with-mysql=/usr/local/mysql  –enable-fpm  –with-apxs2=/usr/local/apache2/bin/apxs –with-libxml-dir=/usr/local/libxml2 –with-mysqli=/usr/local/mysql/bin/mysql_config

然后查看PHP的其他module 是否正常,如果有不正常的模块,用phpize 去动态添加,详情请查看(如何为PHP动态的添加模块)

 

4、启动Nginx


目前Nginx以及PHP已经配置完成,关闭Apache,直接nginx就可以启动了,享受Nginx给你带来的静态文件的强大处理能力吧!

 

5、升级中碰到的错误


当升级完成后,我发现PHP文件能够正常解析,wp后台也能正常访问,但是前台一片空白,这就需要检查模块是否正常加载了。

;

检查常用的模块是否都正常,不正常就需要添加。我就碰到zlib模块出问题,重新动态添加了。

还有一个问题就是nginx的rewrite和Apache不一样,需要在vhost的配置文件中修改,上面已经贴出,否则也会导致前台出问题。