CentOS8 LAMP的實現以及相關應用

来源:https://www.cnblogs.com/heyongshen/archive/2022/10/17/16797699.html
-Advertisement-
Play Games

LAMP架構 LAMP架構的組成: LAMP架構的工作原理: 說明: 訪問動態資源的時候,apache就是個異構代理伺服器,接收並轉發用戶的請求。通過CGI或者fastcgi介面將請求轉發給php解釋器。 apache請求轉發的時候可能會涉及到跨網路轉發,跨網路轉發使用fastcgi來實現。 異構代 ...


LAMP架構

LAMP架構的組成:

image

LAMP架構的工作原理:

image

說明:
  • 訪問動態資源的時候,apache就是個異構代理伺服器,接收並轉發用戶的請求。通過CGI或者fastcgi介面將請求轉發給php解釋器。

  • apache請求轉發的時候可能會涉及到跨網路轉發,跨網路轉發使用fastcgi來實現。

異構代理和同構代理的區別:
  • 異構代理:接受請求和轉發請求使用的通信協議不同

  • 同構代理:接收請求和轉發請求使用的通信協議相同

CGI和fastcgi;

CGI:
  Common Gateway Interface 公共網關介面,apache接收到請求以後,就會生成一個子進程來運行外部的php或者其他程式的運行工具,這個進程會把處理完的數據返回給web伺服器,最後web伺服器把內容發送給用戶。

特點:
  執行完成後會銷毀這個子進程,如果下次用戶還請求改動態腳本,那麼web伺服器又再次fork一個新進程,周而複始的進行。早期時候使用較多,同時有多少個請求就生成多少個子進程。

例如:範例:httpd 利用CGI運行shell腳本

#apache預設就帶cgi的功能
[root@CentOS8 cgi-bin]# httpd -M | grep cgi
 proxy_fcgi_module (shared)
 proxy_scgi_module (shared)
 cgid_module (shared)

#預設需要將腳本文件放到apache的/var/www/cgi-bin/目錄下
[root@CentOS8 ~]# cat /etc/httpd/conf/httpd.conf | grep cgi
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
# "/var/www/cgi-bin" should be changed to whatever your ScriptAliased
<Directory "/var/www/cgi-bin">
    #AddHandler cgi-script .cgi
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"

[root@CentOS8 cgi-bin]# pwd
/var/www/cgi-bin
[root@CentOS8 cgi-bin]# cat test.sh 
#!/bin/bash
#
cat << EOF
Content-Type: text/html

<pre>
My username is: $(id -un)
My id is: $(id -u)

My shell settings are:
$(set)

My environment variables are:
$(env)

Here is the file in /etc:
$(ls -l /etc/redhat-release )
$( cat /etc/redhat-release )
</pre>
EOF

[root@CentOS8 cgi-bin]# curl http://10.0.0.14/cgi-bin/test.sh


  apache2會識別CGI代碼的前兩行,以確定使用什麼解釋器進行解釋執行,所以前兩行的申明很重要。

fastcgi:

  web伺服器收到一個請求時,不會重新生成一個子進程(因為這個子進程在web伺服器啟動時就開啟了,而且不會退出),web伺服器直接把內容傳遞給這個進程(進程間通信,但fastcgi使用了別的方式,tcp方式通信),這個進程收到請求後進行處理,把結果返回給web伺服器,最後自己接著等待下一個請求的到來,而不是退出

CGI和fastcgi 比較:
  • CGI: 兼職, 一次性的過河拆橋式的服務

  • FASTCGI: 專職,全周期的持續式的服務

PHP

PHP:是一種腳本型的解釋型語言

PHP的opcode語言

Opcode是一種PHP腳本編譯後的中間語言

php腳本的執行:
  • 1.把php的文本文件轉化為opcode語言

  • 2.將opcode解釋為電腦可執行的二進位

php程式執行的步驟:

代碼文件 ---(Zend引擎)--->opcode碼---()--->

PHP的配置
配置文件:
配置文件的來源:
[root@CentOS8 ~]# rpm -qf /etc/php.ini
php-common-7.2.24-1.module_el8.2.0+313+b04d0a66.x86_64
配置文件格式:
  • 類似於mysql,註釋使用的是(;)進行註釋

  • 使用([])分為多個語句塊

[foo]:Section Header
directive = value
php.ini配置文檔;

php.ini的核心配置選項文檔: http://php.net/manual/zh/ini.core.php

php.ini配置選項列表:http://php.net/manual/zh/ini.list.php

php常見設置:
expose_php = On        #響應報文顯示首部欄位x-powered-by: PHP/x.y.z,暴露php版本,建議為off

max_execution_time= 30        #最長執行時間30s

memory_limit=128M             #生產不夠,可調大

display_errors=off            #調試使用,不要打開,否則可能暴露重要信息

display_startup_errors=off    #建議關閉

post_max_size=8M              #最大上傳數據大小,生產可能調大,比下麵項大

upload_max_filesize =2M       #最大上傳文件,生產可能要調大

max_file_uploads = 20         #同時上傳最多文件數

date.timezone =Asia/Shanghai  #指定時區 預設使用的是utc時間

short_open_tag=on             #開啟短標簽,如: <? phpinfo();?>
修改配置文件生效的方法:

修改完php配置文件後,需要重啟php的相關軟體才能生效。

#CentOS 8 上面不是依附於apache的一個模塊,而是一個獨立的服務
#CentOS 7中,php是作為一個依附於apache的一個模塊,不是一個獨立的服務
[root@CentOS8 ~]# ps aux | grep php
root       60277  0.0  0.9 166852 18020 ?        Ss   19:02   0:00 php-fpm: master process (/etc/php-fpm.conf)
apache     60278  0.0  0.5 183184 10172 ?        S    19:02   0:00 php-fpm: pool www
apache     60279  0.0  0.5 183184 10172 ?        S    19:02   0:00 php-fpm: pool www
apache     60280  0.0  0.5 183184 10172 ?        S    19:02   0:00 php-fpm: pool www
apache     60281  0.0  0.5 183184 10176 ?        S    19:02   0:00 php-fpm: pool www
apache     60282  0.0  0.5 183184 10176 ?        S    19:02   0:00 php-fpm: pool www
root       61303  0.0  0.0  12112  1044 pts/0    S+   19:46   0:00 grep --color=auto php

[root@CentOS8 ~]# systemctl restart php-fpm.service

LAMP的實現方式:

httpd 接收用戶的web請求;靜態資源則直接響應;動態資源為php腳本,對此類資源的請求將交由php
來運行

apache和php結合的方式:
  • 模塊文件:將php編譯成為httpd的模塊libphp5.so,只有prefork 模式才支持(CentOS 7 預設是這個)

  • FastCGI:php和apache是兩個單獨的服務(CentOS 8 預設使用factcgi模式)

LAMP架構實現:

動態資源的請求方式:

  • Client -- http --> httpd --> libphp5.so () -- mysql --> MySQL server

  • Client -- http --> httpd -->fastcgi-- mysql --> MySQL server

實現LAMP:

前提:
  需要安裝MySQL、apache、php這三個軟體包

PHP連接MySQL的方式:

1. 使用mysqli擴展連接資料庫:
  使用mysqli擴展模塊mysqli.so連接數據,此方式只能連接MySQL資料庫,不支持其它資料庫

<?php
$mysqli=new mysqli("mysqlserver", "username", "password");
if(mysqli_connect_errno()){
 echo "Failure";
 $mysqli=null;
 exit; }
echo "OK";
$mysqli->close();
?>

預設安裝php的時候是沒有安裝連接mysql的工具包的

#CentOS 8 需要安裝php-mysqlnd這個軟體包才會生成對應的模塊
[root@CentOS8 ~]# rpm -ql php-mysqlnd
/etc/php.d/20-mysqlnd.ini
/etc/php.d/30-mysqli.ini
/etc/php.d/30-pdo_mysql.ini
/usr/lib/.build-id
/usr/lib/.build-id/27
/usr/lib/.build-id/27/050298f7ae4de2117b0325d5e1f354539efa77
/usr/lib/.build-id/43
/usr/lib/.build-id/43/0aa1d5fd22f68c8c868a0ffb6473f529360ca8
/usr/lib/.build-id/c9
/usr/lib/.build-id/c9/713dbdb20adf4b190b48176317b0c06d691f4e
/usr/lib64/php/modules/mysqli.so
/usr/lib64/php/modules/mysqlnd.so
/usr/lib64/php/modules/pdo_mysql.so

#不加斜線認為是軟連接,加了斜線認為是文件夾
[root@CentOS8 ~]# find /lib64/ -name mysqli.so
/lib64/php/modules/mysqli.so

2. 使用PDO(PHP Data Object)擴展連接資料庫:
  使用PDO擴展模塊pdo_mysql.so連接資料庫,此方式可以支持連接MySQL,Oracle等多種資料庫

範例:php使用pdo擴展連接資料庫的測試代碼1


<?php
$dsn='mysql:host=mysqlhost;port=3306;dbname=mysql';
$username='root';
$passwd='magedu';
$dbh=new PDO($dsn,$username,$passwd);
var_dump($dbh);
?>

例如:

[root@CentOS8 html]# cat lamp.php 
<?php

$servername = "localhost";
$username = "root";
$password = "";

try {
    $conn = new PDO("mysql:host=$servername;dbname=mysql", $username, $password);
    // 將PDO錯誤模式設置為異常
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "連接成功"; 
}
catch(PDOException $e){

    echo "連接失敗:".$e->getMessage();
}
?>

常見LAMP應用實現

1. phpmyadmin:實現mysql的web管理

PhpMyAdmin是一個以PHP為基礎,以Web-Base方式架構在網站主機上的MySQL的資料庫管理工具,讓管理者可用Web介面管理MySQL資料庫,官網:https://www.phpmyadmin.net/

實現 phpMyadmin應用部署

1.下載軟體包
官網:https://www.phpmyadmin.net/

註意:

#不下載這兩個對應的包 pma不會給瀏覽器返回任何信息
[root@CentOS8 html]# yum install php-xml php-json

2.解壓到apache的根目錄下

3.測試:

http://10.0.0.14/pma/

WordPress:

WordPress是一種使用PHP語言開發的博客平臺,用戶可以在支持PHP和MySQL資料庫的伺服器上
架設屬於自己的網站。也可把 WordPress當作一個內容管理系統(CMS)來使用,
官網:https://cn.wordpress.org/

部署worlpress:
上傳的文件存放位置:/var/www/html/blog/wp-content/

Discuz:

Crossday Discuz! Board(簡稱 Discuz!)是一套通用的社區論壇軟體系統。自2001年6月面世以來,是覆蓋率最大的論壇軟體系統之一。2010年8月23日與騰訊達成收購協議,官網:https://www.discuz.net/

部署Discuz
  • 1.去官網下載對應的安裝包

  • 2.解壓安裝包(只需要裡面的uploade目錄)

  • 3.移動到apache服務的根目錄


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Nacos 動態配置原理 可憐夜半虛前席,不問蒼生問鬼神。 簡介 動態配置管理是 Nacos 的三大功能之一,通過動態配置服務,我們可以在所有環境中以集中和動態的方式管理所有應用程式或服務的配置信息。 動態配置中心可以實現配置更新時無需重新部署應用程式和服務即可使相應的配置信息生效,這極大了增加了系 ...
  • python煙花代碼 如下 # -*- coding: utf-8 -*- import math, random,time import threading import tkinter as tk import re #import uuid Fireworks=[] maxFireworks= ...
  • 1.有n個評委,他們給出score個分數,請用代碼寫出平均值,ave代表平均值 2022-10-15 13:17:10 int main() { int n, i =1, score, sum = 0, ave; printf("請輸入評委人數:"); scanf("%d",&n); while ( ...
  • MinGW 和arm-none-eabi 下載百度雲 鏈接:https://pan.baidu.com/s/1AvPXFQbkb7fi10lrJ3chsA 提取碼:sh3x 首先建議你閱讀官方建議 https://infocenter.nordicsemi.com/index.jsp?topic=% ...
  • 本文主要介紹 Filebeat 的相關概念及基本使用,相關的環境及軟體信息如下:CentOS 7.9、FileBeat 8.2.2、Logstash 8.2.2、Elasticsearch 8.2.2。 1、Filebeat 簡介 1.1、Filebeat 總覽 Filebeat 是用於轉發和集中日 ...
  • 搞過Java的碼農都知道,在J2EE開發中一個(確切地說,應該是一類)很重要的框架,那就是ORM(Object Relational Mapping,對象關係映射)。它把Java中的類和資料庫中的表關聯起來,可以像操作對象那樣操作數據表,十分方便。給碼農們節約了大量的時間去摸魚。其實它的本質一點都不 ...
  • 一、 先決條件 1.Azure Repos Git/Git和項目上傳 把本地的Net Core項目上傳至Azure Repos Git/Git 2.Docker Registry Service Connection/Azure subscription和Azure Container Regist ...
  • WPF以其豐富靈活的控制項樣式設計,相較於WinForm而言,一直是工控組態軟體的寵兒,本文以兩個簡單的小例子,簡述如何通過WPF設計出表示水流的管道,和轉動的冷卻風扇。僅供學習分享使用,如有不足之處,還請指正。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...