1. 程式人生 > >centos7安裝nginx和php

centos7安裝nginx和php

rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

yum install nginx

安裝php和php-fpm

yum install --enablerepo=remi --enablerepo=remi-php56 php  php-fpm

因為我的php安裝的是5.6的,所以的指定這個源裡面安裝php-fpm,不然一直報錯

修改配置檔案

vi /etc/php.ini
cgi.fix_pathinfo=0

修改配置檔案

vim /etc/nginx/conf.d
/default.conf server { listen 80; server_name www.scchary.com; root /home/samba1/public_html; #charset koi8-r; #access_log /var/log/nginx/log/host.access.log main; location / { #root /usr/share/nginx/html; #root /home/samba1/public_html; index index.php index.html
index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ {
# proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { #root /home/samba1/public_html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} }

修改上面配置檔案的時候,執行php檔案的時候,老是顯示沒有找到,後來在這裡找到了答案,參考網址http://www.nginx.cn/562.html

server {
    listen   [::]:80;
    server_name  example.com www.example.com;
    access_log  /var/www/logs/example.com.access.log;  

    location / {
        root   /var/www/example.com;
        index  index.html index.htm index.pl;
    }

    location /images {
        autoindex on;
    }

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/example.com$fastcgi_script_name;
        include fastcgi_params;
    }
}

這個配置中有很多不合理的地方,其中一個明顯的問題就是root指令被放到了location / 塊。如果root指令被定義在location塊中那麼該root指令只能對其所在的location生效。其它locaiont中沒有root指令,像location /images塊不會匹配任何請求,需要在每個請求中重複配置root指令來解決這個問題。因此我們需要把root指令放在server塊,這樣各個location就會繼承父server塊定義的$document_root,如果某個location需要定義一個不同的$document_root,則可以在location單獨定義一個root指令。

另一個問題就是fastCGI引數SCRIPT_FILENAME 是寫死的。如果修改了root指令的值或者移動檔案到別的目錄,php-fpm會返回“No input file specified”錯誤,因為SCRIPT_FILENAME在配置中是寫死的並沒有隨著$doucument_root變化而變化,我們可以修改SCRIPT_FILENAME配置如下:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

所以我們不能忘記在server塊中配置root指令,不然$document_root的值為空,只會傳$fastcgi_script_name到php-fpm,這樣就會導致“No input file specified”錯誤。

最後在測試php檔案裡面輸出phpinfo的時候,出現了一個未定義時區的錯誤,修改了配置檔案還是報錯,最後重啟了下php-fpm就好了