php+nginx安装小记

这几天看了一下nginx的确是一个比较强大的玩意,试了它的负载均衡和反向代理等功能。

对自己安装php+nginx过程中遇到的问题做一个小记。

php+nginx的工作过程大体是这样的,首先web服务器启用自己的端口监听来自客户机的http请求,当客户机发起http请求到达服务器端的时候,服务器的进程会交给nginx来处理,所以我们要配置nginx的http模块,并且定义一个server,大体是这样的:(当然了nginx默认监听的端口也是80)

http{

    #这个用来设置nginx的http模块监听的端口,这样因为tcp协议默认的端口是80,那么只要到达服务器上的http请求就会扔给nginx,如果是测试也可以自己换端口,请求的时候带上自己的端口

    listen 80;

    #指定http请求头中的host解析,可以指定多个,nginx会根据自己的优先级顺序来做解析

    servername xxx.xxx.com localhost;

    #location块使用来适配url中的uri,也就是除了host之外的部分,如果能够匹配相应的规则,就会落到相应的location块中做处理,location块也可以是多个,nginx会优先精确匹配,然后再根据顺序匹配

    location / {

        #指定文件的解析目录,从这里开始

        root /wwwroot/web;

        index index.html index.htm index.php;

    }

   #下面我们配置一个静态图片的location解析块

   # ~*是不区分大小写的匹配,而~是区分大小写,下面的匹配说明,只要后缀是.jpg/.png/.gif/.jpeg的图片都到服务器的/wwwroot/web/images这个目录下去找

    location ~* \.(jpg|png|gif|jpeg)$ {

        root /wwwroot/web/images;

    }

}

好了,上面的http模块就可以使用了,里面的server模块来处理相应uri中寻找的资源,这个资源是通过server块中的root+请求中的uri(url中除host的部分)共同完成的,最后在服务器的磁盘中找到相应地资源文件。

对于静态资源,直接找到nginx就可以返回给服务器,服务器再返回给客户端,这样本次请求就完成了。

而对于动态的php脚本,就必须介入php的解析器,也就是nginx再收到.php后缀的文件的时候,它需要和php的解析器,进行通讯。在这里首先我们要明白什么是fastcgi,fastcgi即fast common gateway interface,是web服务器和应用直接通讯的接口,是桥梁。而nginx和php的通讯就是依靠它来完成的。

在linux系统上,应用都是以进程的方式存在的,nginx是默认启用了80端口,而php也必须占用一个端口来启动自己,这里是用php-fpm来实现的,默认是监听9000端口。

没有记错的话在php5.3之前,php-fpm是以插件的形式存在的,需要编译的时候自己打包进去。而之后php-fpm被官方集成进去了,编译的时候只要指定--with-fpm就可以了。

php安装完成之后,在sbin目录下有个php-fpm,在php目录的etc目录下有php-fpm的配置文件,你也可以看一下默认是监听9000端口的,用命令/usr/local/php/sbin/php-fpm就可以启用它。然后用ps -ef | grep php-fpm查看一下进程是否存在。

之后我们需要在nginx的server模块中增加对.php后缀的解析块。

location ~ \.php$ {

   #指定php文件存放的目录

    root /wwwroot/web/php;

   #把.php的请求反向代理到9000端口,也就是交给php-fpm来处理

    fastcgi_pass 127.0.0.1:9000;

    fastcgi_index index.php;

    #这里一定要注意,如果不把/scripts修改成和自己指定的root项目,那么就会包file not found

    #fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

    fastcgi_param  SCRIPT_FILENAME  /wwwroot/web/php$fastcgi_script_name;
    include        fastcgi_params;

}

这样就完成了nginx和php-fpm的交互配置,nginx -t 一下,然后-s reload一下,请求一个php文件应该就可以,记得php-fpm一定要启动啊。

你可能感兴趣的:(nginx,php-fpm)