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两种通信方式对比