访问php页面提示An Error Occurred的解决办法

今天帮一个朋友解决php页面出现的"An Error Occurred"的错误,返回http的502错误。这里第一反映就是php-fpm.conf配置问题。目前只有这一个网站的,肯定是php这一块出问题了,而php-fpm.conf文件是没有动过的。只有检查php-fpm和nginx.conf的配置了,基本上没有发现什么不当的现象。无意中发现一个nginx和php配置不一致的地方,那就是php-fpm.conf文件里配置的通讯方式为

<value name="listen_address">/tmp/php-cgi.sock</value>

而在nginx.conf里配置的是

fastcgi_pass  127.0.0.1:9000

两者不一致,所以导致了502错误,这里将nginx.conf文件里的配置修改成

# fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/tmp/php-cgi.sock;

重启nginx即可解决502错误。

错误502 upstream sent too big header while reading response header from upstream的解决办法

cookies的值超出了范围我是说

看看了一下日志

错误502 upstream sent too big header while reading response header from upstream

sudo gedit /var/log/nginx/error.log

查看错误日志

upstream sent too big header while reading response header from upstream

你去搜这个错误,网上的解释都差不多,无外乎是cookie携带的header太多了,让你设置:

fastcgi_buffer_size 128k;
fastcgi_buffers 8 128k;

逐步尝试。其中fastcgi_buffers 8 128k 这句,fastcgi_buffers 32 32k 这样更好,内存是整块分配和释放的,减少单位k数能尽可能利用。 Continue reading

Nginx利用多核cpu提高性能_配置参数worker_cpu_affinity

上篇文章http://blog.haohtml.com/archives/6213我们介绍了Nginx 的优化方法,这里主要对worker_cpu_affinity参数详细介绍一下.(官方:http://wiki.nginx.org/MainAndEventModules)
目录(?)

  1. 简介
  2. 规则设定
  3. 演示实例
    1. 两核cpu开启两个进程
    2. 两核cpu开启八个进程
    3. 核cpu开启8个进程
    4. 核cpu开启2个进程
  4. 重启ngin

简介

Nginx默认没有开启利用多核cpu,我们可以通过增加worker_cpu_affinity配置参数来充分利用多核cpu的性能。cpu是任务处理,计算最关键的资源,cpu核越多,性能就越好。

规则设定

(1)cpu有多少个核,就有几位数,1代表内核开启,0代表内核关闭
(2)worker_processes最多开启8个,8个以上性能就不会再提升了,而且稳定性会变的更低,因此8个进程够用了 Continue reading

nginx为目录或网站加上密码认证 [转]

nginx可以为网站或目录甚至特定的文件设置密码认证。密码必须是crypt加密的。可以用apache的htpasswd来创建密码。

格式为:

htpasswd -b -c site_pass username password

site_pass为密码文件。放在同nginx配置文件同一目录下,当然你也可以放在其它目录下,那在nginx的配置文件中就要写明绝对地址或相对当前目录的地址。

如果你输入htpasswd命令提示没有找到命令时,你需要安装httpd。如果是centos可以执行如下来安装, Continue reading

nginx日志切割

nginx的日志文件没有rotate功能。如果你不处理,日志文件将变得越来越大,还好我们可以写一个nginx日志切割脚本来自动切割日志文件。

第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志。在你未重新打开原名字的日志文件前,nginx还是会向你重命名的文件写日志,linux是靠文件描述符而不是文件名定位文件。 Continue reading

nginx无法启动: libpcre.so.1/libpcre.so.0: cannot open shared object file解决办法

NGINX启动时提示错误:

/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory

ldd $(which /usr/local/nginx/sbin/nginx)

linux-vdso.so.1 => (0x00007fff48ff0000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x0000003065800000)
libpcre.so.1 => not found
libssl.so.6 => /lib64/libssl.so.6 (0x0000003067000000)
libcrypto.so.6 => /lib64/libcrypto.so.6 (0x0000003066400000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000003063000000)
libz.so.1 => /lib64/libz.so.1 (0x0000003063c00000)
libc.so.6 => /lib64/libc.so.6 (0x0000003062c00000)
libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0x0000003066c00000)
libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x0000003069c00000)
libcom_err.so.2 => /lib64/libcom_err.so.2 (0x0000003068800000)
libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x0000003069000000)
/lib64/ld-linux-x86-64.so.2 (0x0000003062800000)
libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0x000000306a800000)
libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x0000003067c00000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x0000003068400000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x0000003064400000)
libsepol.so.1 => /lib64/libsepol.so.1 (0x0000003064000000)

解决方法:

ln -s /usr/local/lib/libpcre.so.1 /lib64

32位系统则:

ln -s /usr/local/lib/libpcre.so.1 /lib

注:
/usr/local/lib/libpcre.so.1 为prce安装后的文件地址
低版本prce对应的libpcre.so.1 为libpcre.so.0

增加Apache2和Nginx的header长度限制

nginx默认的header长度上限是4k,如果超过了这个值
nginx会直接返回400错误

[error] 16613#0: *105 upstream sent too big header while reading response header from upstream

可以通过以下2个参数来调整header上限

client_header_buffer_size 16k;
large_client_header_buffers 4 16k;

看起来是,nginx默认会用client_header_buffer_size这个buffer来读取header值,如果header过大,它会使用large_client_header_buffers来读取 Continue reading

Nginx——关闭Nginx日志

  有时候,nginx日志十分吓人,我们有个客户受到攻击,nginx出现too many connections错误,日志5分钟就写入了10GB,硬盘很快就会满了。 那么,如何关闭Nginx日志?怎么取消/停止Nginx日志? 可以修改nginx.conf

access_log /dev/null;
error_log /dev/null;

这样全部把他们丢到系统的黑洞里了。不用每时每刻都往系统磁盘疯狂的读写日志了 还延长硬盘的寿命。
修改完,重启Nginx( kill -HUP `cat logs/nginx.pid` )即可。

nginx: [warn] the "log_format" directive may be used only on "http" level ...解决办法

新开了一个vps,装了最新的nginx 1.0.2版本,将原来的虚拟主机配置直接拿过来.用nginx -t 测试语法的时候,发现提示以下警告信息

[root@centos nginx]# ./sbin/nginx -t
nginx: [warn] the "log_format" directive may be used only on "http" level in /usr/local/nginx/conf/vhosts/bbs.conf:62

解决办法如下:

将/usr/local/nginx/conf/nginx.conf 里server段里的下面代码移出放到该server段的前面即可。

log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';

如果有其的虚拟主机开启了日志,也按上面的要求移出server段放在server段的前面即可。

/usr/local/nginx/sbin/nginx -t 测试一下,没有warn警告信息了。

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