zoukankan      html  css  js  c++  java
  • ubuntu 14.04安装nginx+php

    转自:http://www.cnblogs.com/helinfeng/p/4219051.html

    基于最新的Ubuntu 14.04(2014年9月)搭建nginx、php、mysql环境,
    以下全部命令行操作:

    1,由于需要大量的权限操作,方便起见临时提升权限,使用root账号

    sudo su

    2,安装apt源管理工具、添加nginx和php的安装源

    apt-get install python-software-properties
    add-apt-repository ppa:nginx/stable
    add-apt-repository ppa:ondrej/php5

    3,更新系统软件

    apt-get update

    4、安装mysql

    apt-get install mysql-server

    注:在安装过程中,会要求你输入MySQL的root账号的密码。

    5、安装php及对mysql的支持

    apt-get install php5 php5-fpm php5-mysql php-apc

    6、根据实际需要,选择性的安装php的各类功能模块(具体请自行百度)

    apt-get install php-pear php5-dev php5-curl
    apt-get install php5-gd php5-intl php5-imagick
    apt-get install php5-imap php5-mcrypt php5-memcache
    apt-get install php5-ming php5-ps php5-pspell
    apt-get install php5-recode php5-snmp php5-sqlite
    apt-get install php5-tidy php5-xmlrpc php5-xsl

    7、安装nginx

    apt-get install nginx

    8、配置php

    vi /etc/php5/fpm/php.ini
    找到:;cgi.fix_pathinfo=1
    改为:cgi.fix_pathinfo=0

    9、配置nginx

    mkdir /www
    chmod 755 /www

    创建一个 /www 目录设置为 755 权限

    vi /etc/nginx/sites-enabled/default

    找到:root /usr/share/nginx/html;

    改为:root /www;

    说明:将网站根目录设置到/www 目录下,注意不要写成 /www/ 这种格式,

    这个习惯性的小小洁癖给我带来了意想不到的困扰,后面细说。

    找到:index index.html index.htm;
    改为:index index.php index.html index.htm;

    说明:在默认索引文件中增加 index.php

    找到:location ~ .php$ { * } 区块
    做如下调整(改动之处于行末有注释):

    location ~ .php$ {
        try_files $uri =404; #增加
        fastcgi_split_path_info ^(.+.php)(/.+)$; #反注释
        ## NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
        #
        ## With php5-cgi alone:
        # fastcgi_pass 127.0.0.1:9000;
        ## With php5-fpm:
        fastcgi_pass unix:/var/run/php5-fpm.sock; #反注释
        fastcgi_index index.php; #反注释
        include fastcgi_params; #反注释
    }

    10、解决php-fpm与nginx的小bug

    按上述步骤操作后,由于nginx与php-fpm之间的一个小bug,会导致这样的现象:
    网站中的静态页面 *.html 都能正常访问,而 *.php 文件虽然会返回200状态码,
    但实际输出给浏览器的页面内容却是空白。

    简而言之,原因是nginx无法正确的将 *.php 文件的地址传递给php-fpm去解析,
    相当于php-fpm接受到了请求,但这请求却指向一个不存在的文件,于是返回空结果。

    为了解决这个问题,需要改动nginx默认的fastcgi_params配置文件:

    vi /etc/nginx/fastcgi_params

    在文件的最后增加一行:

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

    关于这行的内容,多说几句,其中有两个参数:

    $document_root 即是指网站的根目录,也就是我们在前面刚设置的 root /www;
    $fastcgi_script_name 则是指网站上的各个 *.php 文件名(其实是文件的相对路径)
    这两个合在一起形成完整的 php file path,比如你的网站有个 /test/script.php 文件,
    nginx传递给php-fpm的完整路径就是:/www/test/script.php

    我在前面说配置nginx时,写成了 root /www/; 这种写法,对于nginx不成问题,
    但它在向php-fpm传递php文件路径时,会形成:/www//test/script.php
    这样的文件地址无效(获取不到正确的php文件),于是出现返回空白的问题。
    这个问题是如此之隐蔽,以至于我花了大量时间在查看LOG、寻找资料和调整设置上。

    11,重启各项服务

    service php5-fpm reload
    service nginx reload

    重新加载各项配置改动。

    12、测试

    vi /www/index.php

    内容:

    <?php echo phpinfo(); ?>

    请打开你的浏览器访问:http://localhost 若一切正常,将输出php环境信息。

    Nginx下支持ThinkPHP的Pathinfo和URl Rewrite模式

    以下内容转自:http://www.sundabao.com/nginx%E4%B8%8B%E6%94%AF%E6%8C%81thinkphp%E7%9A%84pathinfo%E5%92%8Curl-rewrite%E6%A8%A1%E5%BC%8F/

    解决方案

    我是在sites(vhost)下配置的,在/etc/nginx/sites-available/目录下。当然你也可以直接在/etc/nginx/nginx.conf里配置。
    在localhost / {} 配置中加如下代码:

    #如果请求既不是一个文件,也不是一个目录,则执行一下重写规则
    if (!-e $request_filename)
    {
            #地址作为将参数rewrite到index.php上。
            rewrite ^/(.*)$ /index.php/$1;
            #若是子目录则使用下面这句,将subdir改成目录名称即可。
            #rewrite ^/subdir/(.*)$ /subdir/index.php/$1;
    }

    完整代码如下:

    location / {
        root /var/www;
        # First attempt to serve request as file, then
        # as directory, then fall back to index.html
        try_files $uri $uri/ /index.html;
        # Uncomment to enable naxsi on this location
        # include /etc/nginx/naxsi.rules
        if (!-e $request_filename)
        {
                rewrite ^/PHPParser/(.*)$ /PHPParser/index.php?s=$1 last;
                break;
        }
    }

    然后在localhost ~ .php{}配置栏目中添加如下两行:

    fastcgi_split_path_info ^(.+.php)(.*)$;                             
    fastcgi_param PATH_INFO $fastcgi_path_info; 

    完整配置如下

     location ~ .php$ {
        root /var/www;
        try_files $uri = 404;
        fastcgi_split_path_info ^(.+.php)(/.+)$;
    #   # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
    #
    #   # With php5-cgi alone:
        #fastcgi_pass 127.0.0.1:9000;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    #   # With php5-fpm:
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }
  • 相关阅读:
    【分布式事务】的一篇良心之作!
    如何保证缓存与数据库的数据一致性
    30多岁的大龄程序员,应该如何保持职场竞争力
    Kafka acks参数对消息持久化的影响
    Kafka 如何优化内存缓冲机制造成的频繁 GC 问题?
    Shell中的特殊符号(special characters)和含义
    Bash中的一些常用的数组相关的特殊语法(array syntax)
    一站式搞定Bash脚本的参数处理问题
    Bash脚本set命令教程
    Bash中的eval命令
  • 原文地址:https://www.cnblogs.com/lurenjiashuo/p/ubuntu-nginx-thinkphp.html
Copyright © 2011-2022 走看看