ubuntu 14.04安裝nginx+php

來源:互聯網
上載者:User

標籤:

轉自: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-propertiesadd-apt-repository ppa:nginx/stableadd-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-curlapt-get install php5-gd php5-intl php5-imagickapt-get install php5-imap php5-mcrypt php5-memcacheapt-get install php5-ming php5-ps php5-pspellapt-get install php5-recode php5-snmp php5-sqliteapt-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 /wwwchmod 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 reloadservice 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;}

 

ubuntu 14.04安裝nginx+php

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.