nginx使用fastcgi模式时,要启动多个cgi进程才能正常使用drupal

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx使用fastcgi模式时,要启动多个cgi进程才能正常使用drupal相关的知识,希望对你有一定的参考价值。

参考技术A 安装drupal时,使用了nginx+fastcgi模式。
一开始只起了一个php-cgi进程,结果发现进入主界面后,每次点“配置”后,系统就会阻塞,直到超时后报错“PDOException:
SQLSTATE[23000]:
Integrity
constraint
violation:
1048
Column
'uid'
cannot
be
null",
这里应该是$uid取值为空。
首先到db里看了user表和session表,发现有内容。没办法又根据关键字找了一圈代码,也没有发现有用的线索。后来在群里经过好心人的提醒,cgi处理进程要启多个,因为“有些程序会curl,访问自己,系统就会卡死,或通信失败”。然后又启了1个php-cgi(现在有2个),问题解决。
这里附上nginx.conf里配置多个fastcgi的指令吧,希望能给遇到类似问题的同学一点帮助:
nginx.conf
>>
?
1
2
3
4
5
6
7
8
9
10
11
12
13
http

upstream
myfastcgi

server
127.0.0.1:9000
weight=1;
server
127.0.0.1:9001
weight=1;

server

localtion
~
\.php$

fastcgi_pass
myfastcgi;


sh 使用Nginx和MySQL编译并将php 5.3.27安装到FastCGI模式

cd /home/oldboy/tools

# 1. Install dependencies
# Part 1: yum install
yum install -y		 	\
	freetype-devel	 	\
	gd-devel 		\
	libcurl-devel 		\
	libjpeg-turbo-devel 	\
	libpng-devel 		\
	libxml2-devel 		\
	libxslt-devel 		\
	zlib-devel

# Part 2: yum install from epel
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
yum install -y libmcrypt-devel mcrypt mhash

# Part 3: compile libiconv
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
tar xf libiconv-1.14.tar.gz
cd libiconv-1.14
./configure --prefix=/usr/local/libiconv
make && make install

# 2. Download php source tarball and extract it
wget http://cn2.php.net/get/php-5.3.27.tar.gz/from/this/mirror
tar xvf php-5.3.27.tar.gz
cd php-5.3.27

# 3. Config
./configure 					\
	--prefix=/application/php-5.3.27 	\
	--disable-rpath 			\
	--enable-bcmath 			\
	--enable-fpm 				\
	--enable-ftp 				\
	--enable-gd-native-ttf 			\
	--enable-inline-optimization 		\
	--enable-mbregex 			\
	--enable-mbstring 			\
	--enable-pcntl 				\
	--enable-safe-mode 			\
	--enable-shmop 				\
	--enable-short-tags 			\
	--enable-soap 				\
	--enable-sockets 			\
	--enable-static 			\
	--enable-sysvsem 			\
	--enable-xml 				\
	--enable-zend-multibyte 		\
	--enable-zip 				\
	--with-curl 				\
	--with-curlwrappers 			\
	--with-fpm-group=nginx 			\
	--with-fpm-user=nginx 			\
	--with-freetype-dir 			\
	--with-gd 				\
	--with-iconv-dir=/usr/local/libiconv 	\
	--with-jpeg-dir 			\
	--with-libxml-dir=/usr 			\
	--with-mcrypt 				\
	--with-mhash 				\
	--with-mysql=/application/mysql 	\
	--with-openssl 				\
	--with-png-dir 				\
	--with-xmlrpc 				\
	--with-xsl 				\
	--with-zlib

# 4. Compile php
ln -s /application/mysql/lib/libmysqlclient.so.18 /usr/lib64/
touch ext/phar/phar.phar
make
make install
ln -s /application/php-5.3.27 /application/php

# 5. Config php.ini
cp php.ini-production /application/php/lib/php.ini
vim /application/php/lib/php.ini
	safe_mode=On					# line 338
	expose_php=Off					# line 435
	display_errors=Off				# line 538
	log_errors=On					# line 559
	error_log=/application/logs/php_errors.log	# line 643
	register_globals=Off				# line 703
	magic_quotes_gpc=On				# line 756
	cgi.fix_pathinfo=0				# line 854
	allow_url_fopen=Off				# line 902

# 6. Config php-fpm.conf
cd /application/php/etc
cp php-fpm.conf.default php-fpm.conf

# 7. Start php into fastcgi mode
/application/php/sbin/php-fpm
# Check its status
ps aux | grep php-fpm
lsof -i :9000

以上是关于nginx使用fastcgi模式时,要启动多个cgi进程才能正常使用drupal的主要内容,如果未能解决你的问题,请参考以下文章

nginx和apache作为webserver的差别

更改代码时出现 Django、Nginx、FastCGI 缓存问题

nginx连接fastcgi有两种模式

sh 使用Nginx和MySQL编译并将php 5.3.27安装到FastCGI模式

nginx如何使用

FastCGI特点原理nginx与php-fpm两种通信方式对比