Centos7 LANMP環境搭建

PHP安裝包TS和NTS的區別

phpinfo();php

打印環境查看其中的 Thread Safety 項,這個項目就是查看是不是線程安全若是是:enabled,通常來講應該是ts版,不然是nts版。

PHP的TS和NTS版本

TS(Thread-Safety)即線程安全,多線程訪問時,採用了加鎖機制,當一個線程訪問該類的某個數據時,進行保護,其餘線程不能進行訪問直到該線程讀取完,其餘線程纔可以使用。好處是不會出現數據不一致或者數據污染的狀況,但耗費的時間要比 NTS 長。

PHP以 ISAPI 方式加載的時候選擇TS版本。html

TS:有php7apache2_4.dll文件mysql

NTS(None-Thread Safe)即非線程安全,就是不提供數據訪問保護,有可能出現多個線程前後或同時操做同一數據的狀況,容易形成數據錯亂(即髒數據),通常操做的執行時間要比 TS 短。linux

php以fast-cgi方式運行的時候選擇NTS版本,具備更好的性能。nginx

NTS:沒有php7apache2_4.dll文件c++

TS和NTS版本的選擇

php在windows下分爲TS版和NTS版web

Linux上的PHP一樣有NTS和TS版本的區別,默認是NTS版本,configure時加上--enable-maintainer-zts則編譯爲TS版本正則表達式

何時須要TS版本呢?算法

好比你要使用pthreads這個多線程的PECL擴展時,

或者PHP以MOD_PHP嵌入多線程運行下的Apache,sql

好比Apache在Linux上提供的Event MPM就是一個多進程多線程的工做模型,Windows上Apache採用的WinNT MPM也是一個多線程模型,這時都須要TS版本的PHP.

而若是以PHP-FPM(好比搭配Nginx或者Apache的mod_fastcgi)

或者PHP-CGI(好比搭配Apache的mod_fcgid或者Win上的IIS)來運行PHP,則通常都不須要TS線程安全版本的PHP.

以 FAST-CGI 或 PHP-FPM 方式運行就用NTS 非線程安全版

在windows系統下

Apache + PHP 組合,以 ISAPI 的方式運行。用 TS 線程安全版

若IIS,以isapi模式運行PHP使用TS版,以FastCGI模式運行PHP使用NTS版
  

在linux系統下

Apache + PHP,PHP通常做爲Apache 的模塊進行運行 選TS

Nginx + PHP ,(以php-fpm的方式運行)選NTS

PHP的運行模式

  1. CGI (通用網關接口/Common Gateway Interface)
它是一段程序,通俗的講CGI就象是一座橋,把網頁和WEB服務器中的執行程序鏈接起來,它把HTML接收的指令傳遞給服務器的執行程序,再把服務器執行程序的結果返還給HTML頁。CGI 的跨平臺性能極佳,幾乎能夠在任何操做系統上實現。

CGI方式在遇到鏈接請求(用戶 請求)先要建立cgi的子進程,激活一個CGI進程,而後處理請求,處理完後結束這個子進程。這就是fork-and-execute模式。因此用cgi方式的服務器有多少鏈接請求就會有多少cgi子進程,子進程反覆加載是cgi性能低下的主要緣由。都會當用戶請求數量很是多時,會大量擠佔系統的資源如內 存,CPU時間等,形成效能低下。

  1. FAST CGI (常駐型CGI / Long-Live CGI)
fast-cgi 是cgi的升級版本,FastCGI像是一個常駐(long-live)型的CGI,它能夠一直執行着,只要激活後,不會每次都要花費時間去fork一 次。PHP使用PHP-FPM(FastCGI Process Manager),全稱PHP FastCGI進程管理器進行管理。

補充:

FAST-CGI 是微軟爲了解決 CGI 解釋器的不足而提出改進方案。當一個請求向 web server 發送請求時,web server總會fork一個CGI解釋器進程進行處理這個請求,進程處理完成以後將結果返回給web server,web server將結果返回並顯示出來,進程結束,當用戶再次請求同一個頁面時,web server又會fork一個新進程進行請求處理,這樣效率會比較低下(CGI被人詬病的主要緣由)。而採用FAST-CGI 解釋器的 話,當一個請求執行完畢後不會註銷該進程,而是將改進程進入休眠期,當接收到新的請求時,從新啓用改進程進行處理。FAST-CGI 較CGI 減小了進程的重複建立的資源佔用。

  1. CLI(命令行運行 / Command Line Interface)
PHP-CLI是PHP Command Line Interface的簡稱,如同它名字的意思,就是PHP在命令行運行的接口,區別於在Web服務器上運行的PHP環境(PHP-CGI,ISAPI等)。

也就是說,PHP不單能夠寫前臺網頁,它還能夠用來寫後臺的程序。 PHP的CLI Shell腳本適用於全部的PHP優點,使建立要麼支持腳本或系統甚至與GUI應用程序的服務端,在Windows和Linux下都是支持PHP-CLI模式的。

  1. 模塊模式
模塊模式是以mod_php5模塊的形式集成,此時mod_php5模塊的做用是接收Apache傳遞過來的PHP文件請求,並處理這些請求,而後將處理後的結果返回給Apache。若是咱們在Apache啓動前在其配置文件中配置好了PHP模塊(mod_php5), PHP模塊經過註冊apache2的ap_hook_post_config掛鉤,在Apache啓動的時候啓動此模塊以接受PHP文件的請求。

除了這種啓動時的加載方式,Apache的模塊能夠在運行的時候動態裝載,這意味着對服務器能夠進行功能擴展而不須要從新對源代碼進行編譯,甚至根本不須要中止服務器。咱們所須要作的僅僅是給服務器發送信號HUP或者AP_SIG_GRACEFUL通知服務器從新載入模塊。可是在動態加載以前,咱們須要將模塊編譯成爲動態連接庫。此時的動態加載就是加載動態連接庫。 Apache中對動態連接庫的處理是經過模塊mod_so來完成的,所以mod_so模塊不能被動態加載,它只能被靜態編譯進Apache的核心。這意味着它是隨着Apache一塊兒啓動的。

  1. ISAPI(Internet Server Application Programming Interface)
一般是指被http服務器所加載,以服務器的模塊形式運行,由微軟提出,故只能在win平臺上運行,

例如win下的apache,iis

ISAPI(Internet Server Application Program Interface)是微軟提供的一套面向Internet服務的API接口,一個ISAPI的DLL,能夠在被用戶請求激活後長駐內存,等待用戶的另外一個請求,還能夠在一個DLL裏設置多個用戶請求處理函數,此外,ISAPI的DLL應用程序和WWW服務器處於同一個進程中,效率要顯著高於CGI。(因爲微軟的排他性,只能運行於windows環境)

PHP做爲Apache模塊,Apache服務器在系統啓動後,預先生成多個進程副本駐留在內存中,一旦有請求出現,就當即使用這些空餘的子進程進行處理,這樣就不存在生成子進程形成的延遲了。這些服務器副本在處理完一次HTTP請求以後並不當即退出,而是停留在計算機中等待下次請求。對於客戶瀏覽器的請求反應更快,性能較高。

備註:在PHP5.3之後,PHP再也不有ISAPI模式,安裝後也再也不有php5isapi.dll這個文件。要在IIS6上使用高版本PHP,必須安裝FastCGI 擴展,而後使IIS6支持FastCGI。


PHP-FPM是什麼 (php-Fastcgi Process Manager 進程管理器)

php-fpm 是 FastCGI 的實現,並提供了進程管理的功能。

進程包含 master 進程和 worker 進程兩種進程。
master 進程只有一個,負責監聽端口,接收來自 Web Server 的請求,而 worker 進程則通常有多個 (具體數量根據實際須要配置),每一個進程內部都嵌入了一個 PHP 解釋器,是 PHP 代碼真正執行的地方。

PHP-FPM提供了更好的PHP進程管理方式,能夠有效控制內存和進程、能夠平滑重載PHP配置,在./configure的時候帶 –enable-fpm參數便可開啓PHP-FPM,

1、更換yum源

查看系統可用的yum源和全部的yum源

yum repolist enabled
yum repolist all

image-20200731114732575

一、配置 阿里鏡像倉庫

  1. 備份yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
  1. 下載新的 CentOS-Base.repo 到 /etc/yum.repos.d/
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

或者

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

image-20200731114913276

  1. 清除系統yum緩存並生成新的yum緩存
yum clean all # 清除系統全部的yum緩存
yum makecache # 生成yum緩存

image-20200731115413703

image-20200731115505539

二、epel擴展源 安裝和配置

  1. 查看可用的epel源
yum list | grep epel-release

image-20200731192729670

  1. 安裝 epel
yum install -y epel-release
  1. 更換其餘epel源
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
  1. 配置阿里鏡像提供的epel源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  1. 清除系統yum緩存並生成新的yum緩存
yum clean all # 清除系統全部的yum緩存
yum makecache # 生成yum緩存

2、yum安裝Apache

LAMP - CentOS7+Apache2.4+MySQL8+PHP7.3

一、卸載

首先,要確認下是否有安裝過,或者是系統自帶了httpd服務

#檢查而且顯示Apache相關安裝包
rpm -qa | grep httpd

或者:

yum list installed | grep httpd

卸載httpd,首先要中止httpd服務:

systemctl stop httpd.service

而後經過 rpm -e 或者yum remove 命令均可以,不過rpm -e命名必需要本身先卸載依賴包,因此我用yum remove命令卸載:

yum remove httpd.x86_64

image-20200731121212181

二、安裝

列出yum 倉庫裏面的httpd項,命令以下:

yum list | grep httpd

image-20200731121539417

看到有可用項以後,輸入如下命令進行安裝:

yum install -y httpd

image-20200731121736109

將Apache加入到開機自啓動中

systemctl enable httpd.service

啓動服務:

systemctl start httpd.service

查看httpd的運行狀態:

systemctl status httpd.service

image-20200731125647959

若是正在運行防火牆(firewalld),則還須要打開HTTP和HTTPS端口80和443:

firewall-cmd --zone=public --add-service=http    --permanent 

firewall-cmd --zone=public --add-service=https    --permanent

   或者
firewall-cmd --zone=public --add-port=80/tcp  --permanent
firewall-cmd --zone=public --add-port=443/tcp  --permanent

    --zone                 做用域
    --add-port=80/tcp   添加端口  格式爲:端口/協議
    --parmanent          永久生效  沒有此參數重啓後失效
    
    
    
firewall-cmd --reload

三、測試

默認的www目錄在/var/www/html/下面,因此咱們寫入一個html文件,查看下怎麼樣了,輸入一下命令建立一個包含hello world字符串的文件:

echo 'hello world' > /var/www/html/index.html

而後,咱們用curl訪問下本地:

curl 127.0.0.1

已經在正常服務啦!

四、相關配置與環境

服務目錄 /etc/httpd
主配置文件 /etc/httpd/conf/httpd.conf
虛擬主機項目配置文件 /etc/httpd/conf.d/
網站根目錄 /var/www/html
訪問日誌 /var/log/httpd/access_log
錯誤日誌 /var/log/httpd/error_log

在httpd服務程序主配置文件中最爲經常使用的參數以下:

ServerRoot 服務安裝目錄
ServerAdmin 管理員郵箱
User 運行服務的用戶
Group 運行服務的用戶組
ServerName 網站服務器的域名
DocumentRoot 站點默認主目錄
Listen 監聽的IP地址與端口號
DirectoryIndex 默認的索引頁頁面
ErrorLog 錯誤日誌文件
CustomLog 訪問日誌文件
Timeout 網頁超時時間,默認爲300秒.
Include 須要加載的其餘文件

五、systemctl管理

咱們能夠像任何其餘系統單元同樣管理Apache服務。

#啓動
systemctl start httpd

#中止
systemctl stop httpd

#重啓
systemctl restart httpd

#在進行一些配置更改後從新加載Apache服務:
systemctl reload httpd

#開機啓動
systemctl enable httpd         

#開機不啓動
systemctl disable httpd

#檢查Apache是否已經安裝了開機自動啓動
systemctl list-unit-files | grep httpd

六、配置Apache

支持PHP

vim /etc/httpd/conf/httpd.conf
  1. 載入PHP模塊,如httpd.conf中有下列代碼則直接去掉前面#便可,沒有則加入
  2. 在底部加入如下代碼使得Apache能夠解析php文件
<IfModule mod_php7.c>     
    AddType application/x-httpd-php .php 
</IfModule>

image-20200803153731058

  1. 找到DirectoryIndex,在index.html後面加入index.php

image-20200803153827217

支持.htaccess規則重寫

先檢查rewrite模塊是否打開,模塊配置文件位於:/etc/httpd/conf.modules.d/00-base.conf

vim /etc/httpd/conf.modules.d/00-base.conf

在文件裏搜索rewrite_module modules/mod_rewrite.so,在所在行前面是否有#,若是有的話,將#刪除,而後保存文件。

image-20200731180601996

查看/etc/httpd/conf/httpd.conf文件是否已打開容許重寫功能

在文件裏搜索.htaccess,咱們找到 以下注釋對應的AllowOverride None

image-20200731180827882

而後將
AllowOverride None
改爲
AllowOverride All

注意改動的位置 由於該文件 有多處 AllowOverride None,只有找到正確的位置纔有效。

檢查完前面兩步,重啓Apache服務

systemctl restart httpd

七、配置虛擬主機

查看apache主配置文件,

vim /etc/httpd/conf/httpd.conf

確保存在如下配置,由於等下須要在conf.d/建立虛機主機配置

IncludeOptional conf.d/*.conf

image-20200731162743655

另外,把 Require all denied默認拒絕訪問設置爲容許訪問: Require all granted,方便測試。

<Directory />
  AllowOverride none
 # Require all denied
  Require all granted
</Directory>

關於虛擬主機項目配置文件,位於/etc/httpd/conf.d目錄,建議一個域名一個配置文件
虛擬主機配置文件規範:[域名].conf

vim /etc/httpd/conf.d/site1.com.conf

<VirtualHost *:80>    
ServerName site1.com    
DocumentRoot "/var/www/html/site1.com" 
</VirtualHost>
vim /etc/httpd/conf.d/site2.com.conf

<VirtualHost *:80>    
ServerName site2.com    
DocumentRoot "/var/www/html/site2.com" 
</VirtualHost>

建立網站目錄,編寫文件

mkdir /var/www/html/site1.com

vim /var/www/html/site1.com/index.html

I am site1.com
mkdir /var/www/html/site2.com

vim /var/www/html/site2.com/index.html

I am site2.com

image-20200731170218852

修改物理主機hosts文件(C:WindowsSystem32driversetc),由於這裏是由於物理機去訪問Apache服務器

image-20200731171842844

訪問效果

image-20200731170438328


擴展虛機主機配置文件

https://blog.csdn.net/tladagi...

<VirtualHost *:80>
        #綁定的域名
        ServerName site1.com    
        #綁定的域名別名
        ServerAlias www.site1.com
        #網站主目錄
        DocumentRoot "/var/www/html/site1.com" 
        #錯誤日誌目錄
        ErrorLog  "/var/log/httpd/site1.com/error.log"
        #訪問日誌目錄
        CustomLog "/var/log/httpd/site1.com/access.log" common
        <Directory "/var/www/html/site1.com/">
                Options FollowSymLinks
                AllowOverride All
                #容許任意訪問
                Require all granted
        </Directory>
</VirtualHost>

建立日誌目錄

cd /var/log/httpd
mkdir site1.com

cd site1.com
touch error.log access.log

日誌目錄記得更改屬主和屬組爲Apache,不然httpd啓動失敗

chown -R apache:apache /var/log/httpd/site1.com/

Require參考

Require all granted
無條件容許訪問。

Require all denied
訪問被無條件拒絕。

Require env env-var [env-var] ...
只有在給定的環境變量之一被設置的狀況下才容許訪問。

Require method http-method [http-method] ...
只有給定的HTTP方法才容許訪問。

Require expr expression
若是表達式計算結果爲true,則容許訪問。

Require user userid [userid] ...
只有指定的用戶才能訪問資源。

Require group group-name [group-name] ...
只有指定組中的用戶才能訪問資源。

Require valid-user
全部有效的用戶均可以訪問資源。

Require ip 10 172.20 192.168.2
指定IP地址範圍內的客戶端能夠訪問資源。

Options

None:不支持任何選項

Indexes:容許索引目錄

FollowSymLinks:容許訪問符號連接指向的原文件

Includes:容許執行服務端包含(SSI)

ExecCGI:容許容許CGI腳本

ALL:支持全部選項

八、安全配置

隱藏HTTP請求頭web服務器信息

沒做任何設置前,查看web服務器響應頭:

image-20200731171153188

幾乎把web服務器詳細信息都暴出來了,會給攻擊者提供最有攻擊價值的安全信息,這是很是危險的。

將Apache的配置文件加上:

ServerTokens ProductOnly
ServerSignature Off

而後重啓Apache服務,再次請求

image-20200731171457282

九、安裝tp

image-20200803160213460

修改虛擬主機配置文件

mv tp5 site1.com

vim site1.com.conf

<VirtualHost *:80>
        #綁定的域名
        ServerName site1.com
        #綁定的域名別名
        ServerAlias www.site1.com
        #網站主目錄
                DocumentRoot "/var/www/html/site1.com/public"
        #錯誤日誌目錄
        ErrorLog  "/var/log/httpd/site1.com/error.log"
        #訪問日誌目錄
        CustomLog "/var/log/httpd/site1.com/access.log" common
        <Directory "/var/www/html/site1.com/public/">
                Options FollowSymLinks
                AllowOverride All
                #容許任意訪問
                Require all granted
        </Directory>
</VirtualHost>

image-20200803160507268

在Centos中,咱們經過上述操做下載的項目代碼是沒有操做權限的,默認的歸屬者也是root用戶。

而咱們使用TP和Apache訪問網站時,須要代碼目錄有必定的操做權限,而且Apache用戶是可操做方。

#修改權限:
chmod -R 777 /var/www/html/tp5        
        
#找到Apache對應的用戶名,多是apache或www:    
cat /etc/passwd
        
#修改apache用戶可操做tp5目錄:    
chown -R apache /var/www/html/tp5/

#臨時關閉selinux模式
setenforce 0

重啓Apache

systemctl restart httpd

image-20200803160633696

十、apache mod_php到php-fpm

apache php的幾種運行方式

httpd.conf配置文件修改

vim /etc/httpd/conf/httpd.conf

#註釋
#LoadModule php7_module modules/libphp7.so

#<IfModule mod_php7.c>  
#       AddType application/x-httpd-php .php 
#</IfModule>
 

#加載這兩個模塊
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
 
# 接受到php頁面請求時,交給php引擎解釋,而不是下載頁面
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

# 將目錄的默認索引頁面改成index.php
DirectoryIndex index.php index.html

# 若是php-fpm使用的是TCP socket,那麼在httpd.conf末尾加上:
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>

image-20200812184828798

虛擬主機配置

vim /etc/httpd/conf.d/site3.com.conf


<VirtualHost *:80>
        #綁定的域名
        ServerName site3.com
        #綁定的域名別名
        ServerAlias www.site3.com
        #網站主目錄
                DocumentRoot "/var/www/html/site3.com"
        #錯誤日誌目錄
        ErrorLog  "/var/log/httpd/site3.com/error.log"
        #訪問日誌目錄
        CustomLog "/var/log/httpd/site3.com/access.log" common
        <Directory "/var/www/html/site3.com/">
                Options FollowSymLinks
                AllowOverride All
                #容許任意訪問
                Require all granted
        </Directory>
</VirtualHost>

image-20200812184919588

站點文件

mkdir /var/www/html/site3.com

vim /var/www/html/site3.com/index.php

image-20200812185023004

image-20200812185152103

3、yum安裝PHP7.3

因爲linux的yum源不存在php7.x,因此咱們要更改yum源:

Remi 軟件源 主要提供最新版的 PHP 軟件包和其餘一些 PHP 擴展工具包,它是針對 Fedora 和 RHEL 系分支變體 (包括:RHEL, CentOS, Oracle Linux 等等) 要安裝 PHP,推薦使用 Remi 軟件源。

一、安裝源:

安裝源管理工具

yum install -y yum-utils  #yum-utils是管理repository及擴展包的工具 (主要是針對repository)

安裝 REMI 源:

yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm

image-20200803123632276

二、清除歷史版本

yum -y remove php*

三、安裝

1、做爲Apache模塊 mod_php

yum安裝php7.3

對於php7.1使用remi-php71或對其餘php7.x版本使用remi-php72或remi-php73或remi-php74

yum-config-manager --enable remi-php73

從啓用的倉庫上方安裝php版本

yum -y install php-cli php-bcmath php-gd php-json php-mbstring php-mcrypt php-mysqlnd php-opcache php-pdo php-pecl-crypto php-pecl-mcrypt php-pecl-geoip php-pecl-swoole php-recode php-snmp php-soap php-xmll

安裝更多擴展:

yum search php73

驗證一下是否安裝成功:

php -v

image-20200803154038563

image-20200803154453108

開啓PHP報錯

一、搜索並修改下行,把Off值改爲On
display_errors = Off

二、error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT
修改成:error_reporting=E_ALL

image-20200803172400383

坑1:linux php 安裝擴展包安裝路徑與phpinfo中extension_dir加載的路徑不一致

php -i | grep 'extension_dir'   #查看php擴展包安裝路徑

image-20200804130942989

安裝php的pdo以及gd庫

#pdo的擴展:
yum install php-pdo

#pdo的mysql擴展:
yum install php-pdo_mysql

#gd庫擴展:
yum install php-gd

#mbstring:擴展
yum -y install freetype-devel php-mbstring

image-20200804132441978

image-20200804132530702


2、PHP-FPM獨立運行方式

CentOS 7 yum 安裝 PHP7.3

安裝PHP及擴展

yum -y install php-cli php-fpm php-bcmath php-gd php-json php-mbstring php-mcrypt php-mysqlnd php-opcache php-pdo php-pecl-crypto php-pecl-mcrypt php-pecl-geoip php-pecl-swoole php-recode php-snmp php-soap php-xmll

image-20200811153127390

配置文件路徑

#查找php.ini位置:
find / -name php.ini

#php-fpm 配置文件
/etc/php-fpm.d/www.conf

systemctl管理

systemctl enable php-fpm #開啓開機自啓

systemctl restart php-fpm #重啓

systemctl start php-fpm #啓動

systemctl stop php-fpm #關閉

systemctl status php-fpm #檢查狀態

四、配置composer

  1. 下載composer
curl -sS https://getcomposer.org/installer | php
  1. 將composer.phar文件移動到bin目錄以便全局使用composer命令
mv composer.phar /usr/local/bin/composer
  1. 切換國內源
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

image-20200803155436619

4、yum安裝MySQL

CentOS7 安裝 mysql8

#先檢查系統是否裝有mysql
rpm -qa | grep mysql

#刪除可用
yum remove mysql-xxx-xxx-

一、安裝源

rpm -Uvh http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

列出當前支持的MySQL數據庫

yum repolist all | grep mysql

image-20200803180454121

從上面能夠看出,會默認下載5.7版本的MySQL數據庫,而8.0版本的默認是關閉的

#先把5.7的禁用,啓用MySQL 8.0數據庫
vim /etc/yum.repos.d/mysql-community.repo

其中能夠看到5.7版本, enabled=1, 改成enabled=0, 禁用掉
另外能夠看到8.0版本, enabled=0, 改成enabled=1, 開啓

二、安裝

yum install -y mysql-community-server

image-20200803181904885

三、啓動

systemctl list-unit-files | grep mysqld        #檢查是否已經安裝了開機自動啓動

systemctl enable mysqld.service                #設置開機自啓動

systemctl start mysqld         #啓動
        
systemctl status mysqld        #查看MySQL啓動狀態

默認目錄/文件位置

/var/lib/mysql        #數據庫存儲目錄
/etc/my.cnf            #配置文件

修改密碼

MySQL安裝完成以後會在LOG文件( /var/log/mysqld.log)中生成一個默認的臨時密碼

vim /var/log/mysqld.log            

A temporary password is generated for root@localhost:  tKPR9)EaJifG        #冒號後面爲舊密碼

登陸MySQL並修改root密碼

mysql -uroot -p

ALTER USER root@localhost IDENTIFIED BY 'Lk321@1024';

設置容許遠程登陸

use mysql 

select user,host from user;

update user set host = "%" where user = "root";

image-20200803184706716

防火牆開啓3306端口

firewall-cmd --zone=public --query-port=3306/tcp    #查看是否開啓3306

firewall-cmd --zone=public --add-port=3306/tcp  --permanent        #開啓3306端口     

systemctl restart firewalld            #重啓防火牆

四、navcate遠程終端鏈接測試

出現2059這個錯誤的緣由是:

在mysql8以前的版本中加密規則爲mysql_native_password,而在mysql8之後的加密規則爲caching_sha2_password
#能夠將mysql用戶登陸的加密規則修改成mysql_native_password
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Lk321@1024';

5、編譯安裝Nginx

Nginx 是一個免費的、開源的、高性能的 HTTP 和反向代理服務,主要負責負載一些訪問量比較大的站點。

相比於 Apache,Nginx 能夠處理更多的併發鏈接,並且每一個鏈接的內存佔用的很是小。

Nginx 能夠做爲一個獨立的 Web 服務,也能夠用來給 Apache 或是其餘的 Web 服務作反向代理。

在linux下,有的會用apache去跑php,而後用nginx作反向代理,

好比apache運行在8080端口,nginx在80端口,訪問php文件時,反向代理到apache,靜態頁經過nginx處理。

nginx支持高併發,apache對php的運行比較穩定。

一、安裝依賴

  1. gcc 安裝

安裝 nginx 須要先將官網下載的源碼進行編譯,編譯依賴 gcc 環境,若是沒有 gcc 環境,則須要安裝:

yum install -y gcc gcc-c++
  1. PCRE pcre-devel 安裝

PCRE(Perl Compatible Regular Expressions) 是一個Perl庫,包括 perl 兼容的正則表達式庫。

nginx 的 http 模塊使用 pcre 來解析正則表達式,因此須要在 linux 上安裝 pcre 庫,pcre-devel 是使用 pcre 開發的一個二次開發庫。nginx也須要此庫。

yum install -y pcre pcre-devel
  1. zlib 安裝

zlib 庫提供了不少種壓縮和解壓縮的方式, nginx 使用 zlib 對 http 包的內容進行 gzip ,因此須要安裝 zlib 庫。

yum install -y zlib zlib-devel
  1. OpenSSL 安裝

OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、經常使用的密鑰和證書封裝管理功能及 SSL 協議,並提供豐富的應用程序供測試或其它目的使用。
nginx 不只支持 http 協議,還支持 https(即在ssl協議上傳輸http),因此須要在 Centos 安裝 OpenSSL 庫。

yum install -y openssl openssl-devel

二、安裝軟件

下載

直接下載.tar.gz安裝包,地址:https://nginx.org/en/download.html

#下載Nginx到"/usr/local/src"
cd /usr/local/src

#使用wget命令下載。確保系統已經安裝了wget,若是沒有安裝,執行 yum install wget 安裝。
wget -c http://nginx.org/download/nginx-1.18.0.tar.gz

image-20200805131543058

#解壓安裝包
tar -zxvf nginx-1.18.0.tar.gz

#進入解壓目錄
cd nginx-1.18.0

configure配置nginx(配置包含:指定安裝的位置、須要的模塊功能)

使用默認配置

./configure

自定義配置(不推薦)

./configure \
--prefix=/usr/local/nginx \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--pid-path=/usr/local/nginx/conf/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
注:將臨時文件目錄指定爲/var/temp/nginx,須要在/var下建立temp及nginx目錄

image-20200805131801915

編譯&安裝

make && make install

查找安裝路徑:

whereis nginx

image-20200805131939644

注意:安裝完成後,會有4個目錄,

/usr/local/nginx/conf 配置文件

/usr/local/nginx/html 網頁文件,網站的根目錄,就相似與apache裏面的htdocs目錄。

var/log/nginx 日誌文件

/usr/local/nginx/sbin 主要二進制程序(啓動程序命令)


若是nginx配置文件有修改,能夠經過以下方式測試配置文件是否正確:

/usr/local/nginx/sbin/nginx -t

查看Nginx編譯時的參數

/usr/local/nginx/sbin/nginx -V

三、Nginx的啓動管理

注意:

Nginx編譯安裝後沒有辦法經過systemctl指令來進行操做,由於它不是用rpm安裝的,它裏面沒有服務,須要找到Nginx的執行文件才能啓動
cd /usr/local/nginx/sbin/

啓動、中止nginx

./nginx 啓動

參數 "-c" 指定了配置文件的路徑,若是不加 "-c" 參數,Nginx 會默認加載其安裝目錄的 conf 子目錄中的 nginx.conf 文件。

./nginx -s stop 此方式至關於先查出nginx進程id再使用kill命令強制殺掉進程。

./nginx -s quit 此方式中止步驟是待nginx進程處理任務完畢進行中止。

./nginx -s reload 不中止nginx的服務,從新加載配置文件

啓動時報80端口被佔用:

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()

查看80端口

netstat -lnp | grep 80

image-20200805171150613


重啓 nginx

1.先中止再啓動(推薦):
對 nginx 進行重啓至關於先中止再啓動,即先執行中止命令再執行啓動命令。

./nginx -s quit
./nginx

2.從新加載配置文件:
當 ngin x的配置文件 nginx.conf 修改後,要想讓配置生效須要重啓 nginx,使用-s reload不用先中止 ngin x再啓動 nginx 便可將配置信息在 nginx 中生效

./nginx -s reload

開機自啓動

#即在`rc.local`增長啓動代碼就能夠了。
vi /etc/rc.local

#增長一行 `/usr/local/nginx/sbin/nginx`

#設置執行權限:
chmod 755 rc.local

配置nginx的systemctl命令

Systemd服務文件以.service結尾,若是用yum install命令安裝的,yum命令會自動建立nginx.service文件。

源碼編譯安裝以後的nginx沒法使用systemctl管理,要手動建立nginx.service服務文件

vim /usr/lib/systemd/system/nginx.service

一、配置nginx.service文件

[Unit]
# 描述服務
Description=nginx-The High-performance HTTP Server
# 描述服務類別 前置服務
After=network.target remote-fs.target nss-lookup.target    
 
[Service]
# 後臺運行的形式
Type=forking    
# PID文件的路徑
PIDFile=/usr/local/nginx/conf/nginx.pid
        
# 啓動準備
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
# 啓動命令
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
# 重啓命令
ExecReload=/usr/local/nginx/sbin/nginx -s reload
#中止命令
ExecStop=/usr/local/nginx/sbin/nginx -s stop
# 快速中止
ExecQuit=/usr/local/nginx/sbin/nginx -s quit
# 給服務分配臨時空間
PrivateTmp=true
 
[Install]
# 服務用戶的模式
WantedBy=multi-user.target

二、從新加載 systemd

systemctl daemon-reload
  1. nginx服務經常使用操做
#查看nginx服務狀態
systemctl status nginx.service

#啓動nginx服務
systemctl start nginx.service

#中止nginx服務
systemctl stop nginx.service

#重啓nginx服務
systemctl restart nginx.service

#從新讀取nginx配置
systemctl reload nginx.service

四、虛擬主機配置

在http段裏面的server段就是配置虛擬主機的,http中每個server段就是一個虛擬主機

能夠把多個虛擬主機配置成一個個單獨的配置文件

  1. 在conf目錄下面新建一個vhosts目錄
cd /usr/local/nginx/conf
mkdir vhosts
  1. 新建一個文件(site1.com.conf)在該文件裏面添加虛擬主機的配置。
cd vhosts

vim site1.com.conf

server {
    listen 80;
    server_name site1.com;
    location / {
        root html/site1.com;
        index index.html;
    }
}

image-20200805175245792

  1. 打開nginx的配置文件nginx.conf,引入虛擬主機的配置文件
include vhosts/*.conf
  1. 執行nginx的從新加載配置文件
/usr/local/nginx/sbin/nginx -s reload

image-20200805175444000

  1. 根據虛擬主機裏面的配置,新建一個網站的根目錄
mkdir site1.com
cd site1.com
vim index.com

image-20200805175615913

  1. 在window系統裏面,配置hosts文件,訪問效果以下:

image-20200805175812720

五、nginx運行PHP

Nginx+Php-fpm運行原理詳解

  • php-fpm 配置文件
vim /etc/php-fpm.d/www.conf 

user = apache
group = apache

#修改成

user = nginx
group = nginx

image-20200811160619014

  • 修改nginx配置文件支持php-fpm
vim /usr/local/nginx/conf/vhosts/site1.com.conf

#找到server項目設置以下內容
location ~ \.php$ {
    root           html/site1.com;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

image-20200811170046401

  • 站點目錄
cd /usr/local/nginx/html/site1.com/

vim index.php

image-20200811170441980

  • 安裝tp
cd /usr/local/nginx/html

composer create-project topthink/think=5.1.* site2.com

image-20200811180433386

修改虛擬主機配置文件

cd /usr/local/nginx/conf/vhosts

vim site2.com.conf

server {
        listen 80;
        server_name site2.com;
        charset utf-8;
        root /usr/local/nginx/html/site2.com/public;

        location / {
                index  index.php index.html;
                 
                 #若是請求既不是一個文件,也不是一個目錄,則執行一下重寫規則
                 if (!-e $request_filename) {
                      #地址做爲將參數rewrite到index.php上。
                       rewrite  ^(.*)$  /index.php?s=/$1  last;
                 }
        }

        location ~ \.php(.*)$ {
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                #下面兩句是給fastcgi權限,能夠支持 ?s=/module/controller/action的url訪問模式
                fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                #下面兩句才能真正支持 index.php/index/index/index的pathinfo模式
                fastcgi_param  PATH_INFO  $fastcgi_path_info;
                fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
                include        fastcgi_params;
        }
}

重載Nginx

systemctl reload nginx

image-20200812123758055

相關文章
相關標籤/搜索