1.Apache概述
1.1什么是apache
Apache通常指的是Apache HTTP Server,是一個開源的、跨平臺的Web服務(wù)器軟件。它是目前世界上使用最廣泛的Web服務(wù)器之一,也是許多網(wǎng)站和應(yīng)用程序的核心基礎(chǔ)。
1.2 apache的功能及特性
1.2.1功能
- 提供http協(xié)議服務(wù)
- 多個虛擬主機:IP、Port、FQDN
- CGI:Common Gateway Interface,通用網(wǎng)關(guān)接口,支持動態(tài)程序
- 反向代理
- 負(fù)載均衡
- 路徑別名
- 豐富的用戶認(rèn)證機制:basic,digest
- 支持第三方模塊
1.2.2特性
- 高度模塊化:core + modules
- DSO:Dynamic Shared Object 動態(tài)加載/卸載
- MPM:multi-processing module 多路處理模塊
1.3 MPM 工作模式
1.3.1 prefork模式
預(yù)產(chǎn)生(Pre-Fork)模式適用于穩(wěn)定性要求高的場景
-
Apache在啟動時會創(chuàng)建一組預(yù)定義數(shù)量的子進(jìn)程(稱為工作進(jìn)程)。
-
每個工作進(jìn)程都是獨立的,有自己的內(nèi)存空間和資源。
-
當(dāng)一個請求到達(dá)服務(wù)器時,主進(jìn)程選擇一個空閑的工作進(jìn)程來接受該請求。
-
選中的工作進(jìn)程處理該請求,生成響應(yīng)并將其發(fā)送回客戶端。
-
這種模式下每個工作進(jìn)程只能處理一個請求,處理完請求后會繼續(xù)等待下一個請求。
優(yōu)點:穩(wěn)定
缺點:慢,占用資源,不適用于高并發(fā)場景
1.3.2 worker模式
工作線程(Worker)模式適用于資源利用率高的場景
-
Apache在啟動時會創(chuàng)建一組預(yù)定義數(shù)量的線程池。
-
每個線程都可以處理多個請求,線程之間共享服務(wù)器的內(nèi)存和資源。
-
當(dāng)一個請求到達(dá)服務(wù)器時,一個空閑的線程將被選擇來處理該請求。
-
線程可能會處理多個請求,通過線程池重用來更高效地處理請求。
-
這種模式下需要注意線程安全的問題,以確保多個線程間的數(shù)據(jù)訪問不會導(dǎo)致沖突。
優(yōu)點:相比prefork 占用的內(nèi)存較少,可以同時處理更多的請求
缺點:使用keep-alive的長連接方式,某個線程會一直被占據(jù),即使沒有傳輸數(shù)據(jù),也需要一直等待到超時才會被釋放。
1.3.3 event模式
事件驅(qū)動(Event MPM)模式適用于高并發(fā)場景
-
在事件驅(qū)動模式下,Apache使用I/O多路復(fù)用(如epoll或kqueue)來監(jiān)聽多個連接。
-
當(dāng)一個連接有數(shù)據(jù)到達(dá)時,Apache將發(fā)出事件通知,表示該連接有可讀數(shù)據(jù)。
-
Apache將事件分發(fā)給一個空閑的工作線程來處理請求。
-
工作線程處理請求的過程通常是非阻塞的,通過事件驅(qū)動方式讀取數(shù)據(jù)和發(fā)送響應(yīng)。
-
這種模式下可以處理大量的并發(fā)請求,因為它不需要為每個請求創(chuàng)建一個新的進(jìn)程或線程。
優(yōu)點:單線程響應(yīng)多請求,占據(jù)更少的內(nèi)存,高并發(fā)下表現(xiàn)更優(yōu)秀,會有一個專門的線程來管理keep-alive類型的線程,當(dāng)有真實請求過來的時候,將請求傳遞給服務(wù)線程,執(zhí)行完畢后,又允許它釋放
缺點:沒有線程安全控制
2.LAMP概述
2.1 LAMP的組成
組成部分 | 功能 |
---|---|
Linux(操作系統(tǒng)) | LAMP 架構(gòu)的基礎(chǔ),用于托管 Web 服務(wù)器和應(yīng)用程序 |
Apache(web服務(wù)器) | 處理http的請求、構(gòu)建響應(yīng)報文等自身服務(wù) |
Mysql(數(shù)據(jù)庫) | 提供應(yīng)用程序?qū)?shù)據(jù)的存儲和讀取 |
Php(編程語言) | 用于生成動態(tài)主頁內(nèi)容 |
2.2 LAMP各組件的主要作用
-
LInux:提供網(wǎng)段、可靠的操作系統(tǒng)
-
apache:
第一:處理http的請求、構(gòu)建響應(yīng)報文等自身服務(wù);
第二:配置讓Apache支持PHP程序的響應(yīng)(通過PHP模塊或FPM);
第三:配置Apache具體處理php程序的方法,如通過反向代理將php程序交給fcgi處理。 -
mysql :
第一:提供PHP程序?qū)?shù)據(jù)的存儲;
第二:提供PHP程序?qū)?shù)據(jù)的讀取(通常情況下從性能的角度考慮,盡量實現(xiàn)數(shù)據(jù)庫的讀寫分離)。 -
php:
提供apache的訪問接口,即CGI或Fast CGI(FPM);
提供PHP程序的解釋器;
提供mysql數(shù)據(jù)庫的連接函數(shù)的基本環(huán)境。
2.3 LAMP的工作過程
- 客戶端發(fā)送HTTP請求到LAMP服務(wù)器。
- Apache Web服務(wù)器接收到請求并解析請求的URL。
- Apache根據(jù)URL確定要訪問的文件或資源,并將請求傳遞給適當(dāng)?shù)腜HP解釋器。
- PHP解釋器執(zhí)行服務(wù)器端的PHP代碼,生成HTML等動態(tài)內(nèi)容。
- PHP將生成的動態(tài)內(nèi)容返回給Apache服務(wù)器。
- Apache服務(wù)器將動態(tài)內(nèi)容返回給客戶端。
- 客戶端瀏覽器接收到動態(tài)內(nèi)容,并顯示在用戶界面上。
2.4CGI和FastCGI
CGI(公共網(wǎng)關(guān)接口)和FastCGI(快速公共網(wǎng)關(guān)接口)都是用于將Web服務(wù)器與腳本語言(如PHP、Python、Perl等)之間進(jìn)行通信的協(xié)議
特性 | CGI | FastCGI |
---|---|---|
運行方式 | 每次請求創(chuàng)建一個新的進(jìn)程 | 復(fù)用進(jìn)程處理多個請求 |
性能 | 每個請求需要重新加載代碼 | 多個請求共享同一份代碼 |
連接方式 | 臨時連接 | 常駐連接 |
并發(fā)能力 | 每次只能處理一個請求 | 可以在多個進(jìn)程同時處理多個請求 |
擴展性 | 難以擴展 | 較容易進(jìn)行擴展 |
安全性 | 較低 | 較高 |
適用場景 | 適用于小型或低流量應(yīng)用 | 適用于高流量或復(fù)雜應(yīng)用 |
3.搭建Discuz論壇所需
編譯安裝Apache httpd服務(wù) ----->編譯安裝MySQL----->編譯安裝PHP ----->搭建LAMP平臺
4.編譯安裝Apache httpd 服務(wù)
4.1前置準(zhǔn)備
systemctl stop firewalld
setenforce 0
#關(guān)閉防火墻和selinux
4.2 搭建編譯環(huán)境
yum -y install gcc gcc-c++ make pcre-devel expat-devel perl pcre
gcc \ #c語言編譯器
gcc-c++ \ #c編譯器
make \ #源代碼編譯器
pcre\ #pcre函數(shù)庫
pcre-devel \ #pcre接口開發(fā)包
expat-devel \ #用于支持網(wǎng)站解析HTML、XML文件
perl #perl 語言編譯器
4.3 解壓并移動軟件包
解壓軟件包
cd /opt
tar xf apr-1.6.2.tar.gz
tar xf apr-util-1.6.0.tar.gz
tar jvxf httpd-2.4.29.tar.bz2x
移動軟件包
mv apr-1.6.2 httpd-2.4.29/srclib/apr
mv apr-util-1.6.0 httpd-2.4.29/srclib/apr-util
cd httpd-2.4.29
4.4 編譯安裝
./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi
--prefix=/usr/local/httpd \ #指定httpd的安裝目錄
--enable-so \ #啟用動態(tài)加載模塊支持,使httpd具備進(jìn)一步擴展功能的能力
--enable-rewrite \ #啟用網(wǎng)頁地址的重寫功能,用于網(wǎng)站優(yōu)化、防盜鏈及目錄遷移維護(hù)
--enable-charset-lite \ #啟用字符集支持,以便支持使用各種字符集編碼的頁面
--enable-cgi #啟用CGI(通用網(wǎng)關(guān)接口)腳本程序支持,便于網(wǎng)站外部擴展應(yīng)用訪問的能力
make -j2 && make install
#啟用2核編譯編譯并安裝
4.5 建立軟連接,方便補全
cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
#將文件拷入/etc/init.d/httpd
ln -s /usr/local/httpd/conf/httpd.conf /etc/
#建立配置文件軟連接放入etc目錄下
ln -s /usr/local/httpd/bin/* /usr/local/bin/
#將啟動文件放入/usr/local/bin/目錄下可以直接使用
4.6添加httpd系統(tǒng)服務(wù)
方法一
vim /lib/systemd/system/httpd.service
#創(chuàng)建指向文件將httpd納入systemd管理中
[Unit]
Description=The Apache HTTP Server
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/httpd/logs/httpd.pid
ExecStart=/usr/local/bin/apachectl $OPTIONS
ExecReload=/bin/kill -HUP ${MAINPID}
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
#重新加載
systemctl start httpd
#啟動httpd服務(wù)
ss -natp |grep 80
#查看80端口是否被占用
方法二
修改配置文件
vim /etc/httpd.conf
--52行--修改
Listen 192.168.2.100:80
--197行--取消注釋,修改
ServerName www.byyd.com:80
--221行--默認(rèn)首頁存放路徑
DocumentRoot "/usr/local/httpd/htdocs"
--255行--默認(rèn)首頁文件名設(shè)置
DirectoryIndex index.html
httpd -t
#檢查語法錯誤
cat /usr/local/httpd/htdocs/index.html
#查看主頁文件內(nèi)容
systemctl daemon-reload
#重新加載
systemctl restart httpd;systemctl status httpd
#重新啟動并查看服務(wù)狀態(tài)
5.編譯安裝 mysql
5.1前置準(zhǔn)備
systemctl stop firewalld
setenforce 0
#關(guān)閉防火墻和selinux
5.2 創(chuàng)造編譯環(huán)境
yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake
gcc \ #C語言的編譯器
gcc-c++ \ #C++的編譯器
ncurses \ #字符終端下圖形互動功能的動態(tài)庫
ncurses-devel \ #ncurses開發(fā)包
bison \ #語法分析器
cmake #mysql需要用到的cmake編譯安裝包
useradd -s /sbin/nologin mysql
#創(chuàng)建一個MySQL用戶不允許登錄
5.3 解壓并移動源碼包
tar xf mysql-5.7.17.tar.gz
tar xf boost_1_59_0.tar.gz
mv boost_1_59_0 /usr/local/boost
5.4 配置軟件模塊
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ 指定mysql的安裝路徑
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ 指定mysql進(jìn)程監(jiān)聽套接字文件(數(shù)據(jù)庫連接文件)的存儲路徑
-DSYSCONFDIR=/etc \ 指定配置文件的存儲路徑
-DSYSTEMD_PID_DIR=/usr/local/mysql \ 指定進(jìn)程文件的存儲路徑
-DDEFAULT_CHARSET=utf8 \ 指定默認(rèn)使用的字符集編碼,如 utf8
-DDEFAULT_COLLATION=utf8_general_ci \ 指定默認(rèn)使用的字符集校對規(guī)則
-DWITH_EXTRA_CHARSETS=all \ 指定支持其他字符集編碼
-DWITH_INNOBASE_STORAGE_ENGINE=1 \ 安裝INNOBASE存儲引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \ 安裝ARCHIVE存儲引擎
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ 安裝BLACKHOLE存儲引擎
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ 安裝FEDERATED存儲引擎
-DMYSQL_DATADIR=/usr/local/mysql/data \ 指定數(shù)據(jù)庫文件的存儲路徑
-DWITH_BOOST=/usr/local/boost \ 指定boost的路徑,若使用mysql-boost集成包安裝則-DWITH_BOOST=boost
-DWITH_SYSTEMD=1 生成便于systemctl管理的文件
#編譯和安裝
make -j2 && mask install
chown -R mysql:mysql /usr/local/mysql/
#將數(shù)據(jù)庫目錄的屬主和數(shù)組都改為mysql
5.5 修改MySql配置文件
vim /etc/my.cnf
#客戶端設(shè)置
[client]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
#服務(wù)端配置
[mysql]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
#服務(wù)全局配置
[mysqld]
user = mysql #設(shè)置管理用戶
basedir = /usr/local/mysql #指定數(shù)據(jù)庫的安裝目錄
datadir = /usr/local/mysql/data #指定數(shù)據(jù)庫文件的存儲路徑
port = 3306 #指定端口
character_set_server=utf8 #設(shè)置服務(wù)器字符集編碼格式為utf8
pid-file = /usr/local/mysql/mysqld.pid #指定pid 進(jìn)程文件路徑
socket = /usr/local/mysql/mysql.sock #指定數(shù)據(jù)庫連接文件
server-id = 1 #指定服務(wù)ID號
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
chown mysql:mysql /etc/my.cnf
#修改配置文件屬主和屬組
5.6修改環(huán)境變量
echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
echo 'export PATH' >> /etc/profile
source /etc/profile #刷新使其生效
5.7 初始化數(shù)據(jù)庫
cd /usr/local/mysql/bin/
./mysqld \
--initialize-insecure \ #生成初始化密碼為空
--user=mysql \ #指定管理用戶
--basedir=/usr/local/mysql \ #指定數(shù)據(jù)庫的安裝目錄
--datadir=/usr/local/mysql/data #指定數(shù)據(jù)庫文件的存儲路徑
5.8 添加 MySql系統(tǒng)服務(wù)
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
#能使用systemctl啟動
systemctl daemon-reload 刷新識別
systemctl start mysqld.service 開啟服務(wù)
systemctl enable mysqld 開機自啟動
ss -anpt | grep 3306 |tr -s ' ' 查看端口
5.9 修改MySql登錄密碼
mysqladmin -u root -p password "abc123"
#剛開始沒密碼是空的直接回車
mysql -u root -p
#這個命令敲下,提示要輸入密碼,這個就是剛才設(shè)置的密碼abc123
6.編譯安裝Php
6.1 前置準(zhǔn)備
#安裝GD庫和GD庫關(guān)聯(lián)程序,用來處理和生成圖片
yum -y install \
gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel
tar xf php-7.1.10.tar.bz2
#解壓軟件模塊
6.2 編譯安裝
cd php-7.1.10
./configure \
--prefix=/usr/local/php7 \ 指定將 PHP 程序的安裝路徑
--with-apxs2=/usr/local/httpd/bin/apxs \ 指定Apache httpd服務(wù)提供的apxs 模塊支持程序的文件位置
--with-mysql-sock=/usr/local/mysql/mysql.sock \ 指定mysql 數(shù)據(jù)庫連接文件的存儲路徑
--with-config-file-path=/usr/local/php7 設(shè)置 PHP 的配置文件 php.ini 將要存放的位置
--with-mysqli \ 添加 MySQL 擴展支持
--with-zlib \ 支持zlib功能,提供數(shù)據(jù)壓縮
--with-curl \ 開啟curl擴展功能,實現(xiàn)HTTP的Get下載和Post請求的方法
--with-gd \ 激活gd 庫的支持
--with-jpeg-dir \ 激活jpeg 的支持
--with-png-dir \ 激活png 的支持
--with-freetype-dir \
--with-openssl \
--enable-mbstring \ 啟用多字節(jié)字符串功能,以便支持中文等代碼
--enable-xml \ 開啟擴展性標(biāo)記語言模塊
--enable-session \ 會話
--enable-ftp \ 文本傳輸協(xié)議
--enable-pdo \ 函數(shù)庫
--enable-tokenizer \ 令牌解釋器
--enable-zip ZIP壓縮格式
make -j2 && make install
#編譯并安裝
6.3復(fù)制模版文件作為PHP 的主配置文件,進(jìn)行修改
cp /opt/php-7.1.10/php.ini-development /usr/local/php7/php.ini
vim usr/local/php7/php.ini
6.4 優(yōu)化把PHP 的可執(zhí)行程序文件放入路徑環(huán)境變量的目錄中便于系統(tǒng)識別
ln -s /usr/local/php7/bin/* /usr/local/bin/
php -m
#查看php加載了那些模塊
6.5 修改httpd 服務(wù)的配置文件,讓apache支持PHP
vim /etc/httpd.conf
6.6 驗證PHP測試頁
rm -rf /usr/local/httpd/htdocs/index.html
#刪掉原默認(rèn)頁面
vim /usr/local/httpd/htdocs/index.php
#編輯現(xiàn)默認(rèn)頁面
<?php
phpinfo();
?>
systemctl restart httpd.service
7. 安裝Discuz論壇
7.1 創(chuàng)建數(shù)據(jù)庫并進(jìn)行授權(quán)
mysql -u root -p
#以root用戶身份運行數(shù)據(jù)庫
注意:記得加英文的";"
CREATE DATABASE bbs;
#創(chuàng)建一個數(shù)據(jù)庫
GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'admin123';
#把bbs數(shù)據(jù)庫里面所有表的權(quán)限授予給bbsuser,并設(shè)置密碼admin123
flush privileges;
#刷新數(shù)據(jù)庫
show databases;
#查看當(dāng)前創(chuàng)建數(shù)據(jù)庫
7.2解壓論壇壓縮包并上傳站點壓縮包
unzip /opt/Discuz_X3.4_SC_UTF8.zip -d /opt/dis
#解壓論壇壓縮包
cd /opt/dis/dir_SC_UTF8/
cp -r upload/ /usr/local/httpd/htdocs/bbs————————上傳站點更新包
7.3 更改論壇目錄屬主
cd /usr/local/httpd/htdocs/bbs
chown -R daemon ./config
chown -R daemon ./data
chown -R daemon ./uc_client
chown -R daemon ./uc_server/data
7.4 安裝Discuz論壇
http://192.168.67.100/bbs
#論壇頁面訪問
文章來源:http://www.zghlxwxcb.cn/news/detail-676867.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-676867.html
到了這里,關(guān)于Apache的簡單介紹(LAMP架構(gòu)+搭建Discuz論壇)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!