最近須要使用Ubuntu做爲服務器搭建Lnmp環境,順便將操做過程寫下來,與你們分享。若有不足之處,歡迎你們提出不一樣意見。(本文默認讀者已經熟悉相關linux命令的使用,好比建立文件和文件夾,編輯文件的命令等。)php
操做系統:Ubuntu 15.10mysql
本系統是新裝的,因此沒有Nginx、mysql和php環境。若是以前有裝過這些環境的還得先把以前的軟件先卸載。linux
1、安裝MySQLnginx
安裝MySQL:sudo apt-get install mysql-server mysql-client sql
中間須要你輸入root帳戶的密碼,按要求操做就能夠了。json
mysql服務的操做:ubuntu
service mysql start | restart | stop(啓動|重啓|中止mysql服務)瀏覽器
/etc/init.d/mysql start服務器
/etc/init.d/mysql restartphp7
/etc/init.d/mysql stop
卸載mysql:
刪除mysql前 先刪除一下 /var/lib/mysql 還有 /etc/mysql
sudo rm /var/lib/mysql/ -R
sudo rm /etc/mysql/ -R
sudo apt-get autoremove mysql* --purge
sudo apt-get remove apparmor #慎用,可能會刪除掉其餘軟件
所有刪除以後再執行 apt-get install mysql-server mysql-client
2、安裝Nginx
直接輸入命令:sudo apt-get install nginx
在本地瀏覽器輸入127.0.0.1,出現如下頁面說明安裝成。
nginx服務的操做:
sudo service nginx start | restart | stop(啓動|重啓|中止nginx服務)
/etc/init.d/nginx start
/etc/init.d/nginx restart
/etc/init.d/nginx stop
nginx也有一些頗有用的指令,例如:
sudo nginx -t #檢查配置文件
sudo nginx -s reload #平滑重啓,修改完配置後使配置生效
卸載nginx:
sudo apt-get remove nginx nginx-common # 卸載刪除除了配置文件之外的全部文件。
sudo apt-get purge nginx nginx-common # 卸載全部東東,包括刪除配置文件。
sudo apt-get autoremove # 在上面命令結束後執行,主要是卸載刪除Nginx的再也不被使用的依賴包。
sudo apt-get remove nginx-full nginx-common #卸載刪除兩個主要的包。
3、安裝PHP5
(在ubuntu16以上版本安裝php7也是同理,只需把php5改爲php7.0,如sudo apt-get install php7.0-cli php7.0-fpm ...)
安裝php:
sudo apt-get install php5-cli #安裝php的cli工具
sudo apt-get install php5-fpm #安裝php的cgi工具
安裝完還要安裝須要用到的拓展,好比:
php5-mysql、php5-gd、php5-json、php5-curl……
具體可使用命令sudo apt-cache search php5查看拓展信息。
而後使用命令sudo apt-get install php5-mysql php5-gd php5-json php5-curl 進行拓展安裝。
php服務的操做:
service php5-fpm start | restart | stop(啓動|重啓|中止php5-fpm服務)
service php5-fpm status
/etc/init.d/php5-fpm start
/etc/init.d/php5-fpm restart
/etc/init.d/php5-fpm stop
卸載php:
sudo rm /var/lib/php5/ -R
sudo rm /etc/php5/ -R
sudo apt-get autoremove php* --purge
安裝完寫個test.php文件測試下,執行結果如圖:
<?php
$a="php test\n";
echo $a;
?>
php安裝成功!
安裝過程到這裏算是完成,接下來就是配置讓Nginx作php5-fpm的代理了。(不懂php5-fpm是什麼鬼的同窗就本身去搜索吧,後面還有fastcgi等概念也都應該瞭解下。大神請無視~)
4、配置nginx作代理
進入/etc/nginx目錄,打開nginx.conf配置文件能夠在http模塊底部看到一行:
include /etc/nginx/sites-enabled/*;
所以咱們能夠在/etc/nginx/sites-enables目錄下新建個配置文件test.conf,內容以下:
其中設置fastcgi_pass 爲127.0.0.1:9000,那麼還須要到/etc/php5/fpm/pool.d/www.conf文件中找到:
listen = /var/run/php5-fpm.sock
將其註釋,在下方新增一行:
listen = 127.0.0.1:9000
保存退出後重啓php5-fpm:service php5-fpm restart
給test.conf中配置的是8080 端口,因此還要配置防火牆開啓8080端口(後面多站點的配置端口同理):sudo ufw allow 8080
在配置的站點的根目錄也就是說/var/www/test下新建文件index.php:
<?php
Phpinfo();
?>
配置完在本地瀏覽器輸入:127.0.0.1:8080 居然出現空白頁面,找到/etc/nginx/fastcgi_params,也就是前面test.conf文件中include fastcgi_params的文件,在其頭部新增一行:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;#設置腳本文件請求的路徑。
保存後重啓nginx或者使用命令:nginx –s reload 從新加載配置文件。到瀏覽器刷新,成功
5、不一樣端口多站點配置
像第一個站點同樣先在/var/www目錄下新建兩個文件test2和test3分別做爲另外兩個站點的目錄。
新建測試文件/var/www/test2/index.php:
<?php
$test=」test2 site \n」;
echo $test;
?>
再新建測試文件/var/www/test3/index.php:
<?php
$test=」test3 site \n」;
echo $test;
?>
而後到/etc/nginx/sites-enabled目錄下新建兩個站點配置文件,像剛剛新建的test.conf同樣。配置文件:/etc/nginx/sites-enabled/test2.conf
配置文件:/etc/nginx/sites-enabled/test3.conf
配置完,sudo nginx –s reload從新加載配置文件。防火牆開啓相應8082和8083端口。
測試站點test2:本地瀏覽器輸入:127.0.0.1:8082
測試站點test3:本地瀏覽器輸入:127.0.0.1:8083
6、80端口作多站點配置
以上是不一樣端口多個站點配置,下面咱們看看在80端口如何作多站點配置
上面的操做已經實現了不一樣端口多個站點的配置,如今修改/etc/nginx/sites-enable/test2.conf和/etc/nginx/sites-enable/test3.conf兩個配置文件,將監聽的端口所有改成80端口。站點目錄不變:
改完從新加載nginx配置文件
使用剛剛在配置文件裏設置的server_name來訪問,也就是test2.com和test3.com,還得修改host文件。打開/etc/host文件,新增兩行:
127.0.0.1 test2.com
127.0.0.1 test3.com
打開本地瀏覽器分別輸入test2.com和test3.com查看結果:
配置成功!
總結:
一、 每次修改完nginx配置文件以後都須要讓從新加載配置文件,也能夠重啓。php5-fpm也同樣。
二、本文雖然講解如何搭建環境,和配置環境,但對於相應環境的運行原理並無作過多講討論。因此,要想真正熟悉相應環境的運行原理,還得下點功夫去了解相應的知識點。例如fastcgi_params文件的做用,nginx配置文件中每一個模塊的功能,和php5-fpm的機制等。
三、安裝配置過程當中不免會出現一些意想不到的問題,這種狀況下要學會分析日誌定位問題。日誌通常都放在/var/log目錄下,好比剛剛配置第一個站點是訪問遇到空白頁面,可是看/var/log/nginx/access.log日誌卻顯示狀態碼爲200,這說明nginx是收到請求的,只是沒有把請求的內容發給php5-fpm,因此定位到問題是出如今nginx和php5-fpm的通訊上。
四、若是要將多個域名指定到同一個項目,只需在nginx中該項目的對應的配置文件的server_name加上多個域名。例如:server_name test.com,test2.com; 這樣,訪問test.com和訪問test2.com都會定向到該項目。也可使用通配符來匹配多個域名的狀況。例如:server_name *.main.com; 這樣,一級域名main.com全部的子域名均可以定向到該項目。