LNMP的搭建與原理

常見的web框架結構;
例如:lnmp和;amp
L=LINUX N=NGINX A=APACHE P=php T=Tomcatphp

lnmp的原理html

在LNMP組合工做時,首先是用戶經過瀏覽器輸入域名請求Nginx Web服務,若是請求是靜態資源,則由Nginx解析返回給用戶;若是是動態請求(.php結尾),那麼Nginx就會把它經過FastCGI接口(生產經常使用方法)發送給PHP引擎服務(FastCGI進程php-fpm)進行解析,若是這個動態請求要讀取數據庫數據,那麼PHP就會繼續向後請求MySQL數據庫,以讀取須要的數據,並最終經過Nginx服務把獲取的數據返回給用戶,這就是LNMP環境的基本請求順序流程。這個請求流程是企業使用LNMP環境的經常使用流程。mysql

CGI的全稱爲「通用網關接口」(Common Gateway Interface),爲HTTP服務器與其餘機器上的程序服務通訊交流的一種工具,CGI程序須運行在網絡服務器上。linux

傳統CGI接口方式的主要缺點是性能較差,由於每次HTTP服務器遇到動態程序時都須要從新啓動解析器來執行解析,以後結果纔會被返回給HTTP服務器。這在處理高併發訪問時幾乎是不可用的,所以就誕生了FastCGI。另外,傳統的CGI接口方式安全性也不好,故而如今已經不多被使用了。nginx

什麼是fastcgiweb

FastCGI是一個可伸縮的,高速地在HTTP服務器和動態腳本語言間通訊的接口(在Linux下,FastCGI接口即爲socket,這個socket能夠是文件socket,也能夠是IP socket),主要優勢是把動態語言和HTTP服務器分離出來。多數流行的HTTP服務器都支持FastCGI,包括Apache,Nginx和Lighttpd等。
同時,FastCGI也被許多腳本語言所支持,例如當前比較流程的腳本語言PHP。FastCGI接口採用的是C/S架構,它能夠將HTTP服務器和腳本解析服務器分開,同時還能在腳本解析服務器上啓動一個或多個腳原本解析守護進程。當HTTP服務器遇到動態程序時,能夠將其直接交付給FastCGI進程來執行,而後將獲得的結果返回給瀏覽器。這種方式可讓HTTP服務器專注地處理靜態請求,或者將動態腳本服務器的結果返回給客戶端,這在很大程度上提升了整個應用系統的性能。sql

fastcgi的特色。數據庫

  • HTTP服務器和動態腳本語言間通訊的接口或工具。
  • 可把動態語言解析和HTTP服務器分離開。
  • Nginx,Apache,Lighttpd,以及多數動態語言都支持FastCGI。
  • FastCGI接口方式採用C/S結構,分爲客戶端(HTTP服務器)和服務器端(動態語言解析服務器)
  • PHP動態語言服務器端能夠啓動多個FastCGI的守護進程(例如php-fpm(fcgi process mangement))
  • HTTP服務器經過(例如Nginx fastcgi_pass)FastCGI客戶端和動態語言FastCGI服務器端通訊(例如php-fpm)

Nginx fastcgi的運行原理vim

Nginx不支持對外部動態程序的直接調用或者解析,全部的外部程序(包括PHP)必須經過FastCGI接口來調用。FastCGI接口在Linux下是socket,爲了調用CGI程序,還須要一個FastCGI的wrapper(能夠理解爲用於啓動另外一個程序的程序),這個wrappper綁定在某個固定的socket上,如端口或文件socket。當Nginx將CGI請求發送給這個socket的時候,經過FastCGI接口,wrapper接收到請求,而後派生出一個新的線程,這個線程調用解釋器或外部程序處理腳原本讀取返回的數據;接着,wrapper再將返回的數據經過FastCGI接口,沿着固定的socket傳遞給Nginx;最後,Nginx將返回的數據發送給客戶端,這就是Nginx+FastCGI的整個運做過程。瀏覽器

開始搭建

首先咱們要有mysql,和Nginx。(能夠查看Nginx的搭建,和mysql的搭建博客)

咱們要搭建php

具體搭建PHP的步驟

  1. 先安裝php的支持包
    [root@localhost ~]# yum -y install zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel
    [root@localhost ~]# yum -y install freetype-devel libpng-devel gd libcurl-devel libxslt-devel
    • [x] :每一個lib通常都會存在對應的以「*-devel」命名的包,安裝lib對應的-devel包後,對應的lib包就會自動安裝好,例如安裝gd-devel時就會安裝gd。
    • [x] :這些lib庫不是必須安裝的,可是目前的企業環境下通常都須要安裝。不然,PHP程序運行時會出現問題,例如驗證碼沒法顯示等。

             安裝完的結果以下

[root@localhost ~]# rpm -qa zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel
zlib-devel-1.2.3-29.el6.x86_64
libxml2-devel-2.7.6-14.el6.x86_64
libjpeg-turbo-devel-1.2.1-1.el6.x86_64
#這裏僅缺乏libiconv-devel包
缺乏的包也能夠下包安裝
[root@localhost ~]# wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz [root@localhost ~]# ls anaconda-ks.cfg install.log libiconv-1.14.tar.gz nginx-1.10.2.tar.gz index.html install.log.syslog mysql-5.5.32-linux2.6-x86_64.tar.gz [root@localhost ~]# tar xf libiconv-1.14.tar.gz -C /usr/src/ [root@localhost ~]# cd /usr/src/libiconv-1.14/ [root@localhost libiconv-1.14]# ./configure --prefix=/usr/local/libiconv && make && make install

 

   

缺乏的libiconv的包咱們要從雲yum上安裝,若是不安裝會出現後續的沒法安裝。

安裝libiconv的命令
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo yum -y clean all yum makecache yum -y install libmcrypt-devel

咱們還須要安裝3個庫,注意都要在雲yum上安裝

在雲yum上安裝libmcrypt庫
yum -y install libmcrypt-devel
 安裝mhash加密擴展庫
         yum -y install mhash

 安裝mcrvpt加密擴展庫
      yum -y install mcrypt

開始安裝php服務

獲取php的安裝包

wget http://cn2.php.net/get/php-5.3.28.tar.gz/from/this/mirror

解壓並配置,初始化php

[root@localhost ~]# tar xf php-5.3.28.tar.gz -C /usr/src/
[root@localhost ~]# cd /usr/src/php-5.3.28/
[root@localhost php-5.3.28]# ./configure \
> --prefix=/usr/local/php5.3.28 \ (#註釋這裏是幾的版本寫幾的後綴就能夠)
> --with-mysql=/usr/local/mysql \  (#註釋如今是php和數據庫在一臺服務器上,若是不在一臺服務器上須要改成--with-mysql=mysqlnd)
> --with-iconv-dir=/usr/local/libiconv \
> --with-freetype-dir \
> --with-jpeg-dir \
> --with-png-dir \
> --with-zlib \
> --with-libxml-dir=/usr \
> --enable-xml \
> --disable-rpath \
> --enable-safe-mode \
> --enable-bcmath \
> --enable-shmop \
> --enable-sysvsem \
> --enable-inline-optimization \
> --with-curl \
> --with-curlwrappers \
> --enable-mbregex \
> --enable-fpm \
> --enable-mbstring \
> --with-mcrypt \
> --with-gd \
> --enable-gd-native-ttf \
> --with-openssl \
> --with-mhash \
> --enable-pcntl \
> --enable-sockets \
> --with-xmlrpc \
> --enable-zip \
> --enable-soap \
> --enable-short-tags \
> --enable-zend-multibyte \
> --enable-static \
> --with-xsl \
> --with-fpm-user=www \ (#註釋nginx表示指定PHP-FPM進程管理的用戶爲www,此處要和Nginx服務的程序用戶統一)
> --with-fpm-group=www \ (#註釋表示指定PHP-FPM進程管理的組爲www,此處要和Nginx服務的程序用戶組統一。)
> --enable-ftp (#註釋表示激活PHP-FPM方式服務,即以FastCGIF方式運行PHP服務。)

#特別強調:上述每行結尾的換行符反斜線(\)以後不能再有任何字符包括空格

成功了會顯示以下的頁面

開始編譯php

[root@localhost php-5.3.28]# cd /usr/src/php-5.3.2.8
[root@localhost php-5.3.28]# ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64/
[root@localhost php-5.3.28]# touch ext/phar/phar.phar
[root@localhost php-5.3.28]# make

make編譯成功之後的顯示字樣

#make最後的正確提示
Build complete.
Don't forget to run 'make test'.

而後make install 編譯

[root@localhost php-5.3.28]# make install

開始配置php的引擎文件php.ini

咱們要設置軟鏈接

[root@localhost ~]# ln -s /usr/local/php5.3.28/ /usr/local/php
[root@localhost ~]# ls -l /usr/local/php
lrwxrwxrwx. 1 root root 21 Jul 14 13:06 /usr/local/php -> /usr/local/php5.3.28/

查看配置文件的模板,一個是生產的,一個是測試的

[root@localhost ~]# cd /usr/src/php-5.3.28/
[root@localhost php-5.3.28]# ls php.ini*
php.ini-development  php.ini-production
兩個文件有差別可經過diff或vimdiff命令比較

複製生產的配置文件到PHP默認目錄,並更改文件名稱爲php.ini(php的解析器)

[root@localhost php-5.3.28]# cp php.ini-production /usr/local/php/lib/php.ini
[root@localhost php-5.3.28]# ls -l /usr/local/php/lib/php.ini 
-rw-r--r--. 1 root root 69627 Jul 14 13:25 /usr/local/php/lib/php.ini

配置php的配置文件php-fpm.com

[root@localhost php-5.3.28]# cd /usr/local/php/etc/
[root@localhost etc]# ls
pear.conf  php-fpm.conf.default
[root@localhost etc]# cp php-fpm.conf.default php-fpm.conf

接下來能夠啓動php服務了

[root@localhost etc]# /usr/local/php/sbin/php-fpm

啓動完了之後就是修改Nginx的配置,創建網頁。

[root@localhost etc]# cd /usr/local/nginx/conf/
[root@localhost conf]# cat extra/blog.conf 
    server {
        listen       80;
        server_name  blog.yunjisuan.com;
        location / {
            root   /var/www/html/blogcom;  (#註釋,靜態的網頁首頁)
            index  index.html index.htm;
        }
        location ~ .*\.(php|php5)?$ {(#註釋,動態的網頁)
            root    /var/www/html/blogcom;(#註釋,動態和靜態要在同一個目錄下。)
            fastcgi_pass    127.0.0.1:9000;(#動態推送到fastcgi的參數,若是是兩臺服務器要以ip的形式寫)
            fastcgi_index   index.php;(#動態的網頁注意)
            include     fastcgi.conf;(#應用參數)
        }
    }

啓動Nginx

[root@localhost conf]# /usr/local/nginx/sbin/nginx -t  (此步在生產環境很關鍵,如不提早檢查語法,重啓後發現語法錯誤會致使Nginx沒法提供服務,,給用戶訪問體驗帶來很差的影響。)
nginx: the configuration file /usr/local/nginx-1.10.2//conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx-1.10.2//conf/nginx.conf test is successful
[root@localhost conf]# /usr/local/nginx/sbin/nginx -s reload

測試lnmp的環境

測試php解析是否正常

[root@localhost conf]# cd /var/www/html/blogcom/
[root@localhost blogcom]# echo "<?php phpinfo(); ?>" >test_info.php
[root@localhost blogcom]# cat test_info.php 
<?php phpinfo(); ?>

調整映射,linux要調整,Windows也要調整,在linux上還要映射下主機名,

echo "192.168.200.129 lnmp blog.yunjisuan.com" >> /etc/hosts

 在瀏覽器上輸入測試的url

http://blog.yunjisuan.com/test_info.php

會出現如下的的頁面

開始測試php和mysql的鏈接 

編輯如下的內容

[root@localhost blogcom]# cat test_mysql.php 
<?php
    //$link_id=mysql_connect('主機名','用戶','密碼');
    $link_id=mysql_connect('localhost','root','123123');
    if($link_id){
        echo "mysql successful by nange !";
    }else{
        echo mysql_error();
    }
?>

用php測試下

php test_mysql.php

會輸出成功的字樣

 這樣咱們的lnmp環境就搭建好了,尚未優化。

咱們開始WordPress

wordPress 是一套利用PHP語言和MySQL數據庫開發的開源免費的blog(博客,網站)程序,用戶能夠在支持PHP環境和MySQL數據庫的服務器上創建blog站點。它的功能很是強大,擁有衆多插件,易於擴充功能。其安裝和使用也都很是方便。目前WordPress已經成爲搭建blog平臺的主流,不少發佈平臺都是根據WordPress二次開發的,若是你也想像他們同樣擁有本身的blog,可購買網上的域名及空間,而後搭建LNMP環境,部署WordPress程序後就能夠輕鬆成就本身的夢想了。

咱們要先登陸數據庫,建立一個庫

mysql -uroot -p密碼
mysql> create database wordpress;   #建立一個數據庫,名字爲wordpress
Query OK, 1 row affected (0.00 sec)

數據庫要受權一個用戶

mysql> grant all on wordpress.* to wordpress@'localhost' identified by '123123';                    #localhost爲客戶端地址
Query OK, 0 rows affected (0.00 sec)

添加Nginx一個主頁,在配置文件裏而後從起

root@localhost extra]# cat blog.conf 
    server {
        listen       80;
        server_name  blog.yunjisuan.com;
        location / {
            root   /var/www/html/blogcom;
            index  index.php index.html index.htm;  #補充一個首頁文件index.php
        }
        location ~ .*\.(php|php5)?$ {
            root    /var/www/html/blogcom;
            fastcgi_pass    127.0.0.1:9000;
            fastcgi_index   index.php;
            include     fastcgi.conf;
        }
    }

[root@localhost extra]# /usr/local/nginx/sbin/nginx -s reload

解壓WordPress的壓縮包,並將這個目錄移動答Nginx主頁目錄下,在移動以前要狀況Nginx的主頁目錄

 [root@localhost]#tar xf wordpress-4.7.4-zh_CN.tar.gz #解壓
[root@localhost blogcom]# rm -f index.html test_info.php  test_mysql.php #刪除無用文件,注意位置
[root@localhost blogcom]# mv wordpress/* .  #把目錄裏的內容移動到blogcom根目錄下
[root@localhost blogcom]# ls -l  #完整的blog程序內容
total 192
-rw-r--r--.  1 nobody 65534   418 Sep 24  2013 index.php
-rw-r--r--.  1 nobody 65534 19935 Jan  2  2017 license.txt
-rw-r--r--.  1 nobody 65534  6956 Apr 23 09:24 readme.html
drwxr-xr-x.  2 nobody 65534  4096 Jul 14 16:04 wordpress
-rw-r--r--.  1 nobody 65534  5447 Sep 27  2016 wp-activate.php
drwxr-xr-x.  9 nobody 65534  4096 Apr 23 09:24 wp-admin
-rw-r--r--.  1 nobody 65534   364 Dec 19  2015 wp-blog-header.php
-rw-r--r--.  1 nobody 65534  1627 Aug 29  2016 wp-comments-post.php
-rw-r--r--.  1 nobody 65534  2930 Apr 23 09:24 wp-config-sample.php
drwxr-xr-x.  5 nobody 65534  4096 Apr 23 09:24 wp-content
-rw-r--r--.  1 nobody 65534  3286 May 24  2015 wp-cron.php
drwxr-xr-x. 18 nobody 65534 12288 Apr 23 09:24 wp-includes
-rw-r--r--.  1 nobody 65534  2422 Nov 20  2016 wp-links-opml.php
-rw-r--r--.  1 nobody 65534  3301 Oct 24  2016 wp-load.php
-rw-r--r--.  1 nobody 65534 33939 Nov 20  2016 wp-login.php
-rw-r--r--.  1 nobody 65534  8048 Jan 11  2017 wp-mail.php
-rw-r--r--.  1 nobody 65534 16255 Apr  6 14:23 wp-settings.php
-rw-r--r--.  1 nobody 65534 29896 Oct 19  2016 wp-signup.php
-rw-r--r--.  1 nobody 65534  4513 Oct 14  2016 wp-trackback.php
-rw-r--r--.  1 nobody 65534  3065 Aug 31  2016 xmlrpc.php
root@localhost blogcom]# chown -R www.www ../blogcom/ #受權用戶訪問
[root@localhost blogcom]# ls -l  #最終博客目錄和權限,要Nginx,php的用戶同樣。
total 192
-rw-r--r--.  1 www www   418 Sep 24  2013 index.php
-rw-r--r--.  1 www www 19935 Jan  2  2017 license.txt
-rw-r--r--.  1 www www  6956 Apr 23 09:24 readme.html
drwxr-xr-x.  2 www www  4096 Jul 14 16:04 wordpress
-rw-r--r--.  1 www www  5447 Sep 27  2016 wp-activate.php
drwxr-xr-x.  9 www www  4096 Apr 23 09:24 wp-admin
-rw-r--r--.  1 www www   364 Dec 19  2015 wp-blog-header.php
-rw-r--r--.  1 www www  1627 Aug 29  2016 wp-comments-post.php
-rw-r--r--.  1 www www  2930 Apr 23 09:24 wp-config-sample.php
drwxr-xr-x.  5 www www  4096 Apr 23 09:24 wp-content
-rw-r--r--.  1 www www  3286 May 24  2015 wp-cron.php
drwxr-xr-x. 18 www www 12288 Apr 23 09:24 wp-includes
-rw-r--r--.  1 www www  2422 Nov 20  2016 wp-links-opml.php
-rw-r--r--.  1 www www  3301 Oct 24  2016 wp-load.php
-rw-r--r--.  1 www www 33939 Nov 20  2016 wp-login.php
-rw-r--r--.  1 www www  8048 Jan 11  2017 wp-mail.php
-rw-r--r--.  1 www www 16255 Apr  6 14:23 wp-settings.php
-rw-r--r--.  1 www www 29896 Oct 19  2016 wp-signup.php
-rw-r--r--.  1 www www  4513 Oct 14  2016 wp-trackback.php
-rw-r--r--.  1 www www  3065 Aug 31  2016 xmlrpc.php

開始安裝博客。

在瀏覽器上上輸入映射的網址

打開瀏覽器輸入blog.yunjisuan.com(提早作好hosts或DNS解析),回車後,出現下圖:

而後開始按着步驟來寫

而後設置本身的登錄密碼,和你的博客名字,點擊登錄就能夠

 

 

實現url靜態化

實現此功能時,首先要在WordPress後臺依次單擊設置--->固定連接--->自定義結構,而後輸入下面的代碼,並保存更改。

 

 

/archives/%post_id%.html

#說明:%post_id%是數據庫對應博文內容的惟一ID,例如423

而後修改Nginx的server

[root@localhost extra]# cat blog.conf 
    server {
        listen       80;
        server_name  blog.yunjisuan.com;
    root    /var/www/html/blogcom;
        location / {
                index  index.php index.html index.htm;
        if (-f $request_filename/index.html){
            rewrite (.*) $1/index.html break;
        }
        if (-f $request_filename/index.php){
            rewrite (.*) $1/index.php;
        }
        if (!-f $request_filename){
            rewrite (.*) /index.php; } }
    location ~ .*\.(php|php5)?$ {
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_index   index.php;
        include     fastcgi.conf;
    }
    }

最後檢查重啓Nginx就能夠了

[root@localhost extra]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx-1.10.2//conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx-1.10.2//conf/nginx.conf test is successful
[root@localhost extra]# /usr/local/nginx/sbin/nginx -s reload

在輸入網址就能夠了

相關文章
相關標籤/搜索