剛開始學習php的時候是在wamp環境下開發的,後來才接觸到 lnmp 環境當時安裝lnmp是按照一大長篇文檔一步步的編譯安裝,當時是真不知道是在做什麼啊!腦袋一片空白~~,只知道按照那麼長的一篇文檔一步步的來做就能實現lnmp的搭建。最近工作閑暇之餘又想起來了這個悲慘的事情,然後我就想能不能不看文 ...
剛開始學習php的時候是在wamp環境下開發的,後來才接觸到 lnmp 環境當時安裝lnmp是按照一大長篇文檔一步步的編譯安裝,當時是真不知道是在做什麼啊!腦袋一片空白~~,只知道按照那麼長的一篇文檔一步步的來做就能實現lnmp的搭建。最近工作閑暇之餘又想起來了這個悲慘的事情,然後我就想能不能不看文檔就把lnmp環境搭建起來呢(當然我知道有一鍵安裝腳本這個東東,我們暫時把它忽略因為它真的是太簡單啦)?當時我的想法是反正 l(linux)+ n(nginx)+ m(mysql)+ p(php)設計到的東西也就這四種,那我使用 apt-get (ubuntu 系統為例)直接安裝不就好啦,至於每個軟體之間的通訊那就再另想辦法了,無非是通過什麼配置或者驅動什麼的連接起來的,於是我變開始了我的折騰之旅。。。。
所謂實踐是要以理論來做基礎的,先上一張我自己理解的圖鎮樓
原理嘛就在樓上我覺得我畫的還是挺通俗易懂的~~
在lnmp中關鍵性的就兩點:
1.nginx接收客戶端發來的請求後找到對應的執行腳本文件再用php-fpm來解釋執行腳本文件並將結果返回給客戶端
2.php通過php擴展pdo、mysql、或者mysqli來操作mysql資料庫實現對數據的存儲
只要將以上兩點能夠實現那麼基礎的lnmp環境也就搭建好啦!
應廣大網友的要求下麵我要開始我的表演啦,啊不,是研究~~
首先交代下環境 騰訊雲伺服器(ubuntu 16.4 系統) 這樣的話lnmp中的 l 就有啦
接下來將 nginx 、mysql 、php先安裝好。依次執行如下命令
sudo apt-get update sudo apt-get install nginx sudo apt-get install php sudo apt-get install mysql-server
安裝好後如圖:
下麵我們先實現下 nginx 和 php的通訊,這裡我們先要明確下nginx的配置文件在什麼地方,這裡可以使用以下命令找一下
sudo find / -name nginx.conf
找到文件 /etc/nginx/nginx.conf 我們打開該文件修改下配置添加如下代碼:
server { listen 8200; server_name localhost; location / { root /usr/share/nginx/html; #填寫項目的根目錄 index index.php index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location ~ \.php$ { root /usr/share/nginx/html; #填寫項目的根目錄 fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
訪問 8200 埠會看到nginx的經典頁面,但是這時我們訪問的是靜態頁面也就是html頁面而不是PHP頁面。不過配置中已經將php的相關配置寫好啦,我們先將 nginx與php之間通訊需要使用的php-fpm安裝上之後再講如何配置。 這裡還是使用 apt-get 工具
sudo apt-get install php-fpm
安裝好之後找到 php-fpm的配置文件 "/etc/php/7.0/fpm/pool.d/www.conf" ,打開該文件我們會看到這條語句
listen = /run/php/php7.0-fpm.sock
這裡監聽的 listen 值 與 nginx.conf 中 fastcgi_pass 的值是相對應的
www.conf(php-fpm) 中的listen值 | nginx.conf 中的fastcgi_pass |
/run/php/php7.0-fpm.sock |
unix:/run/php/php7.0-fpm.sock |
9000 | 127.0.0.1:9000 |
這裡我們使用第一種方式 並且編寫一個php文件查看是否配置成功(不要忘了執行php7.0-fpm將php-fpm運行起來),如圖所示,說明我們現在將第一個問題解決啦實現了php與nginx之間的通訊
開始解決第二個問題:如何將php 與 mysql通訊這裡我們使用 php_pdo這個擴展實現操作資料庫,在上面的截圖我們可以看到已經安裝了php擴展,那麼我們來寫一個pdo連接的程式來測試下;
<?php //連接資料庫 $dsn="mysql:dbname=mysql;host=127.0.0.1"; //資料庫的用戶名 $user="root"; //資料庫的密碼 $password="123456"; //生成PDO對象 $object = new PDO($dsn,$user,$password); //執行添加 $sql="select * from user"; $result = $object->query($sql); echo "一共從表中獲取到".$result->rowCount()." 條記錄:<br>"; foreach($result as $row){ echo $row['User']."<br>"; }
然後直接訪問 8200 介面,然後。。。。崩潰啦,返回500錯誤,我們看下nginx的報錯日誌
PHP message: PHP Fatal error: Uncaught PDOException: could not find driver in /usr/share/nginx/html/index.php:9
簡單的翻譯下就是沒有找到 mysql 驅動。。。開始看見這個報錯的時候我是一臉矇蔽。。什麼驅動?不是有pdo就可以了嗎??? 圖樣圖森破啊,普及下mysql驅動的事情
php中內置的mysql資料庫連接驅動mysqlnd簡介及mysqlnd的配置安裝方式
這裡主要包括 mysqlnd 和 libmysql 兩種驅動但是我們選擇第一種,什麼?你問為什麼?簡單啊!按照慣例執行
sudo apt-get install php-mysqlnd
再來看下剛纔的頁面
好啦。到這裡我們的lnmp環境就搭建完啦。全程只是用了apt-get 這個工具,是不是很爽~~
當然這隻是適用於搭建簡單的lnmp環境如何需要編譯其他模塊還是建議使用編譯安裝的方式,找個時間將編譯安裝的的各個細節再研究下~~~,生命不息學習不止!