使用Nginx搭建靜態(tài)文件服務(wù)及配置PHP運(yùn)行環(huán)境

緣起

最近一直在忙畢業(yè)設(shè)計(jì)鳍置。其中有一環(huán)需要搭建一個(gè)靜態(tài)服務(wù)器识补,用于提供文件上傳蹂安、下載和以及圖片訪問。由于一直以來用的都是Nginx彰阴,所以也就想到了用Nginx來搭一個(gè)靜態(tài)文件服務(wù)器和一個(gè)PHP運(yùn)行環(huán)境瘾敢。這里簡要記錄下搭建步驟。

注:原文鏈接尿这,轉(zhuǎn)載請(qǐng)注明出處

關(guān)于Nginx的配置文件里的參數(shù)的意義簇抵,恰好搜到這篇文章《Nginx配置文件nginx.conf中文詳解》,總結(jié)的相當(dāng)不錯(cuò)射众。推薦一看碟摆。

Nginx搭建靜態(tài)文件服務(wù)器

在網(wǎng)上搜羅了一圈,相關(guān)的文章一大把叨橱,講得既多又雜焦履,但其實(shí)只涉及簡單的幾行配置而已。

打開Nginx的配置文件雏逾,默認(rèn)的是/etc/nginx/sites-available/default這個(gè)文件。找到server這一塊內(nèi)容郑临,在里面添加以下的配置栖博,相關(guān)注釋已標(biāo)注出來,各位看管根據(jù)需要自行修改一下就好哈厢洞。

server {
    # 監(jiān)聽來自在所有網(wǎng)絡(luò)上的80端口的請(qǐng)求
    listen 0.0.0.0:8080;

    # 這個(gè)server的根目錄
    root /home/sr1/test;

    # ....這里省略其他無關(guān)項(xiàng)目

    # 下面的東西是需要自行添加的配置
    location ~ ^/upload/.*\.(png|css|jpg|apk)$ {
        root /home/sr1/files;
        expires 1d;
    }
    # 上面就是需要添加的東西了
    # 對(duì)于滿足正則表達(dá)式 ^/upload/.*\.(png|css|jpg|apk)$ 的url請(qǐng)求仇让,
    # 將其根目錄定義為 /home/sr1/files
    # 文件的有效期為一天

    # 這里的效果是,對(duì)于滿足任意滿足”以/upload/“開頭躺翻,
    # 以png丧叽、css、jpg公你、apk結(jié)尾的url請(qǐng)求
    # 將到/home/sr1/files文件夾下去根據(jù)這個(gè)模式尋找文件踊淳,并提供給請(qǐng)求方
}

設(shè)置完上面的之后,重啟下Nginx服務(wù)器陕靠,就生效了迂尝。重啟的命令是:sudo service nginx restart

Nginx搭建PHP運(yùn)行環(huán)境

我的Linux系統(tǒng)是LinuxMint剪芥,一個(gè)基于Ubuntu的衍生版垄开,包管理工具當(dāng)然是apt-get咯。

因?yàn)閮H僅是需要PHP的運(yùn)行環(huán)境税肪,因此只需要簡單的下載一個(gè)php5-fpm包就搞定了溉躲,安裝命令為:sudo apt-get install php5-fpm榜田。

之后需要簡單的去掉Nginx配置文件里關(guān)于php的那幾行就好。如下:

# 同樣是在server的區(qū)塊里
location ~ .*\.php$ {
#     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; # 也有人說是取消這一行锻梳,但這個(gè)對(duì)我不管用
    fastcgi_index index.php; # 這一行的注釋也取消
    include fastcgi_params;  # 還有這行
}

總共只需要取消以上三行的注釋箭券,重啟Nginx服務(wù)器就好。但看注釋唱蒸,理論上安裝的是php-fpm邦鲫,應(yīng)該取消注釋的是:fastcgi_pass unix:/var/run/php5-fpm.sock這一行才對(duì),但我試了很多次都不成功神汹,最后查看了下php的配置文件/etc/php5/fpm/pool.d/www.conf庆捺,發(fā)現(xiàn)listen = 127.0.0.1:9000這行,才發(fā)現(xiàn)php-fpm模塊監(jiān)聽的地址是127.0.0.1:9000屁魏,改成了上面那樣就能成功運(yùn)行php程序了滔以。

使用PHP發(fā)起http請(qǐng)求

php發(fā)起網(wǎng)絡(luò)請(qǐng)求比較麻煩,因?yàn)閜hp本身并不具備這樣的庫氓拼,一般是借助curl這個(gè)工具來實(shí)現(xiàn)的你画。因此需要先安裝curl,以及php-curl開啟了這個(gè)擴(kuò)展才能使用桃漾。如果不確定自己的php環(huán)境是否能夠使用curl坏匪,可以寫一個(gè)php頁面,內(nèi)容為:<?php echo phpinfo(); ?>看一下輸出的信息里有沒有curl字段來判斷撬统。

如果沒有curl或php-curl适滓,就需要安裝下他們,命令同樣是sudo apt-get install 包名恋追,這里我遇到一個(gè)很奇葩的事:無法安裝php-curl凭迹!錯(cuò)誤信息是下載失敗,奇了怪了苦囱。我配置的源是網(wǎng)易的鏡像mirrors.163.com嗅绸,懷疑是網(wǎng)易的源的問題,改用了北京化工學(xué)院的源mirror.bit.edu.cn撕彤,執(zhí)行sudo apt-get update之后再安裝還是下載失敗鱼鸠。主動(dòng)去源那里找,發(fā)現(xiàn)目錄里是有這個(gè)包羹铅,但下載的時(shí)候就不行了瞧柔。最后只能祭出了法寶:百度網(wǎng)盤。使用網(wǎng)盤的離線下載功能睦裳,把php-curl的deb包下載下來造锅,輸入命令sudo dpk -i 本地文件安裝,搞定廉邑。

在這一步折騰了很久哥蔚,不知道這個(gè)問題到底是什么引起的倒谷。只能默默感概,在天朝當(dāng)程序員實(shí)在是太苦逼了糙箍。

配置完之后渤愁,就能使用curl來發(fā)起http請(qǐng)求了。下面是網(wǎng)上找到的一個(gè)函數(shù)深夯,實(shí)測(cè)挺好用的抖格。

function http($url, $method, $postfields = NULL) {
    $ci = curl_init();
    curl_setopt($ci, CURLOPT_URL, $url);
    curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 30); // 連接超時(shí)  
    curl_setopt($ci, CURLOPT_TIMEOUT, 30); // 執(zhí)行超時(shí)  
    curl_setopt($ci, CURLOPT_RETURNTRANSFER, true); // 文件流的形式返回,而不是>直接輸出  
    curl_setopt($ci, CURLOPT_ENCODING, "gzip");
    curl_setopt($ci, CURLOPT_HEADER, FALSE);
    if ('POST' == $method) {
        curl_setopt($ci, CURLOPT_POST, true); // post  
    }
    if (!empty($postfields)) {
        curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); // post數(shù)據(jù) 可為數(shù)組>咕晋、連接字串  
    }
    $response = curl_exec($ci);
    if (false) {
        echo "=====post data======rn";
        var_dump($postfields);

        echo '=====info=====' . "rn";
        print_r(curl_getinfo($ci));

        echo '=====$response=====' . "rn";
        print_r($response);
    }
    curl_close($ci);
    return $response;
}

支持post和get雹拄,根據(jù)需要傳入相應(yīng)的參數(shù)即可。

使用php支持文件上傳

使用php支持文件上傳其實(shí)很簡單掌呜,不知道為什么之前一直覺得難滓玖,導(dǎo)致每次想到要做文件上傳就心虛。下面是核心的代碼:

function saveUploadFile($saveToPath) {
    if ($_FILES["file"]["error"] > 0) {
        echo $_FILES["file"]["error"];
    } else {

        echo '文件名:' . $_FILES["file"]["name"];
        echo '文件類型:' . $_FILES["file"]["type"];
        echo '文件大兄式丁:' . ($_FILES["file"]["size"] / 1024) . 'kB';
        echo '文件臨時(shí)保存路徑:' . ($_FILES["file"]["tmp_name"];

        // 將文件保存到新的目錄下势篡,如果不保存的話,臨時(shí)保存的文件會(huì)在執(zhí)行結(jié)束后被自動(dòng)刪除
        if (move_uploaded_file($_FILES["file"]["tmp_name"], $saveToPath.$_FILES["file"]["name"])) {
            echo '保存至:' . $saveToPath.$_FILES["file"]["name"];
        } else {
            echo '保存過程中出現(xiàn)錯(cuò)誤模暗,保存失敗';
        }
    }
}

這里可能會(huì)因?yàn)槲募蠖蟼魇〗疲鰜淼腻e(cuò)誤是413 Request Entity Too Large,這里需要改下Nginx和php的相關(guān)配置兑宇,參考這個(gè)的指南《Nginx: 413 Request Entity Too Large Error and Solution》改下就好了碍侦。

That's all, but not ALL.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市顾孽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌比规,老刑警劉巖若厚,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蜒什,居然都是意外死亡测秸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門灾常,熙熙樓的掌柜王于貴愁眉苦臉地迎上來霎冯,“玉大人,你說我怎么就攤上這事钞瀑∩蜃玻” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵雕什,是天一觀的道長缠俺。 經(jīng)常有香客問我显晶,道長,這世上最難降的妖魔是什么壹士? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任磷雇,我火速辦了婚禮,結(jié)果婚禮上躏救,老公的妹妹穿的比我還像新娘吱瘩。我一直安慰自己线婚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著盆色,像睡著了一般。 火紅的嫁衣襯著肌膚如雪腹缩。 梳的紋絲不亂的頭發(fā)上旨剥,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音凡泣,去河邊找鬼枉疼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛鞋拟,可吹牛的內(nèi)容都是我干的骂维。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼贺纲,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼航闺!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起猴誊,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤潦刃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后懈叹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乖杠,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年澄成,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了胧洒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡墨状,死狀恐怖卫漫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情肾砂,我是刑警寧澤列赎,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站镐确,受9級(jí)特大地震影響粥谬,放射性物質(zhì)發(fā)生泄漏肛根。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一漏策、第九天 我趴在偏房一處隱蔽的房頂上張望派哲。 院中可真熱鬧,春花似錦掺喻、人聲如沸芭届。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽褂乍。三九已至,卻和暖如春即硼,著一層夾襖步出監(jiān)牢的瞬間逃片,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國打工只酥, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留褥实,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓裂允,卻偏偏與公主長得像损离,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子绝编,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容