乐趣区

关于php:Centos7-LANMP环境搭建

PHP 安装包 TS 和 NTS 的区别

phpinfo();

打印环境查看其中的 Thread Safety 项,这个我的项目就是查看是否是线程平安如果是:enabled,一般来说应该是 ts 版,否则是 nts 版。

PHP 的 TS 和 NTS 版本

TS(Thread-Safety)即线程平安,多线程拜访时,采纳了加锁机制,当一个线程拜访该类的某个数据时,进行爱护,其余线程不能进行拜访直到该线程读取完,其余线程才可应用。益处是不会呈现数据不统一或者数据净化的状况,但消耗的工夫要比 NTS 长。

PHP 以 ISAPI 形式加载的时候抉择 TS 版本。

TS:有 php7apache2_4.dll 文件

NTS(None-Thread Safe)即非线程平安,就是不提供数据拜访爱护,有可能呈现多个线程先后或同时操作同一数据的状况,容易造成数据错乱(即脏数据),个别操作的执行工夫要比 TS 短。

php 以 fast-cgi 形式运行的时候抉择 NTS 版本,具备更好的性能。

NTS:没有 php7apache2_4.dll 文件

TS 和 NTS 版本的抉择

php 在 windows 下分为 TS 版和 NTS 版

Linux 上的 PHP 同样有 NTS 和 TS 版本的区别, 默认是 NTS 版本,configure 时加上 –enable-maintainer-zts 则编译为 TS 版本

什么时候须要 TS 版本呢?

比方你要应用 pthreads 这个多线程的 PECL 扩大时,

或者 PHP 以 MOD_PHP 嵌入多线程运行下的 Apache,

比方 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,

一、更换 yum 源

查看零碎可用的 yum 源和所有的 yum 源

yum repolist enabled
yum repolist all

1、配置 阿里镜像仓库

  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

  1. 革除零碎 yum 缓存并生成新的 yum 缓存
yum clean all # 革除零碎所有的 yum 缓存
yum makecache # 生成 yum 缓存

2、epel 扩大源 装置和配置

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

  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 缓存

二、yum 装置 Apache

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

1、卸载

首先,要确认下是否有装置过,或者是零碎自带了 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

2、装置

列出 yum 仓库外面的 httpd 项,命令如下:

yum list | grep httpd

看到有可用项之后,输出以下命令进行装置:

yum install -y httpd

将 Apache 退出到开机自启动中

systemctl enable httpd.service

启动服务:

systemctl start httpd.service

查看 httpd 的运行状态:

systemctl status httpd.service

如果正在运行防火墙(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

3、测试

默认的 www 目录在 /var/www/html/ 上面,所以咱们写入一个 html 文件,查看下怎么样了,输出一下命令创立一个蕴含 hello world 字符串的文件:

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

而后,咱们用 curl 拜访下本地:

curl 127.0.0.1

曾经在失常服务啦!

4、相干配置与环境

服务目录 /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 须要加载的其余文件

5、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

6、配置 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>

  1. 找到 DirectoryIndex,在 index.html 前面退出 index.php

反对.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,在所在行后面是否有#,如果有的话,将# 删除,而后保留文件。

查看 /etc/httpd/conf/httpd.conf 文件是否已关上容许重写性能

在文件里搜寻.htaccess,咱们找到 如下正文对应的AllowOverride None

而后将
AllowOverride None
改成
AllowOverride All

留神改变的地位 因为该文件 有多处 AllowOverride None,只有找到正确的地位才无效。

查看完后面两步,重启 Apache 服务

systemctl restart httpd

7、配置虚拟主机

查看 apache 主配置文件,

vim /etc/httpd/conf/httpd.conf

确保存在以下配置,因为等下须要在 conf.d/ 创立虚机主机配置

IncludeOptional conf.d/*.conf

另外,把 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

批改物理主机 hosts 文件(C:WindowsSystem32driversetc),因为这里是因为物理机去拜访 Apache 服务器

拜访成果


扩大虚机主机配置文件

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:反对所有选项

8、平安配置

暗藏 HTTP 申请头 web 服务器信息

没作任何设置前,查看 web 服务器响应头:

简直把 web 服务器详细信息都暴进去了,会给攻击者提供最有攻打价值的平安信息,这是十分危险的。

将 Apache 的配置文件加上:

ServerTokens ProductOnly
ServerSignature Off 

而后重启 Apache 服务,再次申请

9、装置 tp

批改虚拟主机配置文件

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>

在 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

10、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>

虚拟主机配置

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>           

站点文件

mkdir /var/www/html/site3.com

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

三、yum 装置 PHP7.3

因为 linux 的 yum 源不存在 php7.x,所以咱们要更改 yum 源:

Remi 软件源 次要提供最新版的 PHP 软件包和其余一些 PHP 扩大工具包,它是针对 Fedora 和 RHEL 系分支变体(包含:RHEL, CentOS, Oracle Linux 等等)要装置 PHP,举荐应用 Remi 软件源。

1、装置源:

装置源管理工具

yum install -y yum-utils  #yum-utils 是治理 repository 及扩大包的工具 (次要是针对 repository)

装置 REMI 源:

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

2、革除历史版本

yum -y remove php*

3、装置

一、作为 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

开启 PHP 报错

1、搜寻并批改上行,把 Off 值改成 On
display_errors = Off

2、error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT
批改为:error_reporting=E_ALL

坑 1:linux php 装置扩大包装置门路与 phpinfo 中 extension_dir 加载的门路不统一

php -i | grep 'extension_dir'   #查看 php 扩大包装置门路

装置 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


二、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

配置文件门路

# 查找 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 #查看状态

4、配置 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/

四、yum 装置 MySQL

CentOS7 装置 mysql8

# 先查看零碎是否装有 mysql
rpm -qa | grep mysql

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

1、装置源

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

列出以后反对的 MySQL 数据库

yum repolist all | grep mysql

从下面能够看出,会默认下载 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, 开启

2、装置

yum install -y mysql-community-server

3、启动

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";

防火墙开启 3306 端口

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

firewall-cmd --zone=public --add-port=3306/tcp  --permanent        #开启 3306 端口     

systemctl restart firewalld            #重启防火墙

4、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';

五、编译装置 Nginx

Nginx 是一个收费的、开源的、高性能的 HTTP 和反向代理服务,次要负责负载一些访问量比拟大的站点。

相比于 Apache,Nginx 能够解决更多的并发连贯,而且每个连贯的内存占用的十分小。

Nginx 能够作为一个独立的 Web 服务,也能够用来给 Apache 或是其余的 Web 服务做反向代理。

在 linux 下,有的会用 apache 去跑 php,而后用 nginx 做反向代理,

比方 apache 运行在 8080 端口,nginx 在 80 端口,拜访 php 文件时,反向代理到 apache,动态页通过 nginx 解决。

nginx 反对高并发,apache 对 php 的运行比较稳定。

1、装置依赖

  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

2、装置软件

下载

间接下载 .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

# 解压安装包
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 目录

编译 & 装置

make && make install

查找装置门路:

whereis nginx

留神:装置实现后,会有 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

3、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


重启 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 

1、配置 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

2、从新加载 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

4、虚拟主机配置

在 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;
    }
}

  1. 关上 nginx 的配置文件 nginx.conf, 引入虚拟主机的配置文件
include vhosts/*.conf
  1. 执行 nginx 的从新加载配置文件
/usr/local/nginx/sbin/nginx -s reload

  1. 依据虚拟主机外面的配置,新建一个网站的根目录
mkdir site1.com
cd site1.com
vim index.com

  1. 在 window 零碎外面,配置 hosts 文件,拜访成果如下:

5、nginx 运行 PHP

Nginx+Php-fpm 运行原理详解

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

user = apache
group = apache

#批改为

user = nginx
group = nginx

  • 批改 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;
}

  • 站点目录
cd /usr/local/nginx/html/site1.com/

vim index.php

  • 装置 tp
cd /usr/local/nginx/html

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

批改虚拟主机配置文件

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

退出移动版