綜合架構(gòu)之網(wǎng)站服務(wù)-LNMP搭建博客

1.掌握LNMP的安裝步驟
2.LNMP架構(gòu)訪問原理


網(wǎng)站架構(gòu)組成

分類:LNMP(php) (LNMT(tomcat) LNMP(python)
組成部分及注意要點(diǎn)

  • L-linux (安全服務(wù)是否關(guān)閉 /tmp 1777 --mysql服務(wù))
  • N-nginx location root index rewrite
  • M-mysql mariadb
  • P-php 解析php動態(tài)請求

網(wǎng)站架構(gòu)LNMP部署過程

mariadb部署:
第一個歷程: 安裝軟件

    yum install -y mariadb mariadb-server

第二個歷程: 啟動程序服務(wù)

systemctl start mariadb

php如何部署:
第一個歷程: 清空系統(tǒng)中php程序

yum remove php-mysql php php-fpm php-common

第二個歷程: 配置php下載源

不配置下載源的時候可能去官網(wǎng)下載 如果下載的是最新版本,可能會出現(xiàn)和nginx和數(shù)據(jù)庫兼容性出現(xiàn)問題。

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

第三個歷程: 安裝php7.1相關(guān)軟件

    yum install -y php71w php71w-cli php71w-common php71w-devel php71w-embedded  php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache  php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb    

LNMP工作原理

  • 用戶訪問網(wǎng)站首先會通過負(fù)載均衡,如果是靜態(tài)頁面,通過負(fù)載再到達(dá)nginx,直接返回靜態(tài)頁面。
  • 如果訪問的是動態(tài)頁面,nginx無法處理會判斷是否為.php的為文件,如果是,就是動態(tài)請求。通過fastcgi_pass接口傳給php進(jìn)行處理。
  • php通過php-fpm進(jìn)行接收nginx傳遞過來的動態(tài)文件,如果PHP程序自己能處理,則處理后返回給nginx,nginx再返還給用戶。
  • 如果php無法處理,通過PHP解析器解轉(zhuǎn)化為sql語句交給mysql進(jìn)行處理。

NGINX------>PHP---------->mysql


補(bǔ)充:檢查下yum源查看是否有相應(yīng)的源,如果沒有,則還是無法安裝

[root@nfs001 ~]# ll /etc/yum.repos.d/
total 60
-rw-r--r--. 1 root root  664 May 11  2018 epel.repo
-rw-r--r--  1 root root  951 Oct  3  2017 epel.repo.rpmnew
-rw-r--r--  1 root root 1050 Oct  3  2017 epel-testing.repo
-rw-r--r--  1 root root  963 Oct  9  2014 webtatic-archive.repo
-rw-r--r--  1 root root  865 Oct  9  2014 webtatic.repo
-rw-r--r--  1 root root  963 Oct  9  2014 webtatic-testing.repo

LNMP架構(gòu)配置過程

mariadb數(shù)據(jù)庫配置:
第一個歷程: 修改數(shù)據(jù)庫密碼信息

mysqladmin -uroot password "oldboy123"  --- 設(shè)置密碼 
mysql -uroot -poldboy123

數(shù)據(jù)庫默認(rèn)沒有密碼。

php程序配置:
第一個歷程: 修改配置文件

vim /etc/php-fpm.d/www.conf

8(行)user = www --- 需要將php進(jìn)程管理用戶 和 nginx服務(wù)worker進(jìn)程用戶保持一致
10(行)group = www --- 需要將php進(jìn)程管理用戶 和 nginx服務(wù)worker進(jìn)程用戶保持一致

第二個歷程: 重啟php服務(wù)

systemctl restart php-fpm.service 

nginx + php建立關(guān)系
第一個歷程: 修改nginx配置文件

    location ~ \.php$ {                  --- 匹配動態(tài).php結(jié)尾請求
          root /html;                     --- 設(shè)置站點(diǎn)目錄
          fastcgi_pass  127.0.0.1:9000;  --- 將動態(tài)請求信息發(fā)送給php程序進(jìn)行處理,9000為本地的php服務(wù)。
          fastcgi_index index.php;       --- 默認(rèn)處理php請求文件為index.php---沒有具體指定的php文件時,就會默認(rèn)訪問index.php
                                             www.oldboy.com/test.php
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                                         --- 將要處理文件信息以及詳細(xì)路徑告知給PHP程序
                                         /html/www         /test.php
                                         test.php  --- php程序    -----php不知道動態(tài)文件的詳細(xì)在什么地方 加上fastcgi后可以知道test.php在哪個站點(diǎn)下 /html/www                           
          include fastcgi_params;        --- 加載fastcgi變量配置文件
    }

詳細(xì)的代碼

server {
    listen            80;
    server_name  www.oldboy.com;
    location / {
        root   /html/www;
        index  index.php oldboy.jpg index.html index.htm;
    }
    location ~ \.php$ {
        root /html/www;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    }

<?php phpinfo() ?> 動態(tài)的PHP代碼,最后可通過PHP程序動態(tài)的文件解析出來。


站點(diǎn)下數(shù)據(jù)庫跟php連接的測試代碼

php測試代碼
cd /html/www

php + mariadb 建立關(guān)系
vim test_mysql.php
<?php
    $servername = "localhost"; #設(shè)置變量
    $username = "root"; #設(shè)置變量
    $password = "oldboy123";#設(shè)置變量
    //$link_id=mysql_connect('主機(jī)名','用戶','密碼'); 注釋
    //mysql -u用戶 -p密碼 -h 主機(jī) 注釋
    $conn = mysqli_connect($servername, $username, $password); #函數(shù)傳參 
    if ($conn) {
          echo "mysql successful by root !\n"; #如果成功輸出mysql成功
       }else{
          die("Connection failed: " . mysqli_connect_error()); #失敗的原因是什么
    }
?>

源代碼文件

    cd /html/www 
    echo '<?php phpinfo() ?>' >test.php
    
    php + mariadb 建立關(guān)系
    vim test_mysql.php
    <?php
        $servername = "localhost";
        $username = "root";
        $password = "oldboy123";
        //$link_id=mysql_connect('主機(jī)名','用戶','密碼');
        //mysql -u用戶 -p密碼 -h 主機(jī)
        $conn = mysqli_connect($servername, $username, $password);
        if ($conn) {
              echo "mysql successful by root !\n";
           }else{
              die("Connection failed: " . mysqli_connect_error());
        }
    ?>

nginx命令的補(bǔ)充

[root@web01 ~]# nginx -h
    nginx version: nginx/1.16.0
    Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]
    
    Options:
      -?,-h         : this help
      -v            : show version and exit
                      顯示軟件版本并退出
      -V            : show version and configure options then exit
                      顯示軟件版本和配置參數(shù)并退出
      -t            : test configuration and exit
                      測試配置文件并退出
      -T            : test configuration, dump it and exit
                      測試配置文件, 保存全部配置信息并退出
      -q            : suppress non-error messages during configuration testing
                      在配置測試時, 抑制正確信息輸出,只顯示錯誤信息
      -s signal     : send signal to a master process: stop, quit, reopen, reload
                      stop   信號 停止程序
                      reload 信號 平滑重啟
      -p prefix     : set prefix path (default: /etc/nginx/)
                      設(shè)置加載配置文件路徑  nginx.conf                  
      -c filename   : set configuration file (default: /etc/nginx/nginx.conf)
                      設(shè)置加載指定配置文件
      -g directives : set global directives out of configuration file
    

利用LNMP架構(gòu)部署網(wǎng)站代碼 -- wordpress--blog

  • 第一個歷程: 獲取代碼信息
    獲取開源代碼:
    blog 博客 wordpress
    www 網(wǎng)站 phpcms
    bbs 論壇 Discuz
    zhihu 知乎 wecenter
  • 第二個歷程: 將代碼解壓 放置到站點(diǎn)目錄,并將加壓的目錄變?yōu)閎log
tar xf wordpress-4.7.3-zh_CN.tar.gz
[root@web01 html]# ll blog/ -d
drwxr-xr-x 5 root root 4096 Aug  6 18:29 blog/
total 188
-rw-r--r--  1 www www   418 Sep 25  2013 index.php
-rw-r--r--  1 www www 19935 Jan  3  2017 license.txt
-rw-r--r--  1 www www  6956 Mar  7  2017 readme.html
-rw-r--r--  1 www www  5447 Sep 28  2016 wp-activate.php
drwxr-xr-x  9 www www  4096 Mar  7  2017 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-rw-rw-  1 www www  3212 Aug  6 21:36 wp-config.php
-rw-r--r--  1 www www  2930 Mar  7  2017 wp-config-sample.php
drwxr-xr-x  6 www www    84 Aug  6 21:52 wp-content
-rw-r--r--  1 www www  3286 May 25  2015 wp-cron.php
drwxr-xr-x 18 www www  8192 Mar  7  2017 wp-includes
-rw-r--r--  1 www www  2422 Nov 21  2016 wp-links-opml.php
-rw-r--r--  1 www www  3301 Oct 25  2016 wp-load.php
-rw-r--r--  1 www www 33939 Nov 21  2016 wp-login.php
-rw-r--r--  1 www www  8048 Jan 11  2017 wp-mail.php
-rw-r--r--  1 www www 16250 Nov 29  2016 wp-settings.php
-rw-r--r--  1 www www 29896 Oct 19  2016 wp-signup.php
-rw-r--r--  1 www www  4513 Oct 15  2016 wp-trackback.php
-rw-r--r--  1 www www  3065 Sep  1  2016 xmlrpc.php

更改權(quán)限,涉及到一個用戶轉(zhuǎn)換的問題
chown -R www. /html


用戶訪問web的時候,不管是什么用戶,都會轉(zhuǎn)化為www用戶。(和nginx worker進(jìn)程的是同一個用戶)。
用戶訪問動態(tài)的請求由nginx會交給php程序,此時php的程序為apache(默認(rèn))也無法處理。
需要將php的用戶變?yōu)楹蚽ginx worker進(jìn)程的同一個用戶。

  • 第三個歷程: 確認(rèn)nginx配置文件是否正確
    server {
        listen            80;
        server_name  blog.oldboy.com;
        location / {
            root   /html/blog;
            index  index.php oldboy.jpg index.html index.htm;
        }
        location ~ \.php$ {
            root /html/blog;
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include /etc/nginx/fastcgi_params;
        }
    }
  • 第四個歷程: 訪問blog頁面進(jìn)行初始化配置過程
    配置blog代碼和數(shù)據(jù)庫建立聯(lián)系


    第一次訪問頁面

根據(jù)提示需要創(chuàng)建數(shù)據(jù)庫

創(chuàng)建網(wǎng)站的數(shù)據(jù)庫
blog網(wǎng)站所需數(shù)據(jù)庫(進(jìn)入到數(shù)據(jù)庫界面)
create database wordpress;#沒有補(bǔ)全功能
show databases;

授權(quán)管理數(shù)據(jù)庫用戶
blog網(wǎng)站所需數(shù)據(jù)庫(進(jìn)入到數(shù)據(jù)庫界面)
grant all on wordpress.* to 'wordpress'@'localhost' identified by 'oldboy123';

mysql相關(guān)命令
mysql -uroot -poldboy123 ---進(jìn)入數(shù)據(jù)庫
show databases----查看數(shù)據(jù)庫
create database wordpress;---創(chuàng)建數(shù)據(jù)庫
drop database wordpress;---刪除數(shù)據(jù)庫
select host,user from mysql.user; ---查看user表中的host信息和user信息
select * from mysql.user; -------查看mysql的user表中查看所有信息
user wordpress; ----進(jìn)入數(shù)據(jù)庫
show tables;----查看庫中的表信息
mysql -uwordpress -poldboy123 -h 172.16.1.51
遠(yuǎn)程連接數(shù)據(jù)庫服務(wù)器會得到遠(yuǎn)程主機(jī)的IP地址,并進(jìn)行域名反向解析解析到IP地址的主機(jī)信息web01 和數(shù)據(jù)庫中的wordpress庫無法匹配。所以不能連接。
解決方法:跳過地址反向解析
skip-name-resolve
解決方法:刪除無用的用戶
drop user ' ' @' '


點(diǎn)擊確定后,將庫中信息導(dǎo)入到表中

數(shù)據(jù)庫進(jìn)行建表

post方法訪問網(wǎng)站
image

可以看到請求頭信息,一般公司會將此信息隱藏。

image

博客上傳主題出現(xiàn)413的響應(yīng)碼,無法上傳的問題

image

解決辦法:

vi /etc/nginx/conf.d/blog.conf

   keepalive_timeout  65;
    include /etc/nginx/conf.d/*.conf;
    client_max_body_size 50m;#(設(shè)置客戶端請求體最大值,默認(rèn)為1M)
}
image

vi /etc/php.ini ----修改php的上傳大小

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 20M
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容