Gentoo下安装Nginx+php

Posted by Elton's Blog on July 19, 2009

使用nginx(engin x)和spawn-fcgi来共同支持php

安装nginx

emerge -av nginx

安装spawn-fcgi

emerge -av spawn-fcgi

启动spawn-fcgi

spawn-fcgi -a 127.0.0.1 -p 9000 -f /usr/bin/php-cgi -C 10

a 表示绑定的ip地址 p 表示端口号 f 表示fcgi的应用程序,在这里是制定php的cgi版本的程序 C 表示spawn的child的个数

执行netstat检查spwan-fcgi是否正常启动,可以看到9000端口是否已经开始监听

netstat -tnpl

配置nginx

编辑nginx.conf文件

user nginx nginx;
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

error_log /var/log/nginx/error_log info;

#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;

events {
        worker_connections  8192;
        use epoll;
}

http {
        include         /etc/nginx/mime.types;
        default_type    application/octet-stream;

        log_format main
                '$remote_addr - $remote_user [$time_local] '
                '"$request" $status $bytes_sent '
                '"$http_referer" "$http_user_agent" '
                '"$gzip_ratio"';

        client_header_timeout   10m;
        client_body_timeout     10m;
        client_max_body_size 50m; #最大允许上传50M的附件
        send_timeout            10m;

        connection_pool_size            512;
        client_header_buffer_size       8k;
        large_client_header_buffers     4 4k;
        request_pool_size               1024k;

        gzip on;
        gzip_min_length 1k;
        gzip_buffers    4 8k;
        gzip_http_version  1.1;
        gzip_types   text/plain application/x-javascript text/css application/xml;

        output_buffers  1 1024k;
        postpone_output 1460;

        sendfile        on;
        tcp_nopush      on;
        tcp_nodelay     on;

        keepalive_timeout       75 20;
        ignore_invalid_headers  on;
        index index.html;

        include /data/www/vhosts/*.conf;

其中,worker_processes表示worker进程的个数,一般跟CPU个数相同 worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000 表示每个CPU处理一个worker

虚拟主机配置

server {
        index           index.htm index.html index.php
        server_name     blog.domain.com;
        access_log      /var/log/nginx/domain.access_log main;
        error_log       /var/log/nginx/domain.error_log info;
        root            /data/www/domain/htdocs/blog;

        location / {
                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;
                }
        }

        location ~ .*.php$ {
                include /etc/nginx/fastcgi_params;
                fastcgi_index index.php;
                fastcgi_pass  127.0.0.1:9000;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;        }

         location ~ .(htm|html|gif|jpg|jpeg|png|bmp|ico|css|js)$ {
                expires 30d;
        }
}

上面的配置以wordpress的静态url为例 其中,location ~ .*.php$ 部分是配置php的fcgi expires,是设置静态资源的缓存时间 rewrite部分是设置wordpress静态url时候需要用到的rewrite

Nginx日常维护

Nginx 支持下表中的信号: 信号名 作用描述 TERM, INT 快速关闭程序,中止当前正在处理的请求 QUIT 处理完当前请求后,关闭程序 HUP 重新加载配置,并开启新的工作进程,关闭就的进程,此操作不会中断请求 USR1 重新打开日志文件,用于切换日志,例如每天生成一个新的日志文件 USR2 平滑升级可执行程序 WINCH 从容关闭工作进程

如要重新加载配置文件就使用如下命令

#kill -HUP </pre>
pid是nginx的进称号,通过netstat -tnpl可以查到
### Nginx 监控
通过在配置文件中加入:
location ~ ^/status/ {
	    stub_status on; #Nginx 状态监控配置
	    access_log off;
	 }
就可以使用http://yourdomain.com/stauts监控nginx的状态。 可以看到类似这样的信息
Active connections: 70
server accepts handled requests
 14553819 14553819 19239266
Reading: 0 Writing: 3 Waiting: 67
  • active connections – 当前 Nginx 正处理的活动连接数.
  • server accepts handled requests -- 总共处理了 14553819 个连接 , 成功创建 14553819 次握手 ( 证明中间没有失败的 ), 总共处理了 19239266 个请求 ( 平均每次握手处理了 1.3 个数据请求 )
  • reading -- nginx 读取到客户端的 Header 信息数
  • writing -- nginx 返回给客户端的 Header 信息数。
  • waiting -- 开启 keep-alive 的情况下,这个值等于 active - (reading + writing),意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接。
参考: http://www.ibm.com/developerworks/cn/web/wa-lo-nginx/index.html http://wiki.nginx.org/NginxChs http://blog.chinaunix.net/u/12909/showart_1831422.html