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 enabledyum 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  --permanentfirewall-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.comvim /var/www/html/site1.com/index.htmlI am site1.com
mkdir /var/www/html/site2.comvim /var/www/html/site2.com/index.htmlI 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/httpdmkdir site1.comcd site1.comtouch 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 ProductOnlyServerSignature Off 

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

9、装置tp

批改虚拟主机配置文件

mv tp5 site1.comvim 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.soLoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so # 承受到php页面申请时,交给php引擎解释,而不是下载页面AddType application/x-httpd-php .phpAddType application/x-httpd-php-source .phps# 将目录的默认索引页面改为index.phpDirectoryIndex 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.comvim /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值改成Ondisplay_errors = Off2、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

#先查看零碎是否装有mysqlrpm -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 -pALTER 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    #查看是否开启3306firewall-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_passwordALTER 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/confmkdir vhosts
  1. 新建一个文件(site1.com.conf)在该文件外面增加虚拟主机的配置。
cd vhostsvim site1.com.confserver {    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.comcd site1.comvim index.com

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

5、nginx运行PHP

Nginx+Php-fpm运行原理详解

  • php-fpm 配置文件
vim /etc/php-fpm.d/www.conf user = apachegroup = apache#批改为user = nginxgroup = 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/htmlcomposer create-project topthink/think=5.1.* site2.com

批改虚拟主机配置文件

cd /usr/local/nginx/conf/vhostsvim site2.com.confserver {        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