7月21号:网站服务(完整)

目录

二.网站服务

2.1 FTP的端口号,分别是什么作用

控制端口(命令端口)21号端口

客户端希望与FTP服务器建立连接时,它首先会尝试连接到服务器的21号端口

数据端口(数据传输端口)

是否会用到20端口与FTP传输模式有关,主动模式使用20端口传输,被动模式下服务器端和客户端协商决定端口。

  • 主动模式:客户端向FTP服务器发送端口信息,由服务器主动连接该端口;
  • 被动模式:FTP服务器开启并发送端口信息给客户端,由客户端连接该端口,服务器被动接受连接。

2.2 FTP的主动模式和被动模式

  • 主动模式:客户端向FTP服务器发送端口信息,由服务器主动连接该端口;
  • 被动模式:FTP服务器开启并发送端口信息给客户端,由客户端连接该端口,服务器被动接受连接。

2.3 HTTP常见的状态码

2XX 成功

200 ok(请求成功)
204 no content (请求成功,但是没有结果返回)

3XX 重定向

301 move permanently (永久性重定向)
302 found (临时性重定向)
304 not modified (表示在客户端采用带条件的访问某资源时,服务端找到了资源,但是这个请求的条件不符合跟重定向无关
307 temporary redirect (跟302一个意思)

4XX 客户端错误

400 bad request (请求报文存在语法错误)
401 unauthorized (需要认证(第一次返回)或者认证失败(第二次返回))
403 forbidden (请求被服务器拒绝了)
404 not found (服务器上无法找到请求的资源)

5XX 服务器错误

500 internal server error (服务端执行请求时发生了错误)

502 Bad Gateway (作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应)

503 service unavailable (服务器正在超负载或者停机维护,无法处理请求)

2.4 HTTP和HTTPS的区别以及使用的端口号

HTTP:默认端口号是80

HTTPS:默认端口号是443,通过SSL协议进行加密传输

2.5 HTTP处理请求的过程

  1. DNS解析
  2. TCP三次握手
  3. 发起HTTP请求
  4. 服务器响应HTTP请求
  5. 浏览器解析和渲染
  6. TCP四次挥手

2.6 HTTP请求的协议栈过程,结合OSI七层⽹络模型,使⽤到了操作系统的哪些部分,⽹卡?浏览器?驱动程序?

2.6.1 OSI七层⽹络模型:
应用层(HTTP) 构建HTTP请求报文。请求报文包括请求行、请求头和请求体
传输层(TCP)请求报文被封装成TCP报文段,并添加TCP头部信息,如源端口号、目的端口号
网络层(IP)将TCP报文段封装成IP数据包,并添加IP头部信息,如源IP地址、目的IP地址
数据链路层 被封装成数据帧,并添加帧头部信息,通过物理链路(如以太网)传输到下一个节点
物理层 将数据帧中的比特流通过物理介质(如双绞线、光纤等)传输到目的端
2.6.2 操作系统
浏览器 HTTP请求的发起者,它负责构建HTTP请求报文,并通过操作系统的网络协议栈发送请求
操作系统内核 内核中网络协议栈负责处理网络数据包的接收、发送和转发。 它包括TCP/IP协议栈的实现,以及与其他网络协议的交互。
驱动程序 操作系统与网络硬件之间的接口 将网络数据包从操作系统的网络协议栈传输到网络接口卡 (或反向转换)
网卡(网络接口卡) 计算机与网络之间的物理连接设备。将数字信号转换为模拟信号(或反向转换),并通过物理介质传输数据

2.7 https认证过程

  1. 客户端访问https连接

  2. 服务端发送证书(公钥)给客户端

  3. 客户端验证服务端的证书

  4. 服务端接收加密信息,解密得到客户端提供的随机字符串

  5. 客户端验证服务端返回的握手信息,完成握手

2.8 服务器的这个扩展性和可靠性应该考虑哪⼏⽅⾯?

扩展性:
  • 存储扩展
  • 网络扩展
  • 弹性计算能力
  • 水平扩展与垂直扩展
可靠性:
  • 硬件故障频率
  • 冗余设计
  • 系统稳定性
  • 实时监控与日志记录
  • 专业支持团队

2.9 两个机房之间,如果通信延迟⽐较⼤,那这你的排查思路是什么?

分层排查:

  • 物理层与链路层

​ 检查物理连接(光纤、网线、接口指示灯状态)

  • 网络层

​ 路由分析(traceroute 追踪数据包在两个机房之间的传输路径)

​ 检查网络设备

  • 传输层与应用层

​ 利用netperf 测试两个机房之间的实际传输速度。

​ 服务器和数据库服务器的性能和负载情况,确认无过载现象

2.10 对称加密和非对称加密的区别

对称加密

加密算法是公开的,靠的是秘钥来加密数据,使用一个秘钥加密,必须使用相同的秘钥才解密。

非对称加密

加密和解密使用不同的秘钥,一把公开的公钥,一把私有的私钥。公钥加密的信息只有私钥才能解密,私钥加密的信息只有公钥才能解密。

2.11 POST和GET请求方式的区别

  • GET请求的参数通过URL传递,POST放在Request body中。
  • GET请求会被浏览器主动cache,而POST不会,除非手动设置。
  • GET请求只能进行url编码,而POST支持多种编码方式。
  • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
  • GET请求一般用于获取/查询资源信息,而POST一般用于更新资源信息。

2.12 正向代理和反向代理的区别

正向代理

​ 在客户端部署代理服务器,代替客户端对外部网络发送和接收消息。客户端发送一个指定目标的请求给代理服务器,代理服务器再发送给目标服务器,目标服务器收到请求后,将响应的内容发送给代理服务器,代理服务器发给客户端。

​ 在正向代理的过程中,代理服务器代替客户端向目标服务器发送请求目标服务器不知道谁是真正的客户端,不知道访问自己的是一个代理服务器还是客户端。服务器只负责将响应包发送给请求方

正向代理的用途

1、突破访问控制
例如:VPN
国内用户不能直接访问国外的网站,需要通过正向代理访问理服务器。
2、提高访问速度
代理服务器里有一个硬盘缓冲区,会将请求响应保存到缓冲区中。下次访问时会直接读取缓冲区中的数据返还给用户。
3、隐藏客户端真实的IP

反向代理

​ 在服务器端部署代理服务器(为了区分,将真正响应的服务器成为业务服务器),让代理服务器替业务服务器接收请求或发送响应。客户端发送一个请求给代理服务器,代理服务器接收请求并将请求发送给业务服务器,业务服务器将响应发送给代理服务器,代理服务器再将响应发送给客户端。

​ 在反向代理的过程中,客户端不知道自己请求的是代理服务器还是业务服务器。

反向代理用途

1、隐藏服务器真实IP
2、负载均衡
代理服务器可以将对业务服务器的请求根据预设算法分发到业务服务器上。
3、提高访问速度
对于静态页面的访问,代理服务器可以将数据存储到硬盘内,当出现有大量静态页面的访问时,可以直接从代理服务器获取响应。对于动态内容请求,代理服务器可以将缓存存在本地,提高访问响应速度。
4、提供安全障性
可以将代理服务器作为应用层的防火墙,拦截恶意的Web攻击。

2.13 我有⼀套反向代理的服务器,如果某次访问报了502,想要⾃动转发其他服务器上,需要什么参数

第一步:配置负载均衡

在Nginx中,使用负载均衡功能来将请求分散到多个后端服务器上。这可以通过upstream块来定义一组服务器,并使用server指令来指定每个服务器的地址和端口。例如:

upstream myapp1 {  
    server backend1.example.com weight=5;  
    server backend2.example.com;  
    server backend3.example.com down; # 假设这个服务器暂时不可用  
}  
  
server {  
    listen 80;  
  
    location / {  
        proxy_pass http://myapp1;  
        # 其他proxy相关配置...  
    }  
}

在这个例子中,如果backend1.example.combackend2.example.com中的任何一个因为某些原因(如502错误)无法响应,Nginx将自动尝试将请求转发到另一个健康的服务器。

第二步:配置错误处理

虽然Nginx的负载均衡器默认会在后端服务器失败时尝试其他服务器,但您还可以配置特定的错误处理逻辑。例如,您可以定义一个error_page指令来捕获502错误,并尝试将请求转发到一个特定的服务器或执行其他操作:

server {  
    listen 80;  
  
    location / {  
        proxy_pass http://myapp1;  
        proxy_next_upstream error timeout http_500 http_502 http_503 http_504;  
        error_page 502 = @fallback;  
    }  
  
    location @fallback {  
        proxy_pass http://fallback_server;  
    }  
}

在这个配置中,如果后端服务器返回502错误,Nginx将自动将请求转发到fallback_server指定的服务器上。

2.14 什么是惊群以及如和解决惊群

定义:

​ 多个线程或进程在等待同一个事件(例如I/O操作、信号、锁)时,事件发生后会导致所有等待的线程或进程同时被唤醒,竞争资源,从而引发性能问题或系统负载过高。这种现象被形象地称为“惊群现象”。

解决:
边缘触发模式:

​ 在事件发生时只通知一次,直到处理完成后才会再次通知,避免了重复唤醒的问题

使用互斥锁或读写锁

​ 确保只有一个线程能够处理事件,其他线程在锁释放前不会被唤醒

通过事件队列和事件分发器来处理事件

​ 避免多个线程同时等待同一个事件

减少线程或进程数量

2.15:nginx处理请求的过程

  1. 读取请求头。
  2. 识别由哪一个 location 进行处理,匹配 URL。
  3. 判断是否限速。
  4. 连接控制,验证请求。
  5. 生成返回给用户的响应。
  6. 过滤返回给用户的响应。
  7. 记录日志。

2.16 网站动静分离是什么,有什么优点

是什么:

动静分离是将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问。

动静分离的一种做法是将静态资源部署在nginx上,后台项目部署到应用服务器上,根据一定规则静态资源的请求全部请求nginx服务器,达到动静分离

优点:
  • api接口服务化:动静分离之后,后端应用更为服务化,只需要通过提供api接口即可,可以为多个功能模块甚至是多个平台的功能使用,可以有效的节省后端人力,更便于功能维护。
  • 前后端开发并行:前后端只需要关心接口协议即可,各自的开发相互不干扰,并行开发,并行自测,可以有效的提高开发时间,也可以有些的减少联调时间
  • 减轻后端服务器压力,提高静态资源访问速度:后端不用再将模板渲染为html返回给用户端,且静态服务器可以采用更为专业的技术提高静态资源的访问速度。

2.17 如何查看服务响应时间,响应过慢应该怎么办

方法:

使用ping命令,测试到目标服务器的往返时间(RTT)

方案:

使用CDN压缩和缓存静态资源动静分离

2.18 有没有使用过网站压力测试工具,测试的时候关心哪些数据,如何判断已过载

HTTPerf

通过响应时间(Response Time)吞吐量(Throughput)系统资源使用情况请求排队和延迟判断

2.19 部署一个lnmp的步骤,以及数据的传输流程

使用官方仓库安装nginx

修改nginx用户

启动nginx并加入开机自启

使用第三方扩展源安装php7.1(7.4也行)

配置php-fpm用户与nginx的运行用户保持一致

启动php-fpm并加入开机自启

安装mariadb数据库

Nginx连接Fastcgi服务器配置

配置Nginx虚拟主机站点

下载wordpress源码

创建所需数据库

配置wordpress

2.20 apache和nginx的区别,优缺点,如何选择

区别,优缺点
  1. 性能:Nginx和Apache在处理静态文件方面都很出色,但Nginx在处理高并发请求方面表现更为优秀。这是因为Nginx可以同时处理大量的连接。相比之下,Apache在处理大量请求时可能会出现性能瓶颈。
  2. 资源占用:Nginx相比Apache更加轻量级,对系统资源的占用更少。这意味着在相同的硬件条件下,Nginx可以处理更多的并发请求,提供更高的吞吐量。
  3. 可扩展性:Nginx的设计理念使其更加模块化,这意味着用户可以根据自己的需求添加或删除模块,从而增强其功能或提高性能。相比之下,Apache的模块化程度较低,虽然也有一些可用的模块,但总体来说不如Nginx灵活。
  4. 配置复杂性:Nginx的配置相对简单,尤其在处理反向代理、负载均衡等方面。而Apache的配置则相对复杂一些,需要更多的时间和经验来进行优化。
  5. 社区支持:Apache作为开源软件的代表,拥有庞大的用户基础和活跃的开发者社区。这意味着当你遇到问题时,可以很容易地在网上找到解决方案或得到社区的帮助。而Nginx虽然也有一个庞大的用户基础,但其开发者社区相对较小
选择:

​ 网站或应用需要处理大量的并发请求,其次,如果你的系统资源有限,或者你需要更高的吞吐量,另外,如果你需要使用反向代理或负载均衡功能,Nginx的配置更加简单易用。

​ 如果你的项目依赖于特定的Apache模块,或者你更倾向于从活跃的开发者社区中获取支持,那么Apache可能更适合你。

​ 虽然Nginx和Apache各有优缺点,但它们也可以一起使用。你可以使用Nginx作为反向代理服务器,将动态请求转发给后端的Apache服务器处理。这样既可以利用Nginx的高并发性能和负载均衡能力,也可以利用Apache的模块化和社区支持。

2.21 请求报文和响应报文头部常见的属性

请求头

请求报文主要由请求行、请求头、空行、请求体构成。

请求头包含以下几个:

Host:请求的服务器的域名。

Accept:客户端能够处理的媒体类型。

Accept-Encoding:客户端能够解码的内容编码。

Authorization:用于认证的凭证信息,比如token数据。

Content-Length:请求体的长度。

Content-Type:请求体的媒体类型。

Cookie:存储在客户端的cookie数据。

If-None-Match:资源的ETag值,用于缓存控制。

Connection:管理连接的选项,如 keep-alive。

响应头

响应报文通常包含状态行、响应头、空行、响应体。

响应头包含以下几个:

Content-Type:指定响应主体的媒体类型。

Content-Length:指定响应主体的长度(字节数)。

Server:指定服务器的信息。

Expires: 响应的过期时间,之后内容被认为是过时的。

ETag: 响应体的实体标签,用于缓存和条件请求。

Last-Modified: 资源最后被修改的日期和时间。

Location:在重定向时指定新的资源位置。

Set-Cookie:在响应中设置Cookie。

Access-Control-Allow-Origin: 跨源资源共享(CORS)策略,指示哪些域可以访问资源。

2.22 静态缓存资源如何自动更新

配置服务器缓存策略

利用CDN的缓存刷新功能

等等

2.23 什么是长连接,有什么作用

长连接(long connnection),指在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。 短连接(short connnection),是相对于长连接而言的概念,指的是在数据传送过程中,只在需要发送数据时才去建立一个连接,数据发送完成后则断开此连接,即每次连接只完成一项业务的发送。

长连接 长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况

2.24 apache的mpm多路处理模块

它将Apache的结构能够模块化,把核心的任务处理作为一个可插拔的模块来运行

他是Apache中唯一一个系统层的模块

主要职责:
  1. 根据Apache运行的操作系统平台来优化Apache。
  2. 提高Apache的效率。
  3. 保证Apache的安全。

2.25 nginx如何实现高并发

异步非阻塞,使用了epoll 和大量的底层代码优化

2.26 为什么 Nginx 不使用多线程?

Apache: 创建多个进程或线程,而每个进程或线程都会为其分配 cpu 和内存(线程要比进程小的多,所以worker支持比perfork高的并发),并发过大会耗光服务器资源。

Nginx: 采用单线程来异步非阻塞处理请求(管理员可以配置Nginx主进程的工作进程的数量)(epoll),不会为每个请求分配cpu和内存资源,节省了大量资源,同时也减少了大量的CPU的上下文切换。所以才使得Nginx支持更高的并发。

2.27 nginx的进程结构

Nginx的进程结构主要包括一个主进程(master process)和多个工作进process(worker processes)。主进程的主要任务是读取配置文件、管理工作进程、处理信号等,工作进程则负责处理网络请求。

2.28 select,poll,epoll的区别

select和poll都是基于轮询机制实现IO多路复用的,但select受文件描述符数量限制且效率较低,poll无文件描述符数量限制但效率同样不高;epoll则是基于事件通知机制,没有文件描述符数量限制,且效率更高

2.29 nginx是多线程还是单线程

Nginx采用的是多进程模型,但每个进程都是单线程的。这种设计是Nginx高性能和高并发的关键所在。

2.30 Nginx常见的优化手段有哪些

1)调整worker_processes

2)最大化worker_connections

3)启用Gzip压缩

4)为静态文件启用缓存

5)Timeouts

6)禁用access_logs

2.31 502错误可能原因有哪些?

  1. 后端服务器故障
  2. Nginx配置问题
  3. 高负载或资源耗尽
  4. Nginx与后端服务器通信问题
posted @ 2024-07-21 19:06  guixiang  阅读(29)  评论(0编辑  收藏  举报