nginx+php出現No input file specified錯誤如何解決

來源:互聯網
上載者:User

今天在自己本地的開發環境突然出現了No input file specified錯誤,反覆檢查返現自己的設定檔和配置路徑以及許可權都沒有問題。經過反覆的排查終於發現了問題,本文主要和大家分享nginx+php出現No input file specified錯誤如何解決,希望能協助到大家。

問題原因分析

在GitHub上下載了一個開源的tp5項目,之前自己本地的網站運行都沒有問題。但是安裝了這個開源項目後就發現本地其他網站都無法訪問了。訪問就是No input file specified錯誤。在網上也找瞭解決辦法,但是都不是,看來這個錯誤有點兒詭異。
後來反覆嘗試,重啟電腦後問題得到解決但是再次運行下載的tp5開源項目後其他網站又出現了這樣的錯誤No input file specified 而且只有這一個網站運行沒有問題。
據此將錯誤圈定在該開源項目的nginx設定檔中。再來看看該設定檔:

server {    listen 80;    server_name local.test.com;    access_log /data/wwwlogs/local.test.com.log combined;    error_log /data/wwwlogs/local.test.com_error.log error;    index index.html index.htm index.php;    root /data/php/test;    add_header X-Powered-Host $hostname;    fastcgi_hide_header X-Powered-By;    if (!-e $request_filename) {        rewrite  ^/(.+?\.php)/?(.*)$  /$1/$2  last;        rewrite  ^/(.*)$  /index.php/$1  last;    }    location ~ \.php($|/){        fastcgi_index   index.php;        fastcgi_pass    127.0.0.1:9000;        include         fastcgi_params;        set $real_script_name $fastcgi_script_name;        if ($real_script_name ~ "^(.+?\.php)(/.+)$") {            set $real_script_name $1;        }        fastcgi_split_path_info ^(.+?\.php)(/.*)$;        fastcgi_param PATH_INFO $fastcgi_path_info;        fastcgi_param SCRIPT_NAME $real_script_name;        fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;        fastcgi_param PHP_VALUE open_basedir=$document_root:/tmp/:/proc/;    }    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {        access_log  off;        error_log   off;        expires     30d;    }    location ~ .*\.(js|css)?$ {        access_log   off;        error_log    off;        expires      12h;    }

在以上的配置中其他都是常規的配置。因為我使用cgi。在fastcgi參數中有一行可能大家也注意到了。

fastcgi_param PHP_VALUE open_basedir=$document_root:/tmp/:/proc/;

就是這句。這句的主要作用是設定fastcgi的可操作目錄從而防止跨站的,將open_basedir限定在了本項目的目錄和/tmp/以及/proc/中。

問題解決

剛剛說了是在配置的fastcgi配置中多了一句防止跨站的語句。那麼這句話他其實是影響了整個fastcgi的參數,這樣因為我的其他網站的路徑是/data/php/xxx/這樣的目錄,而不在本開源項目的目錄/data/php/test/所以fastcgi就無法找到。
所以在這句之前加#注釋這句或者刪除這句重啟系統或重啟nginx就可以了。

線上部署的建議

那麼到底要不要使用這句呢?線上上環境中當然是可以的。線上上項目部署中對於open_basedir中最好別使用$document_root這樣的變數。如果有多重專案線上上伺服器中那麼可以把所以項目放置在一個統一的目錄中。例如我的線上是wwwroot目錄下放置其他網站。例如/wwwroot/test1 /wwwroot/test2那麼我可以配置為

fastcgi_param PHP_VALUE open_basedir=/wwwroot/:/tmp/:/proc/;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.