Nginx

nginx相关配置文件下载: nginx相关配置文件

包括: nginx.conf vhosts.conf fastcgi.conf php.cgi.sh restart_httpd.sh


FreeBSD下Nginx安装笔记

安装fastcgi模式php

./configure --prefix=/site/webserver/php --with-config-file-path=/site/webserver/php/etc --with-mysql=/usr/local/mysql --with-zlib-dir=/usr/local/zlib --with-png-dir=/usr/local --with-jpeg-dir=/usr/local/jpeg6 --with-gd --enable-soap --with-iconv --with-sqlite=shared --enable-sockets --enable-mbstring=all --with-curl --with-libxml-dir=/usr/local/libxml2 --with-freetype-dir=/usr/local/freetype --enable-fastcgi --enable-fpm --enable-force-cgi-redirect
## 最重点的一句是  --enable-fastcgi --enable-force-cgi-redirect
make
make install

修改php.ini cgi.fix_pathinfo=1 这样php-cgi方能正常使用SCRIPT_FILENAME这个变量。

安装nginx

./configure --prefix=/site/webserver/nginx --with-http_stub_status_module
make
make install

spawn-fcgi http://redmine.lighttpd.net/projects/spawn-fcgi/news

fetch http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz    
./configure
make
make install

启动fastcgi: /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www -f /site/webserver/php/bin/php-cgi

启动nginx: /site/webserver/nginx/sbin/nginx

配置支持php的pathinfo模式的nginx

配置虚拟主机部分,支持pathinfo的nginx代码如下:

## 在nginx.conf的server部分:
server {
	listen       8080;
	server_name  localhost;

	location ~ \.php {
		include        fastcgi.conf;
	}
}
##要点:  \.php 后面没有$,以便匹配所有 *.php/* 形式
##重点代码见 fastcgi.conf 开头部分
特别提示:这样会存在严重的安全问题,用户可能使用 asc.php.jpg形式图片文件,而nginx当作php给执行了! — 屈伟 2010/03/13 20:56

fastcgi.conf 代码如下:

fastcgi_pass   127.0.0.1:9000;
##fastcgi_index  index.php;

set $path_info "";
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
        set $real_script_name $1;
        set $path_info $2;
}
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
## 以上是支持pathinfo的重点部分

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx;

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

#fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
#fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
#fastcgi_param  REDIRECT_STATUS    200;

nginx URL重写实例

    server {
        listen       8080;
        server_name  cs.niceword.cn;
        location / {
            root   /data/apps/cs;
            index  index.php index.html index.htm ;

            # !-e 表示如果文件不存在。  
            if (!-e $request_filename) {
                rewrite ^/xn/(.+)$   /xn.php/xn/$1 last;
                rewrite ^/xn$   /xn.php/xn last;
                rewrite ^/xn/$   /xn.php/xn last;
         
                rewrite ^/(.+)$ /index.php/$1 last;
            }
         
        }
        location ~ \.php {
            root   /data/apps/cs;
            include        fastcgi.conf;
        }
    }

nginx启动脚本

#!/usr/local/bin/bash
case $1 in
start)
        /usr/local/sbin/nginx
;;
stop)
        killall -9 nginx
;;
test)
        nginx -t -c /usr/local/etc/nginx/nginx.conf
;;
restart)
        ps auxww | grep nginx | grep master | awk '{print $2}' | xargs kill -HUP
;;
show)
        ps -aux|grep nginx
;;
esac

nginx 502错误解决方案

如题,最近网站频繁出现502错误,简直无法正常运转,出现这种情况大多是php-cgi超时没有返回信息,或进程僵死等情况造成的,参考张宴的这篇关于 502错误的解决办法(http://blog.s135.com/read.php?361)。

经过分析将nginx的error log打开,发现”pstream sent too big header while reading response header from upstream”这样的错误提示,查阅了一下资料,大意是nginx缓冲区有一个bug造成的,我们网站的页面消耗占用缓冲区可能过大。参考老外写的修改办法增加了缓冲区容量大小设置,502问题彻底解决,后来系统管理员又对参数做了调整只保留了2个设置参数:client head buffer,fastcgi buffer size。修改方法如下:

fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;

参考资料

linux/nginx.txt · 最后更改: 2010/03/13 21:26 由 kenvin
到顶部
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0 红麦软件 红麦软件