7月29日学习笔记 web基础,apache服务,nginx服务

⼀、web基本概念和常识 Web:为⽤户提供的⼀种在互联⽹上浏览信息的服务,Web 服 务是动态的、可交 互的、跨平台的和图形化的。 Web 服务为⽤户提供各种互联⽹服务,这

⼀、web基本概念和常识

Web:为⽤户提供的⼀种在互联⽹上浏览信息的服务,Web 服 务是动态的、可交 互的、跨平台的和图形化的。 Web 服务为⽤户提供各种互联⽹服务,这些服务包括信息浏览 服务,以及各种交互式服务,包括聊天、购物、学习等等内容。 Web 应⽤开发也经过了⼏代技术的不断发展,⽬前 Web 开发依 然是最重要的开发内容之⼀。Web 基础的技术包括超⽂本标记 语⾔(HTML)和 HTTP 协议,HTML 是⼀种呈现数据的⽅式 (给⼈看的),⽽ HTTP 则是⼀组通信的标准(语法、语义、 时许),可以简单的理解为 HTTP 携带 HTML。 1. web 应⽤:⽹站(⼴义上的PC,⼿机app) 2. 浏览器(Browser):也称⽤户代理,web客户端,主要有IE、 Edge、Chrome、Firefox、腾讯浏览器,360浏览器等。 3. web服务器(web server):也称HTTP服务器(HTTP server),主要有 Nginx、Apache、Tomcat 等。

⼆、⽹站基础

1、域名

域名是⼀个IP地址的“⾯具” ,⽬的是便于记忆和访问⼀个或⼀ 组服务器的地址(⽹站,电⼦邮件,FTP 等)。

2、域名解析

本地HOSTS解析 DNS服务器解析

3、⽹站的基本概念

⽹站、⽹⻚、主⻚; HTTP、URL、HTML、超链接

4、web ⽹站

web1.0(以编辑为特征) web2.0(侧重⽤户交互)

5、动态⻚⾯与静态⻚⾯的差别

(1)URL不同 静态⻚⾯链接⾥没有“?” 动态⻚⾯链接⾥包含“?” 2)后缀不同 (开发语⾔不同) 静态⻚⾯⼀般以 .html .htm .xml 为后缀 动态⻚⾯⼀般以 .php .jsp .py等为后缀(3)内容不同 静态⻚⾯的内容是固定的 动态⻚⾯的内容会因⽤户、浏览器、时间、地点等⽽发⽣变化。

6、域名格式

http://(协议头)www.bing(域名)/(URI资源:路径/⽂ 件名) 示例:https://www.bilibili/v/game/?spm_id_from=333.85 1.b_7072696d6172794368616e6e656c4d656e75.21

三、HTTP 协议

HTTP协议是超⽂本传输协议的缩写,英⽂是Hyper Text Transfer Protocol。它是从WEB服务器传输超⽂本标记语⾔ (HTML) 到本地浏览器的传送协议。

1、HTTP 原理

HTTP是⼀个基于TCP/IP通信协议来传递数据的协议,传输的数 据类型为HTML ⽂件,图⽚⽂件,查询结果等。 HTTP协议⼀般⽤于B/S架构。浏览器作为HTTP客户端通过URL 向HTTP服务端即web服务器发送所有请求,web服务器收到客 户端请求后进⾏响应。

2、HTTP 特点

1. http协议⽀持客户端/服务端模式,也是⼀种请求/响应模式的协 议。 2. 简单快速:客户向服务器请求服务时,只需传送请求⽅法和路 径。请求⽅法常⽤的有GET、HEAD、POST。 3. 灵活:HTTP 允许传输任意类型的数据对象。传输的类型由 Content-Type 加以标记。除开可以响应字符串之外,还可以上 传和下载⼆进制⽂件 4. ⽆连接:限制每次连接只处理⼀个请求。服务器处理完请求,并 收到客户的应答后,即断开连接,但是却不利于客户端与服务器 保持会话连接,为了弥补这种不⾜,产⽣了两项记录 http 状态 的技术,⼀个叫做 Cookie,⼀个叫做 Session。 5. ⽆状态:⽆状态是指协议对于事务处理没有记忆,后续处理需要 前⾯的信息,则必须重传。

3、URI 和 URL 的区别

(1)HTTP使⽤统⼀资源标识符(Uniform Resource Identifiers, URI)来传输数据和建⽴连接。 URI:Uniform Resource Identifier 统⼀资源标识符 URL:Uniform Resource Location 统⼀资源定位符(2)URI 是⽤来标识⼀个具体的资源的,我们可以通过 URI 知道⼀ 个资源是什么,使⽤它就能够唯⼀地标记互联⽹上资源。 (3)URL 则是⽤来定位具体的资源的,标识了⼀个具体的资源位 置。互联⽹上的每个⽂件都有⼀个唯⼀的。 (4)URL,也就是我们俗称的⽹址,它实际上是 URI 的⼀个⼦集。 (5)URI 不仅包括 URL,还包括 URN(统⼀资源名称),它们之 间的关系如下:

4、HTTP 报⽂组成

(1)客户端发出请求 GET /index.php HTTP/1.5/ Host:zgod (2)客户端浏览器发送出来的请求格式: GET:这个部分只声明了请求⽅式,除了get ⽅式可能还有 post 等⽅式。GET 表示请求,POST 表示邮寄。 /index.php:这⾥是⼀个URL,表示了我们要访问的资源是哪 个。 HTTP/1.5/:这⾥表示的是客户端浏览器使⽤的协议版本是1.5。 Host:zgod:这是请求是交给主机zgod的。 (3)服务器反馈的响应: (4)服务器反馈的响应报⽂的具体含义: HTTP/1.5:部分表示服务器回馈的对应http版本 (刚才客户端的 请求⾥⾯带有版本号,对⽅使⽤的1.5,服务器回馈的也是1.5) 200 ok:这⾥表示的是处理结果的状态码和状态的简单描述(ok) Date:Mon,5 sep 2022 08:49:45 GMT:响应的具体时间 Content-Length:254:响应内容的⻓度 Content-Type:text/html:响应内容的类型 响应报⽂中打了⼀个空⾏(换⾏),当看到响应报⽂中有换⾏时, 它的下⾯开始就是客户机要访问的具体资源了。

5、HTTP 状态码

2xx:成功,200成功、201已经创建 3xx:重定向,304未修改 4xx:请求错误,404未找到⽂件、408请求超时 5xx:服务器错,500服务器内部错误、502⽹关错误

6、HTTP 报⽂格式

⼀个完整的http访问包含请求(request)和响应(response) (1)请求报⽂ 客户端发出的报⽂:包含了请求⾏,请求头部字段,通⽤头部字 段,实体头部字段及报⽂主体。 请求⾏:客户端使⽤的请求⽅法,⽐如 GET,POST等等。同时 也包含了URL信息和HTTP的版本号。 请求头部字段:它包含了请求的符加信息,⽐如客户端的信息, 响应的优先级等等。 通⽤头部字段:是请求报⽂和响应报⽂都会使⽤的报⽂内容。实体头部字段:跟实体有关的资源信息,⽐如请求的实体更新时 间等。 报⽂主体:⼀般来所,请求报⽂在使⽤GET ⽅法时,没有报⽂ 主体,使⽤ POTS ⽅法时,就会有。 (2)常⻅请求⽅法 Ⅰ. 客户端向服务器提出请求的⽅法 1. GET: 去向服务器获取资源。即请求指定的⻚⾯信息,并返回 实体主体。  POST:⽤来传输请求的实体主体。向指定资源提交数据进⾏处 理请求。数据被包含在请求体中。POST请求可能会导致新的资 源建⽴或已有资源修改。 PUT:从客户端向服务器传送的数据取代指定的⽂档内容。 HEAD:从服务器端获取报⽂⾸部信息,确定客户端输⼊的 URL 有效性和资源的更新⽇期。类似于get请求,只不过返回的响应 没有具体内容,只⽤于获取头部 OPTIONS:⽤来询问服务器⽀持哪些⽅法。即获取服务器⽀持 的请求⽅法 DELETE:⽤来删除⽂件的。请求服务器删除指定的⻚⾯ Ⅱ. 服务器回应报⽂

7、HTTP协议缺点

HTTP协议不会保存状态信息。 ⽐如说:客户机对服务器说,请你把之前给我的响应再给我⼀次。 那么这个时候服务器端是不会记录之前给了客户机什么东⻄的。它 会说,我TM哪⼉记得之前给了你什么啊!? 所以我们说HTTP是⽆状态协议。 ⽆状态协议不会去保存任何的响应记录,所以服务器的CPU以及 MEM等等资源的消耗上更⼩⼀些。 试想,如果我们的服务器要去记录给每个客户机回馈了什么响应, 是不是会消耗⾮常⼤的资源。 我们说⽆状态协议也是有缺点的,虽然它节省了服务器端的资源, 但是因为不能记录客户机的状态信息(⽐如某些站点的登录状态),会 对⽤户造成不太⽅便的使⽤体验。 那么由此⼀来,我们就要去说⼀说⼤家都听说过的⼀个技术,叫做 cookie。 实际上COOKIE本身就是针对了HTTP⽆状态协议的弊端⽽ 出现的。 它可以通过在请求和响应报⽂当中写⼊cookie 信息来控制/记录客户 端的状态。⾸先,客户端对服务器发出访问请求,服务器会通过 cookie 技术在 返回给客户端的报⽂当中加⼊⼀个叫做 set-cookie 的⾸部字段信 息。告知客户端你要保存cookie。 然后,客户端再次向服务器端发送访问请求的时候,客户端会在访 问请求的报⽂当中加⼊它存储的 cookie。然后再发送。 这个时候,服务器端在接收到请求之后,会检查客户端它发送的请 求当中有没有夹着cookie值,再跟以前的记录进⾏⽐对,然后确认 ⼀下发送请求的客户端是谁,它之前有什么状态。

四、HTTPS 协议

HTTP⼀般是明⽂传输,很容易被攻击者窃取重要信息,鉴于 此,HTTPS应运⽽⽣。 HTTPS 的全称为 (HyperTextTransferProtocoloverSecureSocketLayer), HTTPS 和 HTTP 有很⼤的不同在于 HTTPS 是以安全为⽬标的 HTTP通道,在HTTP 的基础上通过传输加密和身份认证保证了 传输过程的安全性。 HTTPS 在 HTTP 的基础上增加了 SSL 层,也就是说 HTTPS=HTTP+SSL。 HTTP使⽤明⽂传播,有三⼤⻛险 (1)窃听⻛险(eavesdropping):第三⽅可以获知通信内容。 (2)篡改⻛险(tampering):第三⽅可以修改通信内容。 (3)冒充⻛险(pretending):第三⽅可以冒充他⼈身份参与通 信。 SSL/TLS协议是为了解决这三⼤⻛险⽽设计的,希望达到: (1)所有信息都是加密传播,第三⽅⽆法窃听。 (2)具有校验机制,⼀旦被篡改,通信双⽅会⽴刻发现。 (3)配备身份证书,防⽌⽌身份被冒充。

1、SSL层

SSL层(SecureSocketsLayer安全套接字协议),现在也被称为 TLS。 我们都知道SSL中的保证安全的加密通信是⼀次对称加密和⾮对称加 密的结果,但是客户端与服务端建⽴通信的前提就是服务端是否能 够被证书发型机构CA授予证书,那证书是怎么样的呢? 以下是证书类型介绍:SSL:SecureSocketLayer,安全套接字层,http层下新增加的这 ⼀层构成了https。 TLS:TransportLayerSecurity,同样是为了保证数据安全的加 密协议层,是SSL的增强版, SSL 有1.0,2.0,3.0版本,TLS ⽬前 1.0,1.1,1.2,1.3,TLS 的 1.0 版本就是 SSL 的 3.0。 Key:https 中有公钥和私钥,⽤公钥加密的内容,可以使⽤私 钥解密,反之亦然,不过我们平常所说的key⽂件是指私钥⽂ 件。 CSR:CertificateSigningRequest 证书签名请求,⾥⾯包含公钥 等个体信息,这个发给公证机构作为申请,通过这个公证机构颁 发证书给你。 CRT:certificate 证书⽂件,是证书机构颁发的保证安全通信的 ⽂件,由域名、公司信息、序列号和签名信息等组成。 CER:也是证书⽂件,和CRT相⽐只是缩写不同,CRT缩写常⻅ 于类uninx系统,CER缩写常⻅于 Windows 系统。 X.509:这⾥特指颁发的证书的格式,⽽其根据不同的编码格式 分为PEM和DER。 a. PEM-PrivacyEnhancedMail,打开看⽂本格式,以“----- BEGIN "开头,"----- END”结尾,内容是 BASE64 编码。 Apache 和 NGINX 服务器偏向于使⽤这种编码 格式,这种也是 我们所常⻅的。 b. DER-DistinguishedEncodingRules,打开是⼆进制格式,不 可读。Java和Windows服务器偏向于使⽤这种编码格式。CA:CatificateAuthority证书颁发机构,它的作⽤就是给各个⽤ 户签发证书等,⽐如说 Symantec、Comodo、Godaddy、 GolbalSign和Digicert等。 openssl:相当于SSL的⼀个实现,如果把SSL规范看成OO中的 接⼝,那么OpenSSL则认为是接⼝的实现,个⼈理解openssl是 作为针对SSL/TLS的⼀个⼯具,包括对证书的解析,个⼈颁发, 证书编码转化等。

2、HTTPS 安全通信的四⼤原则

(1)机密性 就是对数据的加密,在传输数据的过程当中,如果被⼈劫持了数 据,那么这个加密的数据对⽅不能轻易获得。 (2)完整性 是指数据在发送到接收的过程当中没有被篡改,从⽽接收到的数据 是⼀个完整的数据内容。 (3)身份认证 数据传输的过程当中对于身份的验证,确认对⽅是传送数据过来的 ⼈。可以解决冒充这样的⻛险。(4)不可否认性 不能否认已经发⽣的⾏为。⽐如刚才举例双⽅借钱需要有借据并且 签名按⼿印,如此⼀来就不能抵赖。

3、通信原理

(1)对称加密 对称加密:通信双⽅都使⽤同⼀把密钥给报⽂进⾏加密和解密。 (密码验证) 对称加密具备速度快,性能⾼的特点。是HTTPS的最终采⽤的加密 ⽅式。 对称加密的通信过程中双⽅都需要同样的密钥。 (2)⾮对称加密 ⾮对称加密:解决单项对称密钥的传输问题。就是加密和解密的 双⽅使⽤不同的密钥。(密钥对验证) 公钥, 是可以公开的。私钥,不能公开。 公钥加密的内容只有私钥可以解密,私钥加密的内容只有公钥可 以解密。 (3)对称加密和⾮对称加密的综合版本 1. 某⽹站拥有⽤于⾮对称加密的公钥A、私钥A。2. 浏览器向⽹站服务器请求,服务器把公钥A明⽂给传输浏览器。 3. 浏览器随机⽣成⼀个⽤于对称加密的密钥X,⽤公钥A加密后传 给服务器。 4. 服务器拿到后⽤私钥A解密得到密钥X。 5. 这样双⽅就都拥有密钥X了,且别⼈⽆法知道它。之后双⽅所有 数据都通过密钥X加密解密即 可。 成功!HTTPS基本就是采⽤了这种⽅案。 还有⼀个问题,公钥在传输过程中,也有可能被劫持替换,解决办 法是数字证书。 (4)CA 认证机构,称为CA。服务端可以向CA申请认证证书,在证书上附加 公钥信息,然后发布给客户端。服务端在申请证书的过程中,会提 交⽐如DNS主机名等⽹站信息,CA会根据这些信息⽣成证书。 (5)证书 如此⼀来,客户端拿到证书之后,就可以获得证书上⾯我们附带的 公钥,再⽤这个公钥加密‘对称加密的密钥’传递给服务端。 (6)数字签名 证书的真假可以通过数字签名来验证。数字签名就相当于学历证书 上的证书编号。

五、Apache 概念

1、概述

最早的 web 服务程序,基于 http 协议提供⽹⻚浏览服务。

2、特点

模块化设置、开放源代码、跨平台应⽤、⽀持多种 web 编程语 ⾔、运⾏稳定。

3、⼯作模式

(1)Prefork:使⽤进程处理请求,在该模式中⽐较消耗内存,但稳 定性⾼,如某个进程出现问题,不会影响其他请求。 (2)Worker:属于多进程模式,每个进程⽣成多个进程;在该模式下 消耗的资源⽐较⼩,适合⾼并发请求,但稳定性没有 Prefork 模式稳 定。 (3)Event:该模式与 Worker 模式较为相似,不同之处在于在该模 式下可以解决keepalive ⻓连接时占⽤线程资源导致浪费的问题。(4)keep-alive ⻓连接:TCP连接在发送后将仍然保持打开状态, 于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为 每个请求建⽴新连接所需的时间,还节约了带宽。实现⻓连接要客户 端和服务端都⽀持⻓连接。

六、搭建 apache 服务器

1、安装并设置防⽕墙

[root@server2 ~]# yum -y install httpd
上次元数据过期检查:6:39:47 前,执⾏于 2023年08⽉31⽇ 星
期四 15时10分42秒。
依赖关系解决。
===================================================
===========
软件包 架构 版本 仓库
⼤⼩
===================================================
===========
安装:
 httpd x86_64 2.4.37-
51.module+el8.7.0+1059+126e9251
......省略部分安装信息......
[root@server2 ~]# systemctl start httpd #启
动apache
[root@server2 ~]# netstat -anpt | grep httpd #查
看端⼝确认apache已启⽤
tcp6 0 0 :::80 :::* 
 LISTEN 3512/httpd 
[root@server2 ~]# systemctl status
firewalld.service #查看防⽕墙是否启⽤,若启⽤则设置
apache服务可通⾏规则
● firewalld.service - firewalld - dynamic firewall
daemon
 Loaded: loaded
(/usr/lib/systemd/system/firewalld.service;>
 Active: active (running) since Thu 2023-08-31
21:49:59 CST>
......省略部分状态信息......
[root@server2 ~]# firewall-cmd --permanent --addservice=http #设置防⽕墙放⾏apache
success
[root@server2 ~]# firewall-cmd --reload #重载防
⽕墙规则
success
[root@server2 ~]# firewall-cmd --list-all #查看当
前区域下防⽕墙所有规则
public (active)
 target: default
 icmp-block-inversion: no
 interfaces: ens32 ens34 ens35
 sources:
 services: cockpit dhcpv6-client http ssh 
#apache(http)已放⾏
 ports: 873/tcp
 protocols:
 forward: no
 masquerade: no
 forward-ports:
 source-ports:
 icmp-blocks:
 rich rules:

2、apache 配置⽂件

yum 安装的 apache,配置⽂件在 /etc/httpd/conf/httpd.conf 如果是编译安装的 apache,那么配置⽂件在⾃⼰编译安装的安 装⽬录下
[root@server2 ~]# vim /etc/httpd/conf/httpd.conf
37 # Listen: Allows you to bind Apache to specific
IP addresses and/or
38 # ports, instead of the default. See also the
<VirtualHost>
39 # directive.
40 #
41 # Change this to Listen on specific IP addresses
as shown below to
42 # prevent Apache from glomming onto all bound IP
addresses.
43 #
44 #Listen 12.34.56.78:80
45 Listen 80 #默认的httpd监听端⼝,可在下⾯添加其他⾃
设端⼝
46
47 #
48 # Dynamic Shared Object (DSO) Support
......省略部分内容
92 # ServerName gives the name and port that the
server uses to identify itself.
93 # This can often be determined automatically,
but we recom mend you specify
94 # it explicitly to prevent problems during
startup.
95 #
96 # If your host doesn't have a registered DNS
name, enter i ts IP address here.
97 #
98 ServerName www.example:80 #指定httpd服务域
名和该域名的端⼝,可以⼿动修改其他域名
99
100 #
101 # Deny access to the entirety of your server's
filesystem. You must

3、apache 索引⽂件

在⼀般的前段服务器中http nginx tomcat,在没有指定⽂件路径的时 候,默认先访问资源⽂件夹中的index.xxx ./html/index.html httpd 使⽤ yum 安装时,默认的站html⽂件在 /var/www/html/index.html,如果 index.html ⽂件不存在,需要 ⼿动创建 在⽹站⽅⾯,index通常是指主⽬录的意思,index.html是⽬录下 默认打开的⻚⾯。 ⽐如,⽹站的域名是www.abc,如果设置了 index.html 是 默认主⻚,那么打开 http://www.abc 和打开⻚⾯ http://ww w.abc/index.html 就是⼀样的。他们打开的都是⽹站⾸⻚, 因为index.html是⽹站默认的主⻚。 在 index.html 写⼊如下内容,可以让主⻚显示⼀个圆形,圆⼼处 显示⽂字“这就是主⻚”
[root@server2 ~]# vim /var/www/html/index.html
<!DOCTYPE html>
<html>
 <head>
 <meta charset="utf-8">
 <title>ssjie's page</title>
 <style type="text/css">
 .bigMom{
 margin:0 auto;
 width:600px; 
#圆的半径宽度
 height:600px; 
#圆的半径⾼度
 line-height:600px; 
#⾏间距
 text-align:center; 
#⽂字位置:居中
 color:black; 
#⽂字颜⾊:⿊⾊
 border-radius:50%; 
#圆⻆率,50%是圆
 backgroundcolor:cyan; #圆的颜⾊:⻘⾊
 }
 </style>
 </head>
<body>
 <div class="bigMom">
 欢迎来到主⻚!
 </div>
 </body>
</html>
:wq #保存并退出
[root@server2 ~]# systemctl reload httpd #重载配
置单

4、服务器访问测试

浏览器内输⼊搭建好的 httpd 服务器 IP 地址或域名(当前服务 器地址为 192.168.33.110)

5、IP 不同,域名相同的虚拟主机

(1)修改主配置 设置 IP 相同,域名不同的虚拟主机,配置⽂件在 /etc/httpd/conf/httpd.conf .htaccess ⽂件:可以实现,⽂件夹密码保护、⽤户⾃动重定 向、⾃定义错误⻚⾯、改变你的⽂件扩展名、封禁特定IP地址的 ⽤户、只允许特定IP地址的⽤户、禁⽌⽬录列表,以及使⽤其他 ⽂件作为index⽂件等⼀些功能。
[root@server2 ~]# vim /etc/httpd/conf/httpd.conf
45 Listen 80
46
47 ServerName www.yh666:80 #添加
如下内容,域名⾃起,IP地址为⾃⼰的主机
48
49 NameVirtualHost 192.168.33.110
50 <VirtualHost 192.168.33.110>
51 DocumentRoot /var/www/html/yang #标明
索引⽂件路径,所以还需⾃⼰在该路径创建新的索引⽂件
52 ServerName www.yh666 #域名
⾃起
53 <directory /var/www/html/yang>
54 allowoverride None #确定
是否被允许读取.htaccess⽂件内容
55 require all granted #允许
所有⽤户访问指定的(/var/www/html)⽂档或⽬录
56 </directory>
57 </virtualhost>
58
59 <virtualhost 192.168.33.110>
60 documentroot /var/www/html/hong #同上
61 servername www.hong777
62 <directory /var/www/html/hong>
63 allowoverride none
64 require all granted
65 </directory>
66 </virtualhost>
:wq #保存并退出
[root@server2 html]# systemctl reload httpd.service 
#重载服务
(2)创建索引⽂件 索引⽂件:index.html,⼀般为⽹站的⾸⻚。
[root@server2 ~]# cd /var/www/html/ #移动
到索引⽂件所在位置
[root@server2 html]# ls #当前
⽬录下有个索引⽂件模板
index.html
[root@server2 html]# mkdir yang #创建
与上⾯主配置对应的索引⽬录 yang
[root@server2 html]# cp -p index.html yang/ #将索
引⽂件的模板复制到新建的yang⽬录下
[root@server2 html]# mkdir hong #创建
与上⾯主配置对应的索引⽬录 hong
[root@server2 html]# cp -p index.html hong/ #复制
索引⽂件到hong⽬录下
[root@server2 ~]# vim /var/www/html/yang/index.html 
#第⼀个域名的索引⽂件
[root@server2 ~]# vim /var/www/html/hong/index.html 
#第⼆个域名的索引⽂件
#修改⽅式如下:
19 <body>
20 <div class="bigMom">
21 这⾥是www.yh666! 
#仅测试情况下,修改此处即可
22 </div> 
#两个⽂件都改,避免测试⽆效
23 </body>
:wq #保存并退出
3)修改本地 hosts 本地 hosts:将⼀些常⽤的⽹址域名与其对应的IP地址建⽴⼀个 关联“数据库”,当⽤户在浏览器中输⼊⼀个需要登录的⽹址时, 系统会⾸先⾃动从Hosts⽂件中寻找对应的IP地址,⼀旦找到, 系统会⽴即打开对应⽹⻚,如果没有找到,则系统会再将⽹址提 交DNS域名解析服务器进⾏IP地址的解析。 如果该⽂件需要权限,那么右键该⽂件,进⼊“属性”,点击“安 全”选项卡,找到⾃⼰电脑的主⽤户,点编辑,然后再根据图示 给予⽤户权限。                   以记事本或 notepad ⽅式打开本地 hosts ⽂件,最下⾏输⼊ IP 和域名,记得要与 httpd 的配置⽂件内的对应。 (4)域名访问测试 Ⅰ. 浏览器输⼊配置好的域名 www.yh666 Ⅱ. 浏览器输⼊ www.hong777

6、IP 相同,端⼝不同的虚拟主机

(1)修改主配置 编辑 /etc/httpd/conf/httpd.conf 配置⽂件
[root@server2 ~]# vim /etc/httpd/conf/httpd.conf
45 Listen 80
46 Listen 88 #添加⼀个88端⼝
47
48 ServerName www.yh666:80
49
50 NameVirtualHost 192.168.33.110
51 <VirtualHost 192.168.33.110:80>
52 DocumentRoot /var/www/html/yang
53 ServerName www.yh666
54 <directory /var/www/html/yang>
55 allowoverride None
56 require all granted
57 </directory>
58 </virtualhost>
59
60 <virtualhost 192.168.33.110:88> #修改
hong777的虚拟主机端⼝为88,其余内容不变
61 documentroot /var/www/html/hong
62 servername www.hong777
63 <directory /var/www/html/hong>
64 allowoverride none
65 require all granted
66 </directory>
67 </virtualhost>
:wq #保存并退出
[root@server2 html]# systemctl reload httpd.service 
#重载服务
(2)访问测试 浏览器内分别输⼊ 192.168.33.110:80 和 192.168.33.110:88 在访问时记得关闭防⽕墙或者修改防⽕墙放⾏端⼝规则。
[root@server2 ~]# firewall-cmd --add-port=88/tcp 
#添加tcp协议的88端⼝防⽕墙放⾏服务
success
[root@server2 ~]# firewall-cmd --list-all
public (active)
 target: default
 icmp-block-inversion: no
 interfaces: ens32 ens34 ens35
 sources:
 services: cockpit dhcpv6-client http ssh
 ports: 873/tcp 88/tcp #添加成功
 protocols:
 forward: no
masquerade: no
 forward-ports:
 source-ports:
 icmp-blocks:
 rich rules:

7、域名相同,IP 不同的虚拟主机

(1)添加⽹络⼦接⼝
[root@server2 ~]# ifconfig ens32:0
192.168.33.120/24 #添加⽹卡虚拟⼦接⼝命令格式
[root@server2 ~]# ifconfig #查询当前系统存在的⽹卡信
息
......省略部分⽹卡信息......
ens32:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> 
mtu 1500
 inet 192.168.33.120 netmask 255.255.255.0 
broadcast 192.168.33.255
 ether 00:0c:29:bd:1a:25 txqueuelen 1000 
(Ethernet)
......省略部分⽹卡信息......
(2)修改主配置
[root@server2 ~]# vim /etc/httpd/conf/httpd.conf
45 Listen 80
46 Listen 88
47
48 ServerName www.yh666:80
49
50 NameVirtualHost 192.168.33.110
51 <VirtualHost 192.168.33.110:80>
52 DocumentRoot /var/www/html/yang
53 ServerName www.yh666
54 <directory /var/www/html/yang>
55 allowoverride None
56 require all granted
57 </directory>
58 </virtualhost>
59
60 <virtualhost 192.168.33.120:88> #修改此处IP
地址为虚拟⼦接⼝,其余不变
61 documentroot /var/www/html/hong
62 servername www.hong777
63 <directory /var/www/html/hong>
64 allowoverride none
65 require all granted
66 </directory>
67 </virtualhost>
:wq #保存并退出
[root@server2 html]# systemctl reload httpd.service 
#重载服务
(3)访问测试 浏览器输⼊分别 192.168.33.110 和 192.168.33.120

Nginx

1、Nginx 简介

Nginx(engine X):开源、轻量级、⾼性能的 HTTP 和反向代 理服务器,可以代理 HTTP、IMAP/POP3/SMTP 和 TCP/UDP 协议。 基本特点:占⽤内存少、并发能⼒强,采⽤ C 语⾔编写,在性 能⽅⾯有⼀定保证。 Nginx 可以⽤来做负载均衡及反向代理使⽤,⽬前使⽤最多的是 负载均衡。 与 Nginx 同类的 Web 服务有 Apache、Tomcat 等。 官⽅⽹站:http://nginx/

2、Nginx 服务器特点

(1)模块化设计 Nginx 将模块分为核⼼模块、HTTP 模块、事件模块和邮件模块 四类。每个模块都有特定的职责,从⽽实现了整个 Web 服务器 的功能。 (2)低内存消耗,⾼并发 Nginx 使⽤ epoll and kqueue 作为开发⼯具,能够⽀持最⼤ 50000 个并发连接数的响应;不论是系统资源开销还是 CPU 使 ⽤效率都很优秀。 (3)事件驱动 nginx 采⽤异步⽅式处理请求。 同步:指在发送⽅发出消息后,需要等待接收到接收⽅发回的响 应,或者通过回调函数来接收到对⽅响应信息。 异步:指在发送⽅发出请求后,接收⽅不需要返回消息或者不等 待返回消息,直接提供响应请求机制。 (4)⾼可靠性,master 与 worker 架构 ⼀个主进程和多个⼯作进程。⼯作进程是单线程的,且不需要特 殊授权即可运⾏; master进程:主要⽤来监控worker进程⼯作状态进⾏相应重 启、停⽌等操作。 worker进程:进⾏具体提供服务,接受请求和处理请求。 (5)⽀持热更新配置、⽇志⽂件滚动、平滑升级 /usr/local/nginx/sbin/nginx -s reloadhtml⽬录中的⽂件发上修改之后,不需要nginx服务 可向 master 发送 USR1、QUIT 等信号,⽆需强制停⽌服务即 可完成热更新。 向 master 发送的 USR1,可实现⽇志⽂件滚动。 向 master 发送的 USR2,可实现平滑升级。 (6)丰富的扩展模块 可在编译安装 nginx 时指定拓展模块,例如:nginx-sticky module 模块(基于 cookie 来进⾏负载转发)。

3、Nginx 和 Apache 区别

(1)架构 Apache 采⽤多进程架构,每个请求都由⼀个独⽴的进程处理; ⽽Nginx采⽤异步事件驱动的架构,可以处理更多的并发连接。 (2)性能 由于Nginx的架构设计,它可以处理更多的并发连接,⽽且在⾼ 负载情况下表现更加稳定和可靠。因此,Nginx通常被认为是⽐ Apache更⾼效的Web服务器。(3)配置 Apache 的配置⽂件⽐较复杂,需要⼀定的学习和经验才能正确 配置;⽽ Nginx 的配置⽂件⽐较简洁和可读性强,更容易理解 和配置。 (4)功能 ngin x有许多模块可以扩展其功能,例如 mod_rewrite ⽤于 URL 重写,mod_ssl⽤于 SSL 加密等;⽽apach 的功能⽐较简 单,但是可以通过第三⽅模块扩展其功能。

4、Nginx 基本功能

(1)静态资源 Web 服务器 nginx 可实现动静资源分离 动态资源:需要程序处理或者从数据库中读数据,能根据不同的 条件在⻚⾯显示不同的数据。 静态资源:前端的固定⻚⾯,这⾥⾯包含HTML、CSS、JS、图 ⽚、⾳乐等等,不需要查数据库也不需要程序处理,直接就能够 显示的⻚⾯。 动静分离:当使⽤ nginx 处理静态⻚⾯时,可将⽤户的动态请求 转发给后端的 tomcat 或 PHP 处理动态⻚⾯。 前后端,前端就是完全的静态资源, (2)基于域名/IP/端⼝的虚拟主机 虚拟主机:在Web服务⾥就是⼀个独⽴的⽹站站点,这个站点对 应独⽴的域名(也可能是IP或端⼝),具有独⽴的程序及资源⽬ 录,可以独⽴地对外提供服务供⽤户访问。 ⼀个 nginx 主进程,指定⼀个配置⽂件,配置⽂件内有多个虚拟 主机。如果不⽤虚拟机,⼀个域名就要对应⼀个服务器,浪费资 源。 Ⅰ.基于域名的虚拟主机 以不同的多个域名区分不同的虚拟主机(IP 相同),放在⼀个 nginx服务上,能够让⽤户有序访问⽣产⽤途,例如:www.jd.c om 和 diannao.jdchannel.jd。 Ⅱ.基于端⼝的虚拟主机 以不同的端⼝,来区分多个虚拟主机,也是放在⼀个nginx服务 上,能够让⽤户有序访问,例如:192.168.33.110:8080、www. baidu:8080. Ⅲ.基于 IP 的虚拟主机 以不同 IP 区分不同的虚拟主机。 (3)HTTP/HTTPS、SMTP、POP3 和 TCP/UDP 反向代理 客户端代理,增强客户端的作⽤ 反向代理是保护服务器 反向代理是⼀种代理服务器的配置模式,它代表服务器向客户端 提供服务。 客户端发送请求到反向代理服务器,然后代理服务器将请求转发 到后端的真实服务器上,并将响应返回给客户端。 简单理解为⽤户直接访问反向代理服务器就可以获得⽬标服务器 的资源。 (4)负载均衡 所谓负载均衡,就是 Nginx 把请求均匀的分摊给上游的应⽤服 务器,这样即使某⼀个服务器宕机也不会影响请求的处理,或者 当应⽤服务器扛不住了,可以随时进⾏扩容。 (5)⻚⾯缓存 Nginx 不仅仅是⼀个 Web 服务器,它还可以作为⼀个缓存服务 器使⽤。 通过 Nginx 缓存,可以对⼀些静态资源或者数据更新频率较低 的后端服务做缓存,降低静态资源或后端服务的响应时间,同时 也会降低后端的负载。 ⽐如对⼀些图⽚,css或js做⼀些缓存,那么在每次刷新浏览器 的时候,就不会重新请求了,⽽是从缓存⾥⾯读取。这样就可以 减轻服务器的压⼒。 (6)⽀持代理 FastCGI、uWSGI 等应⽤服务器CGI:描述了服务器(nginx,apache)和请求处理程序 (django,flask,springboot web框架)之间传输数据的⼀种标 准。定义了客户端与服务器之间如何传输数据。 FastCGI:快速通⽤⽹关接⼝(Fast Common Gateway Interface/FastCGI)是⼀种让交互程序与Web服务器通信的协 议。FastCGI是早期通⽤⽹关接⼝(CGI)的增强版本。 WSGI:为Python定义的 web 服务器和 web 框架之间的接⼝标 准。 uwsgi:uWSGI 服务器实现的独有的协议,定义传输信息的类 型,是⽤于前端服务器与 uwsgi 的通信规范(uWSGI 服务器⾃ 由的⼀个协议)。 uWSGI:⼀个Web Server(web服务器),即⼀个实现了WSGI 协议的服务器,处理发来的请求及返回响应。 web 服务器: 客户端(浏览器,app)跟服务器(web框架)之间的东⻄,服务器 中间件 # nginx apache 是⼀类东⻄,就是做请求转 发,符合fastcgi服务器 # uWSGI,gunicorn 只针对于python的web框架 # tomcat,jboss,weblogic 只针对java的web框架 # php-fpm 针对于php的框架(7)⽀持 gzip、expires 当运维⼈员将要锁包放到html中,会⾃动部署 nginx ⽀持资源压缩和缓存控制。 (8)URL Rewrite 192.168.1.3/abc 192.168.1.3/a/b/c/ Rewrite 主要实现url地址重写,以及重定向,就是把传⼊web的 请求重定向到其他 url的过程。 (9)路径别名 资源路径的别名(root 和 alias)。 (10)基于 IP、⽤户的访问控制 nginx 可对指定 IP ⽹段或某个特定 IP 做访问控制(allow:允 许;deny:拒绝)。 (11)⽀持访问速率、并发限制

5、Nginx 架构

1)主进程(master process 主要与外界通信和⼯作进程管理。 读取 nginx 配置⽂件并验证有效性。 建⽴、绑定和关闭 socket(套接字,IP地址:端⼝号)。 按照配置⽂件⽣成、管理和结束⼯作进程。nginx 重启、停⽌、重载配置⽂件、平滑升级、管理⽇志⽂件 等。 (2)⼯作进程(worker process) 接受客户端请求,将请求交给各个功能模块处理。 接收主进程的指令并执⾏。 与后端服务器通信,接收后端服务器处理的结果,发送结果给客 户端。 数据缓存管理。 访问缓存索引、重建、查询和调⽤缓存数据。cache 模块,主要 由缓存索引重建和缓存索引管理两个进程完成,缓存索引重建进 程是在进程 nginx 服务启动⼀段时间之后,由主进程⽣成,对本 地磁盘的索引⽂件在内存中建⽴元数据库,包括扫描、过期更新 等操作,完成后退出。 系统 IO 调⽤,获取响应数据,发送响应给客户端。

八、Nginx ⽀持⾼并发的原因

1、 事件驱动模型

Nginx采⽤了异步事件驱动模型,它使⽤⼀个单独的⼯作进程来 处理多个连接,每个连接都是异步的,不会阻塞其他连接。这种 模型使得Nginx能够处理⼤量并发连接,⽽不会消耗过多的系统 资源。

2、 ⾼效的内存管理

Nginx使⽤内存池来管理内存分配,避免了频繁的内存分配和释 放操作,从⽽提⾼了效率。此外,Nginx还采⽤了零拷⻉技术, 减少了数据在内存和磁盘之间的复制次数,进⼀步提⾼了性能。

3、 负载均衡

Nginx可以作为反向代理,将请求分发给多个后端服务器,从⽽ 实现负载均衡。这样⼀来,每个后端服务器只需要处理部分请 求,整个系统的负载得到了均衡,提⾼了系统的并发能⼒。

4、⾼度可定制化

Nginx⽀持动态模块加载,⽤户可以根据⾃⼰的需求选择需要的 模块进⾏编译和加载,从⽽提⾼了灵活性和可扩展性。

九、Nginx 的 I/O 模型

1、阻塞 I/O 模型

简介:进程会⼀直阻塞,直到数据拷⻉完成 应⽤程序调⽤⼀个I/O函数,导致应⽤程序阻塞,等待数据准备 好,如果数据没有准备好,⼀直等待...... 当数据准备好,从内核拷⻉到⽤户空间,I/O函数返回成功。 阻塞I/O模型图:在调⽤recvfrom,发⽣在内核中等待数据和复 制数据过程: 当调⽤recv()函数时,系统⾸先检查是否有准备好的数据,如果 数据没有准备好,那么系统就处于等待状态,当数据准备好后, 将数据从系统缓冲区复制到⽤户空间,然后函数返回

2、⾮阻塞 I/O 模型

简介:我们把⼀个套接⼝设置为⾮阻塞就是告诉内存,当所请求 的I/O操作⽆法完成时,不要惊扰进程睡眠,⽽是返回⼀个错误 ,这样I/O函数会不断的测试数据是否准备好,没有准备好, 继续测试,直到数据准备好为⽌。在测试的过程中会占⽤⼤量的 CPU时间。

3、I/O 复⽤模型

简介:主要是 select 和 epoll;对于⼀个 I/O 端⼝,两次调⽤, 两次返回,⽐阻塞I/O并没有什么优势,只是能实现同时对多个 I/O 端⼝进⾏监听。 I/O 复⽤模型会调⽤selectpoll函数,这⼏个函数也会使进程 阻塞,但是和阻塞I/O不同的,这个函数可以同时阻塞多个 I/O 操作,⽽且可以同时对多个读操作,多个写操作的 I/O 函数进⾏ 检测,直到有数据可读或可写时,才真正调⽤I/O操作函数。

4、信号驱动 I/O

简介:两次调⽤,两次返回。 ⾸先允许套接⼝进⾏信号驱动 I/O,并安装⼀个信号处理函数, 进程继续运⾏并不阻塞。等数据准备好时,进程会收到⼀个 SIGIO信号,可以在信号处理函数中调⽤I/O操作函数处理数 据。

5、异步I/O模型

简介:数据拷⻉的时候进程⽆需阻塞 当⼀个异步过程调⽤发出后,调⽤者不能⽴刻得到结果。实际处 理这个调⽤的部件在完成后,通过状态,通知和回调通知调⽤者 输⼊输出操作。 同步 I/O 引起进程阻塞,直到 I/O 操作完成。 异步 I/O 不会引起进程阻塞。 I/O 复⽤先通过select调⽤阻塞。

十、Nginx ⽀持的并发模型

1、select 模型

IO多路复⽤、标准并发模型。在编译 nginx 时,如果所使⽤的系 统平台没有更⾼效的并发模型,select 模块将被⾃动编译。 configure 脚本的选项:–with-select_module 和 --without select_module (可被⽤来强制性地开启或禁⽌ select 模块的编 译)。

2、poll 模型

IO多路复⽤、标准并发模型。与 select 类似,在编译 nginx 时,如果所使⽤的系统平台没有更⾼效的并发模型,poll 模块将 被⾃动编译。 configure 脚本的选项:–with-poll_module 和 --without poll_module 可⽤于强制性地开启或禁⽌ poll 模块的编译

3、epoll 模型

IO多路复⽤、⾼效并发模型,可在 Linux 2.6+ 及以上内核可以 使⽤

4、kqueue 模型

IO多路复⽤、⾼效并发模型,可在 FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0, and Mac OS X 平台中使⽤

5、/dev/poll 模型

⾼效并发模型,可在 Solaris 7 11/99+, HP/UX 11.22+ (eventport), IRIX 6.5.15+, and Tru64 UNIX 5.1A+ 平台使⽤

6、eventport 模型

⾼效并发模型,可⽤于 Solaris 10 平台,PS:由于⼀些已知的 问题,建议 使⽤/dev/poll替代。

十一、select 模型与 epoll 模型⽐较

Apache 常⽤ select 模型 Nginx 常⽤的 epoll 模型

1、select

最⼤并发数限制,因为⼀个进程所打开的 FD (⽂件描述符)是 有限制的,由 FD_SETSIZE 设置,默认值是 1024/2048,因此 Select 模型的最⼤并发数就被相应限制了。如果改这个 FD_SETSIZE ?想法虽好,可是先看看下⾯吧。 效率问题, select 每次调⽤都会线性扫描全部的 FD 集合,这 样效率就会呈现线性下降,把 FD_SETSIZE 改⼤的后果就是: 等待时间过⻓,容易超时。 内核 / ⽤户空间的内存拷⻉问题,如何让内核把 FD 消息通知给 ⽤户空间呢?在这个问题上 select 采取了内存拷⻉⽅法,在FD ⾮常多的时候,⾮常的耗费时间。 总结为:1、连接数受限 2、查找配对速度慢 3、数据由内核拷 ⻉到⽤户态消耗时间

2、epoll

Epoll 没有最⼤并发连接的限制,上限是最⼤可以打开⽂件的数 ⽬,这个数字⼀般远⼤于 2048,⼀般来说这个数⽬和系统内存 关系很⼤ ,具体数⽬可以 cat /proc/sys/fs/file-max 查看。效率提升, Epoll 最⼤的优点就在于它只管你“活跃”的连接 ,⽽ 跟连接总数⽆关,因此在实际的⽹络环境中, Epoll的效率就会 远远⾼于 select 和 poll 。 内存共享, Epoll 在这点上使⽤了“共享内存 ”,这个内存拷⻉也 省略了。

十二、衡量网站⼤⼩和处理能⼒的指标

常⽤的⽹站性能测试指标有:吞吐量、并发数、响应时间、性能 计算等。 ⼀个⽹站优化的⽬的即是,最⼤限度的利⽤好服务器硬件资源提 升资源利⽤率,减少⽤户请求的响应时间,提⾼系统吞吐量,提 ⾼系统并发数。 Thread.sleep(1500)

1、并发数

12306 并发数是指系统同时能处理的请求数量,这个也是反映了系统的 负载能⼒。

2、响应时间

响应时间是指发出⼀个请求时,从开始到最后收到该请求的响应 数据时,所花费的总体时间。响应时间是⼀个系统最重要的指标 之⼀,该数值的⼤⼩直接反映了系统的快慢。作为运维⼈员,要 确保⽹站响应时间在客户可接受的范围内,⼀般在 3~10 秒。

3、吞吐量

吞吐量是指单位时间内系统能处理的请求数量,体现系统处理请 求的能⼒,这是⽬前最常⽤的性能测试指标。 QPS(每秒查询数)、TPS(每秒事务数)是吞吐量的常⽤量化 指标。 还有 HPS(每秒 HTTP 请求数)。 QPS(TPS)、并发数、响应时间三者的关系为:QPS(TPS) =并发数 ÷ 响应时间。

4、性能计数器

性能计数器是描述服务器或操作系统性能的⼀些数据指标,如使 ⽤内存数、进程时间,在性能测试中发挥着“监控和分析”的作 ⽤,尤其是在分析系统可扩展性、进⾏新能瓶颈定位时有着⾮常 关键的作⽤。 Linux 中可以使⽤ top 或者 uptime 命令看到当前系统的负载及 资源利⽤率情况。资源利⽤率:指系统各种资源的使⽤情况,如cpu占⽤率为 68%,内存占⽤率为55%,⼀般使⽤“资源实际使⽤/总的资源可 ⽤量”形成资源利⽤率。

十三、Nginx 安装

1、yum 安装 nginx

[root@server2 ~]# yum -y install nginx #yum安装
nginx
......省略安装过程......
[root@server2 ~]# nginx -v
nginx version: nginx/1.24.0 #nginx版本
[root@server2 ~]# systemctl start nginx #启动
nginx
[root@server2 ~]# ps -ef | grep nginx | grep -v
grep #查看nginx进程
root 1088 1 0 20:22 ? 
00:00:00 nginx: master process
/usr/local/nginx/sbin/nginx
nginx 1089 1088 0 20:22 ? 
00:00:00 nginx: worker process

2、编译安装 nginx

(1)安装 pcre ⾸先安装 pcre。此软件是为了⽀持 rewrite(重写、复写)功能 ⽽存在的。rewrite 是实现 url 重定向的重要命令,它会根据正则 表达式来匹配内容,从⽽跳转到⽬标上⾯去。
[root@server2 ~]# yum -y install pcre-devel
......省略安装过程......
(2)安装 OpenSSL 当没有使⽤ ssl 证书对服务器数据进⾏加密认证时,⽤户的数据 将会以明⽂的形式进⾏传输,⽽此时,⽤户的数据可以被⼀些抓 包⼯具获取,就容易造成⽤户的信息泄露。 所以为了改善这种情况,作为运维⼈员需要去为⽹站配置 ssl 证 书,实现 https 协议的访问。
[root@server2 ~]# yum -y install openssl-devel
......省略安装过程......
(3)编译安装 nginx 1. 如果之前在系统上有 yum 安装的 nginx,那么在编译安装之前 需要先卸载掉原来的 nginx。
[root@server2 ~]# yum -y remove nginx #卸载
nginx
......省略卸载过程......
 在安装之前还要安装⽤来编译的⼯具 gcc、gcc-c++、make; lrzsz 是⽤来从 Windows 上直接将⽂件导⼊到 Linux 内的⼯具。
[root@server2 ~]# yum -y install gcc gcc-c++ make
lrzsz #安装所需⼯具
......省略安装过程......
将 nginx-1.22.1.tar.gz 包拖进 root ⽬录内。 解压 nginx-1.22.1.tar.gz 安装包,并 cd 到 nginx 安装包⽬录下(/usr/src/nginx-1.22.1)
[root@YH2 ~]# tar -xf nginx-1.22.1.tar.gz -C
/usr/src/ #将安装包解压到⼀个指定路径
[root@YH2 ~]# cd /usr/src/nginx-1.22.1/ #cd到安装
包⽬录下
[root@YH2 nginx-1.22.1]# ls
auto CHANGES.ru configure html man 
src
CHANGES conf contrib LICENSE README
configure 预配置需要在安装包⽬录下,也就是 /usr/src/nginx- 1.22.1
[root@YH2 nginx-1.22.1]# ./configure --
prefix=/usr/local/nginx --user=nginx --group=nginx
--with-http_ssl_module --withhttp_stub_status_module --with-http_realip_module
--with-stream
#命令分步解释:
 ./configure:“./”再需要解释就别学运维了。
“configure”,编译安装前的预配置。
--prefix=/usr/local/nginx:指定软件的安装路径,注意不
是安装包⽬录,⽽是软件要安装在哪。
--user=nginx:程序⽤户为nginx。
--group=nginx:组为nginx。
--with-http_ssl_module:提供HTTPS⽀持,ssl证书模块。
--with-http_stub_status_module:获取nginx⼯作状态模
块。
--with-http_realip_module:获取真实客户端IP。
--with-stream:启⽤TCP/UDP代理模块。
 ......省略预配置过程......
进⾏编译安装 nginx 注意:在 make 和 make install 时需要在/usr/src/nginx-1.22.1 ⽬录下,别在 root ⽬录下了,低级错误别犯了。如果预配置或编译安装失败,要注意好⾃⼰是否已安装之前的软 件⼯具。
[root@YH2 nginx-1.22.1]# pwd #查看当前所在⽬录的绝
对路径
/usr/src/nginx-1.22.1
[root@YH2 nginx-1.22.1]# make && make install
......省略部分编译和编译安装内容.......
make[1]: 离开⽬录“/usr/src/nginx-1.22.1”
#编译安装完成
安装完成有创建⽤户,否则⽆法启动 useradd -s /bin/nologin -M nginx

3、nginx 常用编译参数

4、nginx 的⽬录结构和构成⽂件

[root@YH2 nginx-1.22.1]# cd /usr/local/nginx/ #cd
到nginx软件⽬录下
[root@YH2 nginx]# ls 
conf html logs sbin #nginx软件构成的⽬录
#conf:存放nginx配置⽂件的⽬录
#html:存放资源⽂件也就是⽹站⾸⻚(站点根⽬录)的⽬录
#logs:存放nginx⽇志的⽬录
#sbin:存放nginx可执⾏程序的⽬录
[root@YH2 nginx]# ls ./conf #nginx所有配置⽂件
fastcgi.conf nginx.conf
fastcgi.conf.default nginx.conf.default
fastcgi_params scgi_params
fastcgi_params.default scgi_params.default
koi-utf uwsgi_params
koi-win uwsgi_params.default
mime.types win-utf
mime.types.default
[root@YH2 nginx]# ls ./html/ #⽹站根⽬录
50x.html index.html #⾸⻚索引⽂件。50x.html:错误
⾸⻚;index.html:⽹站⾸⻚
[root@YH2 nginx]# ls ./sbin
nginx #nginx可执⾏程序
fastcgi.conf:fastcgi 相关参数配置⽂件。 fastcgi.conf.default:fastcgi.conf 的原始备份⽂件。 fastcgi_params:fastcgi 的参数⽂件。 nginx.conf:nginx 默认主配置⽂件。

十四、Nginx 配置⽂件

1、nginx 主配置⽂件

nginx.conf 为 nginx 的主配置⽂件,编译安装的配置⽂件在之前 预配置时指定的软件⽬录下,⼀般为 /usr/local/nginx/conf/nginx.conf;yum 安装的 nginx,主配置 ⽂件位于 /etc/nginx/nginx.conf。 nginx.conf 配置⽂件由指令控制的模块组成。 指令分为简单指令和块指令,⼀个简单指令由名称和参数组成, 空格分隔,分号结尾,如:listen 80;。 块指令与简单指令相同的结构,但不是以分号结尾,⽽是以⼤括 号包围的组附加指令结束,如:server { }。

2、 nginx 块指令

全局块:配置nginx全局的指令events块:配置nginx与⽤户连接 相关指令 events 块:配置 nginx 与⽤户连接的相关指令,如: events { }。 http 块:提供HTTP服务,如:http { }。 server 块:配置虚拟主机,⼀个http可以有多个server,如: server { }。 location 块:匹配URL后做什么动作或者跳转到⽹⻚的哪⾥, 如:location { }。

3、配置⽂件详解

[root@YH2 nginx]# vim
/usr/local/nginx/conf/nginx.conf #nginx主配置⽂件
1
2 #user nobody; # 配置运⾏
nginx的⽤户和组,(全局块)
3 worker_processes 1; # 设置
worker的进程数量
4
5 #error_log logs/error.log; # 错误⽇志
的路径信息
6 #error_log logs/error.log notice; # notice
等级的错误⽇志路径信息(等级可修改或添加)
7 #error_log logs/error.log info; # info等
级的错误⽇志路径信息(等级可添加或修改)
8
9 #pid logs/nginx.pid; # pid的⽂
件路径
10
11
12 events { # events块
13 worker_connections 1024; # 每个进程
最多能处理多少个连接
14 }
15
16
17 http { # http块,设定http服务器,利⽤它的反
向代理功能提供负载均衡⽀持
18 include mime.types; 
# 指定⽂件拓展名和⽂件类型映射表
19 default_type application/octet-stream; 
# 指定⽂件类型 
20
21 #log_format main '$remote_addr -
$remote_user [ $time_local] "$request" '
22 # '$status
$body_bytes_sent "$ht tp_referer" '
23 # '"$http_user_agent"
"$http_x_f orwarded_for"';
24 
# 上⾯注释的三⾏为nginx程序内部变量
25 #access_log logs/access.log main; 
# 设定访问⽇志的路径及格式
26
27 sendfile on; # 指定nginx
是否调⽤sendfile函数来输出⽂件,对于普通应⽤必须设定为no
28 #tcp_nopush on; # 放置⽹络阻
塞
29
30 #keepalive_timeout 0; # 连接超过的
时间设置
31 keepalive_timeout 65;
32
33 #gzip on; # 开启gzip
压缩
34
35 server { # server
块,配置各种虚拟主机
36 listen 80; # 设置监听端
⼝
37 server_name localhost; # 配置的域名
信息,⼀个server可以对应⼀个域名信息
38
39 #charset koi8-r; # 字符集,
utf-8为中⽂字符集
40
41 #access_log logs/host.access.log 
main; # 设定本虚拟主机的访问⽇志和⽇志类型
42
43 location / { #
location块,代表url的跳转,“/”后⾯写⼊的内容代表我们在浏览
器地址栏输⼊的域名或IP地址的后续访问路径
44 root html; #
服务器的默认⽹站根⽬录位置
45 index index.html index.htm; #
⾸⻚索引⽂件名称
46 }
48 #error_page 404 
/404.html; # 错误提示⻚⾯
49
50 # redirect server error pages to the
static p age /50x.html
51 #
52 error_page 500 502 503 504 
/50x.html; # 错误提示⻚⾯
53 location = /50x.html {
54 root html;
55 } # 每个花括号都会与前⾯的对应
 ......省略部分注释内容.......
79 } # 这个花括号对应的是 server 的
“{”
 ......省略部分注释内容.......
117 } # 这个花括号对应的是 http 的 “{”

十五、优化 nginx 服务控制

1、直接使⽤ nginx 命令

将软件⽬录下的 /usr/local/nginx/sbin/nginx 可执⾏程序软链接 到/usr/sbin,如果按照 Windows ⽅式来说相当于制作了⼀个 nginx 的快捷⽅式。
[root@YH2 nginx]# ls /usr/local/nginx/sbin
nginx
[root@YH2 nginx]# ln -s
/usr/local/nginx/sbin/nginx /usr/sbin #将软件⽬录
下的nginx可执⾏程序软链接到/usr/sbin
[root@YH2 nginx]# nginx -t #对nginx配置⽂件的语
法和格式进⾏检查
nginx: the configuration file
/usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file
/usr/local/nginx/conf/nginx.conf test is
successful
[root@YH2 nginx]# nginx #启动nginx
[root@YH2 nginx]# nginx -s stop #停⽌nginx
[root@YH2 nginx]# nginx #启动nginx
[root@YH2 nginx]# nginx -s reload #热重启,仅重载
nginx配置⽂件

2、以 systemctl 控制 nginx

在 /usr/lib/systemd/system ⽬录下新建⼀个 nginx.service ⾮⼿ 动执⾏脚本,并使⽤ vim 命令添加以下内容。
[root@YH2 ~]# vim
/usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=Flase
[Install]
WantedBy=multi-user.target
:wq # 保存并退出
[root@YH2 ~]# systemctl daemon-reload #重
载systemctl的配置⽂件,以便nginx.service⽣效
[root@YH2 ~]# systemctl start nginx.service #启
动nginx
[root@YH2 ~]# systemctl status nginx.service #查
看nginx状态
● nginx.service - nginx
 Loaded: loaded
(/usr/lib/systemd/system/nginx.service>
 Active: active (running) since Mon 2023-09-04
23:13:3
......省略部分状态信息.......

3、优化注意事项

如果直接使⽤ nginx 命令对程序进⾏控制,那么不可以再⽤ systemctl 服务控制命令对 nginx 进⾏后续操作。 ⽐如:我现在使⽤了 nginx 命令直接启动了 nginx 程序,如果此 时我对 nginx 的主配置⽂件做出了修改想要重新载⼊主配置⽂ 件,那么不能使⽤ systemctl reload nginx.service 重载 nginx 配 置,或 systemctl stop nginx.service 停⽌ nginx 程序,只能使 ⽤ nginx -s reload 重载配置,或 nginx -s stop 停⽌服务。

十六、nginx 错误代码

1、302 定义

302 redirect:302 代表暂时性转移(Temporarily Moved )。 意思就是你访问⽹址A,但是⽹址A因为服务器端的拦截器或者 其他后端代码处理的原因,会被重定向到⽹址B。 [root@YH2 ~]# systemctl status nginx.service #查 看nginx状态 ● nginx.service - nginx Loaded: loaded (/usr/lib/systemd/system/nginx.service> Active: active (running) since Mon 2023-09-04 23:13:3 ......省略部分状态信息.......

2、403 定义

403是很常⻅的错误代码,⼀般就是未授权被禁⽌访问的意思。 可能原因: 1. Nginx 程序⽤户⽆权限访问 web ⽬录⽂件。 2. Nginx 需要访问⽬录,但是 autoindex 选项被关闭。 修复⽅法: 1. 授予 Nginx 程序⽤户权限读取 web ⽬录⽂件。 2. 设置 autoindex 选项为on。
[root@yh2 ~]# vim /usr/local/nginx/conf/nginx.conf
.......省略部分内容......
34
35 server {
36 listen 80;
37 server_name localhost;
38 root /服务器; #该模块将访问本机地址
时的⻚⾯变成了⽂件⽬录⻚⾯
39 autoindex on; #修改这个参数即可
40 autoindex_exact_size off;
41 autoindex_localtime on;
42 charset utf-8;

3、413 错误

在上传时 Nginx 返回了413错误:“413 Request Entity Too Large”,这⼀般就是上传⽂件⼤⼩超过 Nginx 配置引起。 修复⽅法: 1. 在 Nginx.conf 增加 client_max_body_size 的设置,这个值默认 是1M,可以增加到8M以提⾼⽂件⼤⼩限制; 2. 如果运⾏的是 php,那么还要检查 php.ini,这个⼤⼩ client_max body_size 要和 php.ini 中的如下值的最⼤值⼀致或 者稍⼤,这样就不会因为提交数据⼤⼩不⼀致出现的错误。
[root@yh2 ~]# vim /usr/local/nginx/conf/nginx.conf
......省略部分内容.......
17 http {
18 include mime.types;
19 default_type application/octet-stream;
20 client_max_body_size 8M; #添加
该项设置
21 post_max_size 8M;
22 upload_max_filesize 2M; #如果
是php,那么添加21和22⾏这两项参数

4、502 错误

Nginx 502 Bad Gateway 的含义是请求的 PHP-CGI 已经执⾏, 但是由于某种原因 (⼀般是读取资源的问题) 没有执⾏完毕,⽽ 导致 PHP-CGI 进程终⽌。 ⼀般来说Nginx 502 Bad Gateway和php-fpm.conf的设置有关。 修复⽅法:  查看FastCGI进程是否已经启动
[root@yh2 ~]# ps -auxIgrep php-cgi
检查系统Fastcgi进程运⾏情况 除了第⼀种情况,fastcgi进程数不够⽤、php执⾏时间⻓、或者 是php-cgi进程死掉也可能造成Nginx的502错误。 运⾏以下命令判断是否接近FastCGI进程,如果fastcgi进程数接 近配置⽂件中设置的数值,表明worker进程数设置太少。
[root@yh2 ~]# netstat -anpolgrep"php-cgi"wc-l
FastCGI执⾏时间过⻓ 根据实际情况调⾼以下参数值
[root@yh2 ~]# vim /usr/local/nginx/conf/nginx.conf
......省略部分内容.......
17 http {
18 include mime.types;
19 default_type application/octet-stream;
20 fastcgi_connect_timeout 300; 
21 fastcgi_send_timeout 300;
22 fastcgi_read_timeout 300; #调节20~22
⾏这⼏项参数值,没有可以⼿动添加
5、504 错误 Nginx 504 Gateway Time-out 的含义是所请求的⽹关没有请求 到,简单来说就是没有请求到可以执⾏的 PHP-CGI。 Nginx 504 Gateway Time-out⼀般与 Nginx.conf 的设置有关。

发布者:admin,转转请注明出处:http://www.yc00.com/web/1754768430a5199827.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信