nginx fastcgi 通用配置

2017-08-14 星星

通用配置文件php和php_rewrite放在和nginx.conf同级目录。

php:

location ~* .php($|/) {
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME   $fastcgi_file;
        fastcgi_param SERVER_NAME       $server_name;
        fastcgi_param PATH_INFO         $fastcgi_script_name;
}

php配置使用了自定义变量$fastcgi_file。

php_rewrite

set $fastcgi_file $document_root$fastcgi_script_name;
if (!-e $request_filename) {
    rewrite  ^/(.*)$  /index.php/$1;
    set $fastcgi_file $document_root$fastcgi_script_name;
}
include php;

使用自定义变量$fastcgi_file。

常规server配置

server {
    listen 80;
    server_name xxx.com;
    root /srv/www/xxx.com/public;

    include php_rewrite;
}

带location的server配置

server {
    listen 80;
    server_name xxx.com;

    location /v1 {
        root /srv/www/xxx.com-v1/public/;
        include php_rewrite;
    }
    location /v2 {
        root /srv/www/xxx.com-v2/public/;
        include php_rewrite;
    }
    include php;
}

这个配置就有很多说法了,以location /v1为例,包含文件php_rewrite中include php语句不会起作用,包含文件php_rewrite中的rewrite ^/(.*)$ /index.php/$1会重写uri到/,然后匹配server下配置文件php中的location,因为位于/并且在/下没有定义root和alias所以$document_root使用默认值,例如:/etc/nginx/html,为了避免这种情况可以使用自定义变量保存fastcgi_param SCRIPT_FILENAME,正如代码中的$fastcgi_file变量。

其中rewrite有需要特别注意的地方:last和break

这两个参数官方文档写的不是很容易理解,参考资料: http://blog.csdn.net/brainkick/article/details/7475770


用户评论
开源开发学习小组列表