世界杯门票_托马斯穆勒世界杯进球数 - noh16.com

世界杯门票_托马斯穆勒世界杯进球数 - noh16.com

shape
  • Home
  • 乌拉圭世界杯冠军
  • Web服务相关知识

Web服务相关知识

  • 2026-08-10 10:02:17
  • admin

Web服务相关知识一、Web1.1 什么是WebWeb(万维网)是基于互联网构建的一个信息资源共享网络,通过HTTP/HTTPS协议进行数据传输,允许用户通过浏览器访问服务器上的各种资源(网页、图片、视频等)。

访问Web服务的基本流程:浏览器发起请求 → 服务器处理 → 返回响应 → 浏览器渲染显示

1.2 两种经典架构模型① B/S架构(Browser/Server浏览器/服务器)

特点:客户端使用浏览器访问,无需安装额外程序

优势:跨平台性强、易维护、用户无需更新客户端

应用场景:大多数互联网应用(百度、淘宝、Gmail等)

工作流程:用户通过浏览器输入URL → DNS解析 → 三次握手建立连接 → 下载页面文件 → 浏览器本地渲染

② C/S架构(Client/Server客户端/服务器)

特点:客户端需要安装专门的应用程序

优势:交互性强、功能丰富、离线访问能力强

应用场景:游戏客户端、企业内部系统、QQ等即时通讯工具

工作流程:应用程序与服务器通过特定协议通信

1.3 协议、端口、功能的关系

协议

端口

功能(服务)

说明

HTTP

80

超文本传输

明文传输,不加密

HTTPS

443

加密超文本传输

基于SSL/TLS加密

SMTP

25

邮件发送传输

用于邮件服务

SSH

22

远程登录

加密的远程连接

每种协议对应相应的功能服务,端口号是网络通信的标识符,用于区分不同的服务。

1.4 连接建立过程TCP三次握手(建立TCP双向连接的过程):

客户端发送SYN包给服务器(我要连接)

服务器收到后回复SYN+ACK包(可以连接)

客户端收到后发送ACK包(确认连接)

完成三次握手后,客户端和服务器之间建立了双向连接,可以开始数据传输。

12# 查看网络情况netstat -natp | grep 80

-n:直接使用IP地址,而不通过域名服务器

-a:显示所有连线中的Socket

-t:显示TCP传输协议的连线状况。

-p:显示正在使用Socket的程序识别码和程序名称。

可以看见又两次established,是双向建立连接的过程

1.5 访问数据流向访问百度的数据流向:

1、网页起始就是由多个文件组成2、使用http/https访问百度,就是从百度服务器那下载页面文件,在本地用浏览器打开3、连接:(如果缓存中没有)先通过DNS 解析 —> tcp3握 —>下载页面相关文件 –>本地浏览器打开

二、HTTP/HTTPS协议2.1 HTTP协议基础HTTP(HyperText Transfer Protocol 超文本传输协议)是应用层协议,基于请求-响应模型工作。

特点:

无状态协议:服务器不保存客户端状态信息

灵活可扩展:易于添加新的功能和特性

基于TCP/IP:确保数据可靠传输

明文传输:安全性较低

2.2 HTTPS协议HTTPS(HyperText Transfer Protocol Secure 安全超文本传输协议)是安全版的HTTP,通过SSL/TLS加密协议实现安全传输。

区别对比:

特性

HTTP

HTTPS

端口

80

443

加密

否

是(SSL/TLS)

安全性

低

高

证书

无需

需要

性能

快

相对慢(加密开销)

HTTPS工作流程:

客户端请求安全连接

服务器返回SSL证书

客户端验证证书并生成会话密钥

建立加密通道

数据通过加密通道传输

重定向行为:网站常将HTTP请求自动重定向到HTTPS。例如访问 http://www.baidu.com 时,百度服务器会将请求重定向,用户最终访问的是 https://www.baidu.com

2.3 HTTP请求与响应HTTP请求结构:

请求行:方法 + URL + 协议版本(如 GET /index.html HTTP/1.1)

请求头:包含客户端信息、浏览器类型等

请求体:POST请求中的数据(可选)

HTTP方法:

GET:获取资源(幂等,无请求体)

POST:提交数据(非幂等)

PUT:更新资源

DELETE:删除资源

HEAD:获取资源元数据

HTTP响应结构:

状态行:协议版本 + 状态码 + 状态信息

响应头:服务器信息、内容类型等

响应体:返回的资源内容

2.4 HTTP状态码状态码用3位数字表示,分为5类,以下为常用状态码汇总:

状态码

类别

说明

场景举例

100

1xx信息

Continue

客户端继续发送请求体

200

2xx成功

OK

请求成功,返回期望数据

201

2xx成功

Created

创建资源成功(如POST创建新用户)

204

2xx成功

No Content

请求成功但无返回内容(如DELETE成功)

206

2xx成功

Partial Content

部分内容(断点续传、视频分段请求)

301

3xx重定向

Moved Permanently

永久重定向(如HTTP→HTTPS)

302

3xx重定向

Found

临时重定向(登录后重定向到首页)

304

3xx重定向

Not Modified

资源未修改,使用缓存

307

3xx重定向

Temporary Redirect

临时重定向(保留请求方法)

400

4xx客户端错误

Bad Request

请求格式错误或参数非法

401

4xx客户端错误

Unauthorized

需要身份认证(未登录)

403

4xx客户端错误

Forbidden

禁止访问(无权限)

404

4xx客户端错误

Not Found

资源不存在

405

4xx客户端错误

Method Not Allowed

不支持该HTTP方法

429

4xx客户端错误

Too Many Requests

请求过于频繁(限流)

500

5xx服务器错误

Internal Server Error

服务器内部错误

502

5xx服务器错误

Bad Gateway

网关错误(反向代理后端出错)

503

5xx服务器错误

Service Unavailable

服务不可用(维护中或过载)

504

5xx服务器错误

Gateway Timeout

网关超时(后端响应超时)

状态码分类说明:

1xx(信息性):请求已接收,继续处理

2xx(成功):请求成功处理

3xx(重定向):需要进一步操作完成请求

4xx(客户端错误):请求有问题,服务器拒绝处理

5xx(服务器错误):服务器处理请求时出错

例如:

高频状态码:

301永久重定向

Moved Permanently永久搬家”这个页面永久换地址了”

302临时重定向

Moved Permanently永久搬家”这个页面永久换地址了”

403

如果用户访问的URL 路径可以找到匹配的location但是匹配不到具体的网页文件则会报403

404

如果用户访问的URL 路径没有办法在nginx配置文件中找到能匹配的location 则会报404

503

服务器繁忙

面试题:503可能是哪些原因,怎么判断怎么做?

三、Nginx服务3.1 什么是NginxNginx是一款高性能、轻量级的开源Web服务器和反向代理服务器,具有以下特点:

高性能:采用事件驱动架构,支持高并发连接

轻量级:占用资源少,内存占用低

高可用:支持反向代理、负载均衡、故障转移

模块化:功能通过模块系统灵活扩展

跨平台:支持Linux、Windows、Mac等多个平台

主要用途:

Web服务器:托管静态网站

反向代理(用于接收客户端的请求并将其转发给内部的目标服务器):后端服务隐藏,提升安全性

负载均衡:分散流量到多个后端服务器

缓存加速:提升访问速度

3.2 Nginx核心概念版本号解读如 nginx-1.20.2

第一位数字:大版本(功能迭代)

第二位数字:小版本(功能改进)

第三位数字:修订版本(补丁更新)

边界设备与外界交互的设备,通常指Nginx在企业网络中的位置

工作进程模型Nginx采用Master-Worker进程模型:

Master进程:监听端口、管理Worker进程、处理信号

Worker进程:实际处理客户端请求和响应

并发处理能力计算公式:最大同时处理请求数 = worker_processes × worker_connections

示例:

2个Worker进程,每个最大1024连接

最多可处理 2 × 1024 = 2048个并发请求

静态资源与动态资源

类型

定义

特点

例子

Nginx处理方式

静态资源

内容不变的文件资源

不需要服务器处理,可直接返回

HTML、CSS、JavaScript、图片、视频

直接返回(高效)

动态资源

需要服务器实时计算的内容

每次请求可能返回不同内容

数据库查询结果、登录认证、用户信息

反向代理转发给后端应用处理

Nginx的角色:

处理所有静态资源的请求,快速返回结果

遇到动态请求时,通过反向代理转发给后端应用(如Java、Python等)处理

这样充分发挥Nginx高性能的优势,同时让后端专注于业务逻辑

目录结构(默认安装在 /usr/local/nginx):

conf/:配置文件目录(nginx.conf为核心配置)

html/:存放网页文件

logs/:日志文件(access.log、error.log)

sbin/:可执行文件,一般存命令

⭐工作原理图(数据流向)

① 在浏览器中输入URL

用户在Windows系统的浏览器中输入URL地址(如http://www.qidian.com/book/1046336776/),这是整个访问流程的起点。

② 三握(DNS解析和网络连接)

浏览器通过DNS服务器将域名解析为IP地址

建立TCP连接(三次握手)

③ 监听到请求

Nginx主进程(ng-master)监听80端口,接收客户端请求

④ fork子进程

主进程创建worker子进程来处理实际任务

⑤ 子进程匹配规则

worker进程根据Nginx配置文件中的规则进行匹配,决定如何处理请求(动静资源,ng处理静态,后端处理动态)

⑥ 处理数据

如果用户请求的数据过大,服务端会从磁盘读取、压缩、存放在缓存中

⑦ 用户下载页面文件及其他数据

服务器将响应数据返回给客户端

⑧ 浏览器缓存

浏览器将收到的页面和资源存储在本地缓存中,下次访问时可直接使用

3.3 Nginx源码编译安装手工编译/源码编译安装一个服务的基本流程1、关闭防火墙、核心防护 (DNS解析需要配置)

2、安装依赖环境

3、上传并解压缩源码包tar.gz

4、进入解压后的目录,执行configure 的配置动作

5、make && make install 执行编译与编译安装动作

6、检查是否安装完成(到/usr/local/nginx的工作目录中查看一下)

7、添加给systemd工具识别,让我们/系统可以使用systemctl start/stop/status 管理服务

8、使用浏览器访问页面,验证是否成功

安装前准备1234# 1.关闭防火墙systemctl stop firewalldsystemctl disable firewalldsetenforce 0

123456# 2.安装依赖包# nginx的配置及运行需要pcre、zlib等软件包支持,用于提供库和头文件yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel# 创建运行用户(Nginx默认以nobody身份运行,建议创建专门的用户账号以控制权限)useradd -M -s /sbin/nologin nginx

下载与配置123456789101112131415# 3.下载Nginx源码包# 方法一 wget网上下载cd /optwget https://nginx.org/download/nginx-1.20.2.tar.gztar zxvf nginx-1.20.2.tar.gz# 方法二 自行准备# 4.进入源码目录并配置cd nginx-1.20.2/./configure \ --prefix=/usr/local/nginx \ # 指定安装路径 --user=nginx \ # 指定运行用户 --group=nginx \ # 指定运行用户组 --with-http_stub_status_module \ # 启用状态统计模块 --with-http_ssl_module # 启用HTTPS支持

编译与安装12345# 5.编译并安装make && make install# 创建软连接,让系统识别nginx命令ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

创建软连接命令是为了让系统能识别nginx的命令

which从$PATH目录中去寻找可执行文件

验证与启动123456# 6.检查配置文件是否正确nginx -t# 启动Nginxnginx# 查看版本/编译参数nginx -v

企业级完整配置参考123456789101112131415./configure \ --prefix=/usr/local/nginx \ # 安装目录 --user=nginx \ # 运行用户 --group=nginx \ # 运行用户组 --with-http_ssl_module \ # HTTPS支持 --with-http_v2_module \ # HTTP/2协议(提升性能) --with-http_gzip_static_module \ # 静态gzip压缩 --with-http_stub_status_module \ # 状态监控模块 --with-pcre \ # PCRE正则支持 --with-stream \ # TCP代理模块 --with-stream_ssl_module \ # TCP代理SSL支持 --http-log-path=/var/log/nginx/access.log \ # 访问日志路径 --error-log-path=/var/log/nginx/error.log \ # 错误日志路径 --pid-path=/var/run/nginx/nginx.pid \ # PID文件路径 --lock-path=/var/lock/nginx.lock # 锁文件路径

拓展:添加为系统服务方法一:使用init.d脚本(较老,不推荐)

创建文件 /etc/init.d/nginx,使用 service 命令管理

方法二:使用systemd服务(推荐)

创建文件 /lib/systemd/system/nginx.service:

1234567891011121314[Unit]Description=nginxAfter=network.target[Service]Type=forkingPIDFile=/usr/local/nginx/logs/nginx.pidExecStart=/usr/local/nginx/sbin/nginxExecReload=/bin/kill -s HUP $MAINPIDExecStop=/bin/kill -s QUIT $MAINPIDPrivateTmp=true[Install]WantedBy=multi-user.target

启用服务:

1234chmod 754 /lib/systemd/system/nginx.servicesystemctl start nginx.servicesystemctl enable nginx.service # 开机自启systemctl restart nginx.service

注意:nginx和systemd的运作方式不同,所以可能会出现nginx启动后,systemd现实不一致的问题

3.4 ⭐Nginx配置文件详解nginx.conf核心配置文件位置:/usr/local/nginx/conf/nginx.conf

一、全局块(Global Context)处理Nginx全局相关的配置参数:

1234user nginx; # 运行用户(影响文件访问权限)worker_processes 2; # 工作进程数(建议设为CPU核心数的2倍)error_log logs/error.log warn; # 错误日志路径和级别pid logs/nginx.pid; # PID文件路径

日志级别(从低到高):debug → info → notice → warn → error → crit → alert → emerg

二、events块(Events Context)配置Nginx如何处理连接:

1234events { worker_connections 1024; # 单个工作进程最大连接数 use epoll; # Linux上推荐使用epoll模型}

说明:

worker_connections 决定单个Worker进程能同时处理的连接数

总并发数 = worker_processes × worker_connections

三、http块(HTTP Context)定义HTTP服务的全局参数,包含server块和upstream块:

1234567891011121314http { include mime.types; # 引入MIME类型定义 default_type application/octet-stream; # 默认类型 # 日志格式定义(内置变量) log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; # 访问日志 sendfile on; # 启用零复制发送文件(提高性能) keepalive_timeout 65; # 长连接保活时间}

常用内置变量:

变量

说明

$remote_addr

客户端IP地址

$remote_user

客户端用户名

$time_local

请求的本地时间

$request

完整的HTTP请求行

$status

HTTP响应状态码

$body_bytes_sent

发送给客户端的字节数

$http_referer

HTTP请求来源页面

$http_user_agent

客户端浏览器信息

四、server块(Server Context)定义虚拟主机,处理特定的客户端请求:

123456789101112server { listen 80; # 监听的端口号 server_name www.example.com; # 虚拟主机名称(域名) charset utf-8; # 字符编码(防止中文乱码) location / { # 路由配置(匹配URL路径) root html; # 文档根目录(相对路径:./nginx/html) index index.html index.htm; # 默认文件 } error_page 404 /404.html; # 自定义错误页面}

location匹配规则: 匹配URL路径—》① proxy_pass路径的跳转 ② 页面文件的匹配 ③ 功能的使用(例如stub_status_module)

location / :匹配所有请求的根路径

location /app :匹配以/app开头的路径

location /status :精确匹配/status路径

location的一般三种匹配用途

① 首页(根)匹配

② 静态匹配

③ 动态匹配

实际网站使用建议

一、根目录首页匹配

1234location = / { root html; index index.html index.htm;}

加速处理官网首页访问。二、静态文件请求处理

123456location ^~ /static/ { root /webroot/;}location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ { root /webroot/res/;}

利用 Nginx 处理静态文件的优势。三、动态页面请求转发

123456location ~ \.php$ { fastcgi_pass php_server:9000;}location ~ \.jsp$ { proxy_pass http://tomcat_server;}

将动态请求转发至后端应用服务器处理。

URL访问解析:

以 http://192.168.110.128/index2.html 为例:

http:// :固定格式(协议)

192.168.110.128 :访问的IP或域名

/ :网页文件根路径(表示以 ./nginx/html/ 为起始)

index2.html :网页文件路径

配置文件完整分析表

配置项

所在块

说明

参数示例

user

全局块

运行Nginx的用户,影响文件访问权限

nginx

⭐worker_processes

全局块

工作进程数,建议设为CPU核心数的2倍

2 或 auto

error_log

全局块

错误日志路径和级别

logs/error.log warn

worker_connections

events块

单个进程最大连接数

1024

use

events块

连接处理模型

epoll

log_format

http块

日志格式定义

-

access_log

http块

访问日志文件

logs/access.log main

sendfile

http块

是否启用零复制

on 或 off

listen

server块

监听的端口号

80

server_name

server块

虚拟主机名称

www.example.com

charset

server块

字符编码

utf-8

location

server块

路由规则

location /api

root

location块

文档根目录

html

index

location块

默认文件

index.html

proxy_pass

location块

反向代理目标

http://127.0.0.1:8080

3.5 Nginx反向代理和负载均衡什么是代理代理是指一个服务充当中介,代表另一方进行通信。在网络中,代理服务器位于客户端和服务器之间,转发双方的请求和响应。

什么是反向代理反向代理是指Nginx代理后端服务器,接收客户端请求并转发给后端,再将响应返回给客户端。客户端不知道真实的后端服务器地址。

反向代理的作用:

隐藏后端服务器真实IP和架构

提升安全性(后端服务器不直接暴露)

可以实现负载均衡

可以进行请求过滤和转发

与正向代理的区别:

正向代理:代理客户端,服务器不知道真实客户端(如VPN)

反向代理:代理服务器,客户端不知道真实服务器

基础反向代理配置

http块中设置upstream后端地址池

server块location中设置proxy_pass代理_地址池

使用 proxy_pass 指令将请求转发到后端服务器:

1234567891011121314server { listen 80; server_name www.example.com; location / { # 将请求转发到后端服务器 proxy_pass http://192.168.110.101:8080; # 保留原始客户端IP信息 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }}

常用proxy相关指令:

123456指令说明示例proxy_pass转发请求到后端服务器proxy_pass http://backend:8080;proxy_set_header设置转发时的请求头proxy_set_header Host $host;proxy_connect_timeout连接后端超时时间proxy_connect_timeout 60s;proxy_send_timeout向后端发送数据的超时时间proxy_send_timeout 60s;proxy_read_timeout接收后端数据的超时时间proxy_read_timeout 60s;

什么是负载均衡负载均衡是将客户端请求分散到多个后端服务器处理,提高系统整体性能和可用性。

负载均衡的作用:

分散流量,避免单个服务器过载

提高系统容错能力(某个服务器故障不影响整体)

提升响应速度和用户体验

实现高可用架构

upstream块配置使用 upstream 定义后端服务器集群,结合 proxy_pass 实现负载均衡:

1234567891011121314151617181920212223http { # 定义后端服务器集群 upstream backend_servers { server 192.168.110.101:8080; # 后端服务器1 server 192.168.110.102:8080; # 后端服务器2 server 192.168.110.103:8080; # 后端服务器3 } server { listen 80; server_name www.example.com; location / { # 使用proxy_pass转发请求到upstream定义的服务器组 proxy_pass http://backend_servers; # 反向代理相关配置 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }}

负载均衡调度算法12345算法说明应用场景轮询(默认)按顺序轮流转发请求服务器性能相同权重(weight)根据权重比例转发服务器性能不同IP哈希(ip_hash)同一客户端IP总是转发到同一服务器需要会话保持最少连接(least_conn)优先转发到连接数少的服务器长连接应用

调度算法配置示例轮询配置(默认):Round Robin

12345upstream backend_servers { server 192.168.110.101:8080; server 192.168.110.102:8080; server 192.168.110.103:8080;}

权重配置(服务器性能不同):Weighted Round Robin

12345upstream backend_servers { server 192.168.110.101:8080 weight=5; # 该服务器处理5份请求 server 192.168.110.102:8080 weight=3; # 该服务器处理3份请求 server 192.168.110.103:8080 weight=2; # 该服务器处理2份请求}

IP哈希配置(会话保持):

是实现会话保持的一种机制,减轻压力和给用户更好的体验,没有做到负载均衡

123456upstream backend_servers { ip_hash; # 启用IP哈希算法,同一客户端IP的请求总是转发到同一服务器 server 192.168.110.101:8080; server 192.168.110.102:8080; server 192.168.110.103:8080;}

最少连接配置:Least Connections

谁活少给谁多分配

123456upstream backend_servers { least_conn; # 启用最少连接算法,优先转发到连接数少的服务器 server 192.168.110.101:8080; server 192.168.110.102:8080; server 192.168.110.103:8080;}

故障转移与健康检测Nginx可以自动检测后端服务器故障并转移流量:

12345upstream backend_servers { server 192.168.110.101:8080 max_fails=3 fail_timeout=30s; server 192.168.110.102:8080 max_fails=3 fail_timeout=30s; server 192.168.110.103:8080 backup; # 备用服务器(其他服务器都不可用时才使用)}

参数说明:

max_fails:最大失败次数,超过该次数则标记为不可用(默认1)

fail_timeout:失败次数计数的时间窗口(默认10s)

backup:备用服务器标记,仅当其他服务器都不可用时才使用

完整的反向代理+负载均衡配置示例12345678910111213141516171819202122232425262728http { # 定义后端服务器集群(带权重和故障转移) upstream backend_servers { server 192.168.110.101:8080 weight=5 max_fails=3 fail_timeout=30s; server 192.168.110.102:8080 weight=3 max_fails=3 fail_timeout=30s; server 192.168.110.103:8080 weight=2 backup; } server { listen 80; server_name www.example.com; location / { # 反向代理转发 proxy_pass http://backend_servers; # 保留原始客户端信息 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 超时配置 proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; } }}

3.6 Nginx虚拟主机配置Nginx支持多种虚拟主机方式,实现在一台服务器上运行多个网站:

3.6.1 基于域名的虚拟主机(最常用)通过不同的 server_name 区分不同网站:

1234567891011121314151617server { listen 80; server_name www.baozi.com; root /var/www/baozi; location / { index index.html; }}server { listen 80; server_name www.cat.com; root /var/www/cat; location / { index index.html; }}

客户端配置:需要在 /etc/hosts 中添加映射关系:

12192.168.110.128 www.baozi.com192.168.110.128 www.cat.com

3.6.2 基于IP的虚拟主机通过不同的IP地址区分不同网站,需要服务器配置多块网卡或虚拟IP:

1234567891011121314151617server { listen 192.168.110.128:80; server_name www.baozi.com; root /var/www/baozi; location / { index index.html; }}server { listen 192.168.110.129:80; server_name www.cat.com; root /var/www/cat; location / { index index.html; }}

3.6.3 基于端口的虚拟主机通过不同的端口号区分不同网站:

123456789101112131415server { listen 80; server_name www.baozi.com; location / { index index.html; }}server { listen 8080; server_name www.cat.com; location / { index index.html; }}

3.6.4 动静分离配置Nginx处理静态资源,后端服务处理动态资源的完整配置

1234567891011121314151617181920212223242526272829303132333435http { upstream php_backend { server 192.168.110.101:8080; server 192.168.110.102:8080; } server { listen 80; server_name www.example.com; # 首页加速处理 location = / { root html; index index.html; } # 静态文件直接返回 location ^~ /static/ { root /webroot/; } # 图片等资源设置缓存 location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ { root /webroot/res/; expires 1d; } # 动态请求转发到后端 location ~ \.php$ { proxy_pass http://php_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }}

关键点:Nginx只负责转发+静态,业务逻辑交给后端处理

这里后端使用tomcat,tomcat是动态任务处理的一个服务端,主要作用是提供iava语言的运行环境,对前与nginx进行写作完成动-静分离,对后可以连接数据库,读/写数据记录。

配置文件在/usr/local/tomcat/conf/server.xml

网页文件在/usr/local/tomcat/webapps中

3.7 拓展配置3.7.1 访问控制Nginx可以通过 allow 和 deny 指令限制客户端访问:

12345location / { allow 192.168.110.91; # 允许该IP访问 deny 192.168.110.90; # 禁止该IP访问 deny all; # 其他IP都禁止}

90ip无法访问

91ip可以

3.7.2 状态监控模块利用状态统计模块查看Nginx运行状态:

123456789server { listen 80; server_name www.cat.com; location /status { stub_status on; # 启用状态监控 access_log off; # 不记录状态查询日志 }}

访问 http://www.cat.com/status 可查看Nginx当前连接数、请求数等信息。

3.8 Nginx常用命令1234567891011121314151617# 检查配置nginx -t# 启动nginx# 停止(优雅停止,等待现有连接完成)kill -s QUIT $(cat /usr/local/nginx/logs/nginx.pid)# 快速停止kill -3 $(cat /usr/local/nginx/logs/nginx.pid)# 重新加载配置(不中断服务)kill -s HUP $(cat /usr/local/nginx/logs/nginx.pid)# 查看Nginx进程ps aux | grep nginx

常用信号说明:

信号

编号

含义

QUIT

3

优雅退出

HUP

1

重新加载配置

USR1

10

日志分割,重新打开日志文件

USR2

12

平滑升级Nginx

TERM

15

正常终止进程

KILL

9

强制杀死进程

3.9 实战案例:搭建包子铺官网业务需求某连锁包子店老板需要搭建官网,通过 www.baozi.com 访问公司官网,显示”505包子铺”,同时需要通过 /status 查看网站访问情况。

实现步骤步骤1:创建网站文件目录

12mkdir -p /var/www/baoziecho "505包子铺" > /var/www/baozi/index.html

步骤2:编辑Nginx配置文件

编辑 /usr/local/nginx/conf/nginx.conf,添加server块:

12345678910111213141516server { listen 80; server_name www.baozi.com; charset utf-8; root /var/www/baozi; location / { index index.html; } location /status { stub_status on; access_log off; }}

步骤3:在客户端配置域名解析

编辑客户端 /etc/hosts 文件:

1192.168.110.128 www.baozi.com

步骤4:检查配置文件

1nginx -t

步骤5:重启Nginx服务

1systemctl restart nginx.service

步骤6:访问验证

访问 http://www.baozi.com 显示”505包子铺”

访问 http://www.baozi.com/status 查看访问统计

步骤7:查看服务状态

12ps aux | grep nginxnetstat -natp | grep 80

拓展:版本升级123456789101112131415161718192021# 下载新版本tar -zxvf nginx-1.22.0.tar.gzcd nginx-1.22.0# 配置新版本./configure [相同的配置参数]# 只编译不安装make# 备份旧版本mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old# 使用新版本cp objs/nginx /usr/local/nginx/sbin/nginx# 验证新版本nginx -V# 重启服务systemctl restart nginx.service

四、Nignx优化4.1 安全加固4.1.1 隐藏版本号背景:版本号暴露会让攻击者识别特定漏洞,增加被针对性攻击的风险。

目的:增强安全性。隐藏Nginx版本号可以防止攻击者通过版本信息识别特定的安全漏洞,降低被针对性攻击的风险。

方法一:配置文件修改(推荐)

12345678910111213# vim /usr/local/nginx/conf/nginx.confhttp { server_tokens off; # 关闭版本号显示 ...}# 重启服务验证systemctl restart nginxcurl -I http://192.168.110.128# 结果对比# 修改前:Server: nginx/1.20.2# 修改后:Server: nginx

方法二:源码级修改(深度隐藏)

12345678910111213141516# 修改源码中的版本声明vim /opt/nginx-1.20.2/src/core/nginx.h# 修改以下行#define NGINX_VERSION "1.1.1" # 改为虚假版本#define NGINX_VER "IIS" NGINX_VERSION # 改为其他服务器名称# 重新编译安装cd /opt/nginx-1.20.2/./configure --prefix=/usr/local/nginx --user=nginx --group=nginx \ --with-http_stub_status_module --with-http_ssl_modulemake && make installsystemctl restart nginxcurl -I http://192.168.110.128# 结果:Server: IIS 1.1.1

4.1.2 运行权限最小化背景:以低权限用户运行Nginx,即使进程被攻击也能限制权限损害。

目的:提高系统安全性。让Nginx子进程以低权限用户(nginx)运行,而不是root用户,即使Nginx进程被攻击也能限制权限损害。

12345678910# vim /usr/local/nginx/conf/nginx.confuser nginx nginx; # 第一个是用户,第二个是用户组# 验证systemctl restart nginxps aux | grep nginx# 输出示例# root 1234 0.0 0.1 46952 1104 ? Ss 10:00 0.00 nginx: master process# nginx 1235 0.0 0.2 47380 2380 ? S 10:00 0.00 nginx: worker process

权限分层:

Master进程:root用户创建(需要绑定80端口)

Worker进程:nginx用户运行(业务处理,权限有限)

4.2 性能优化4.2.1 静态资源缓存背景:设置缓存时间,浏览器直接使用本地缓存,减少服务器压力和带宽消耗。

目的:提高访问速度,减少服务器压力。设置静态资源缓存后,浏览器可以直接使用缓存数据,避免重复请求,节省服务器带宽。

123456789101112131415161718192021222324# vim /usr/local/nginx/conf/nginx.confhttp { server { # 图片类资源:缓存1天 location ~* \.(gif|jpg|jpeg|png|bmp|ico)$ { root html; expires 1d; # 也可用 1h, 7d, 30d 等 } # CSS/JS:缓存7天 location ~* \.(css|js)$ { root html; expires 7d; } # HTML页面:不缓存(或缓存较短时间) location ~* \.html$ { root html; expires 1h; } }}systemctl restart nginx

验证方法:

1234# 用浏览器开发者工具查看响应头# 访问 http://192.168.110.128/image.jpg# 查看 Network → image.jpg → Response Headers# 看到 Cache-Control: max-age=86400 (秒数),表示缓存1天

缓存时间转换:

1h = 3600秒

1d = 86400秒

7d = 604800秒

4.2.2 网页压缩(Gzip)背景:压缩文本文件(HTML/CSS/JS),减少传输体积,加快加载速度。

带宽浪费:未压缩和缓存导致流量消耗过大,成本上升

目的:节约网站带宽,加快用户访问速度。压缩后的文件体积更小,传输更快。

12345678910111213141516# vim /usr/local/nginx/conf/nginx.confhttp { gzip on; # 启用gzip压缩 gzip_min_length 1k; # 文件小于1KB不压缩 gzip_buffers 4 64k; # 压缩缓冲区大小 gzip_http_version 1.1; # HTTP版本 gzip_comp_level 6; # 压缩级别(1-9,级别越高压缩率越高但CPU消耗越大) gzip_vary on; # 支持缓存服务器存储压缩页面 gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/javascript application/json; # 压缩这些类型的文件 sendfile on; # 启用零复制发送文件}systemctl restart nginx

验证方法:

123# 访问 http://192.168.110.128# 浏览器开发者工具 → Network → 查看响应头# 看到 Content-Encoding: gzip 表示启用了压缩

性能对比:

未压缩的HTML文件:约100KB

压缩后:约10-15KB

传输速度提升:8-10倍

4.2.3 连接超时管理背景:HTTP KeepAlive机制保持连接,但长连接占用资源。合理设置超时防止资源浪费。

连接堆积:Keepalive连接占用过多资源,新请求无法建立连接,导致服务响应缓慢甚至宕机

目的:合理管理连接资源。

1234567891011121314# vim /usr/local/nginx/conf/nginx.confhttp { keepalive_timeout 65 180; # 保持连接时间(65秒),响应头中声明180秒 client_header_timeout 80; # 等待请求头超时,返回408 client_body_timeout 80; # 等待请求体超时,返回408 server { proxy_connect_timeout 60s; # 连接后端服务超时 proxy_send_timeout 60s; # 向后端发送数据超时 proxy_read_timeout 60s; # 接收后端数据超时 }}systemctl restart nginx

参数说明:

keepalive_timeout:TCP连接最多保持多久(防止僵尸连接)

client_header_timeout:客户端必须在指定时间内发送完请求头

client_body_timeout:客户端必须在指定时间内发送完请求体

4.2.4 工作进程优化背景:在高并发场景,增加worker进程充分利用多核CPU。

进程阻塞:进程数不足导致请求排队等待,用户体验极差

目的:提高并发处理能力。在高并发场景中,增加worker进程数可以充分利用多核CPU,提高快速响应能力。

1234567891011121314151617# 查看CPU核数cat /proc/cpuinfo | grep -c "physical id"# 输出:4(表示4核CPU)# vim /usr/local/nginx/conf/nginx.confworker_processes 8; # 建议设为核数的2倍(如4核则设8)worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; # 绑定CPU# 查看最大连接数worker_connections 2048; # 单个进程最大连接数# 总并发数 = worker_processes × worker_connections# 示例:8 × 2048 = 16384个并发systemctl restart nginxps aux | grep nginx # 查看进程数

4.2.5 日志切割背景:Nginx日志文件无限增长会导致磁盘满,需要定期轮转和清理。

资源耗尽:日志文件无限增长导致磁盘满,服务中断

目的:防止日志文件过大占用磁盘空间,便于日志管理和分析。定期清理过期日志防止磁盘满。

123456789101112131415161718192021222324252627282930# 创建日志切割脚本vim /opt/nginx_logcut.sh#!/bin/bashday=$(date -d "-1 day" "+%Y%m%d")logs_path="/var/log/nginx"pid_path="/usr/local/nginx/logs/nginx.pid"# 创建日志目录mkdir -p $logs_path# 移动并重命名日志文件mv /usr/local/nginx/logs/access.log ${logs_path}/access.log-$daymv /usr/local/nginx/logs/error.log ${logs_path}/error.log-$day# 重新打开日志文件(USR1信号告诉Nginx重建日志)kill -USR1 $(cat $pid_path)# 删除30天前的日志find $logs_path -mtime +30 -exec rm -rf {} \;# 授予执行权限chmod +x /opt/nginx_logcut.sh# 手动测试/opt/nginx_logcut.sh# 验证ls /var/log/nginxls /usr/local/nginx/logs/

配置定时任务:

12345# 每天凌晨1点自动执行crontab -e# 添加以下行0 1 * * * /opt/nginx_logcut.sh

常用信号:

HUP (1):重新加载配置

USR1 (10):日志分割,重新打开日志文件

QUIT (3):优雅关闭

4.3 防盗链配置4.3.1 原理说明HTTP Referer机制:

当用户通过链接访问资源时,HTTP请求会携带 Referer 字段

Referer 表示请求来源,通过检查它可以判断资源是否被盗用

目的:保护资源,防止其他网站盗用图片等资源,减少服务器带宽消耗。

盗链示例:

123合法访问:访问 www.example.com/image.jpg → Referer: www.example.com盗链访问:在 www.hack.com/index.html 中 → Referer: www.hack.com(来源非法)

4.3.2 基础防盗链配置123456789101112131415161718192021222324# vim /usr/local/nginx/conf/nginx.confserver { listen 80; server_name www.example.com; # 对图片资源进行防盗链 location ~* \.(jpg|gif|swf|png|jpeg)$ { # 设置允许的来源 valid_referers none blocked *.example.com example.com; # 如果来源非法 if ($invalid_referer) { # 方案一:返回403禁止访问 return 403; # 方案二:重写到错误图片 # rewrite ^/ http://www.example.com/error.png; } root /var/www/html; }}systemctl restart nginx

参数说明:

~* \.(jpg|gif|...)$:匹配图片文件(不区分大小写)

valid_referers:允许的来源列表

none:允许直接在地址栏输入(无Referer)

blocked:允许非http://开头的请求

*.example.com:允许该域名及其子域名

example.com:允许该具体域名

$invalid_referer:来源非法时为true

4.3.3 防盗链实战配置场景:资源站点允许自己访问,禁止其他网站盗链

比如:

只有*.dog.com相关的连接访问才能正常访问

其他的都会跳转至403

案例:

12345678910# 准备环境mkdir -p /var/www/htmlecho "资源服务器图片" > /var/www/html/game.jpg# 创建错误提示图片echo "403-禁止盗链" > /var/www/html/error.png# 配置hosts解析echo "192.168.110.128 www.example.com" >> /etc/hostsecho "192.168.110.130 www.hack.com" >> /etc/hosts

配置nginx:

123456789101112131415161718192021# 资源服务器配置(192.168.110.128)# vim /usr/local/nginx/conf/nginx.confserver { listen 80; server_name www.example.com; location ~* \.(jpg|gif|png)$ { valid_referers none blocked *.example.com; if ($invalid_referer) { rewrite ^/ http://www.example.com/error.png; } root /var/www/html; } location / { root /var/www/html; index index.html; }}systemctl restart nginx

验证方法:

1234567891011121314# 合法访问(直接访问图片)curl -I http://www.example.com/game.jpg# 返回 200 OK# 盗链访问(模拟来自其他网站)curl -e "http://www.hack.com" http://www.example.com/game.jpg# 返回 404 或 302 重定向# 在盗链网站(192.168.110.130)访问# 创建 /var/www/html/index.htmlecho '' > /var/www/html/index.html# 浏览器访问 http://www.hack.com# 看到的是 error.png 而不是真实的 game.jpg

4.3.4 高级防盗链配置允许搜索引擎爬虫访问:

12345678910location ~* \.(jpg|gif|png)$ { valid_referers none blocked *.example.com *.google.com *.baidu.com # 允许搜索引擎 *.bing.com; if ($invalid_referer) { return 403; } root /var/www/html;}

白名单模式(只允许特定来源):

12345678location ~* \.(jpg|gif|png)$ { valid_referers *.example.com partner.com; # 只允许这两个 if ($invalid_referer) { return 403; } root /var/www/html;}

4.4 优化效果对比

优化项

优化前

优化后

提升

版本隐藏

暴露1.20.2

隐藏/伪装

安全性↑

缓存设置

每次请求

1天缓存

请求减少↓

网页压缩

100KB

10-15KB

传输速度↑8倍

连接超时

无限占用

自动释放

资源消耗↓

工作进程

1个进程

8个进程

并发能力↑8倍

防盗链

资源被盗

禁止盗链

带宽节省↑

4.5 企业级优化配置模板12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364http { # 安全加固 server_tokens off; # 性能优化 gzip on; gzip_min_length 1k; gzip_comp_level 6; gzip_types text/plain text/css application/json application/javascript; sendfile on; keepalive_timeout 65; client_header_timeout 80; client_body_timeout 80; # 日志格式 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; # 工作进程 upstream backend_servers { server 192.168.110.101:8080 weight=5; server 192.168.110.102:8080 weight=3; } server { listen 80; server_name www.example.com; # 首页快速处理 location = / { root html; index index.html; } # 静态资源缓存 location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ { root html; expires 7d; } # 防盗链 location ~* \.(jpg|png|gif)$ { valid_referers none blocked *.example.com; if ($invalid_referer) { return 403; } root /var/www/html; } # 动态请求转发 location / { proxy_pass http://backend_servers; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }}worker_processes 8;events { worker_connections 2048;}

4.6 面试高频问题Q1: Nginx有哪些优化方向?

安全加固(隐藏版本、最小权限)

性能优化(缓存、压缩、超时、进程数)

资源保护(防盗链)

日志管理(定期切割清理)

Q2: 503错误通常是什么原因?

后端服务宕机

连接数上限(max_fails配置)

Worker进程数不足

内存/CPU不足

Q3: 缓存和防盗链的区别?

缓存:减少客户端请求频率

防盗链:防止非法来源访问资源

Q4: gzip压缩的缺点?

增加CPU消耗

并非所有文件都适合压缩(图片已压缩)

需要客户端支持

五、Docker进行Nginx的手动编译镜像构建dockerfile部署nginx手动编译123456789101112131415161718192021222324FROM centos:7RUN sed -i 's/^#baseurl=http:\/\/mirror.centos.org/baseurl=https:\/\/mirrors.aliyun.com/g' /etc/yum.repos.d/CentOS-Base.repo && \ sed -i 's/^mirrorlist=http:\/\/mirrorlist.centos.org/#mirrorlist=http:\/\/mirrorlist.centos.org/g' /etc/yum.repos.d/CentOS-Base.repo && \ yum clean all && \ yum makecache && \ yum install -y gcc pcre-devel zlib-devel openssl-devel make && yum clean all &&\ rm -rf /var/cache/yum/* /var/lib/yum/* /tmp/* /var/tmp/*WORKDIR /usr/srcADD nginx-1.20.1.tar.gz /opt/RUN cd /opt/nginx-1.20.1 && \ ./configure --prefix=/usr/local/nginx && \ make && \ make install && \ rm -rf /opt/nignx-1.20.1 /opt/nginx-1.20.1.tar.gzCOPY index.html /usr/local/nginx/html/index.htmlEXPOSE 80CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

多阶段构筑优化12345678910111213141516171819202122232425262728FROM centos:7 as builderRUN sed -i 's/^#baseurl=http:\/\/mirror.centos.org/baseurl=https:\/\/mirrors.aliyun.com/g' /etc/yum.repos.d/CentOS-Base.repo && \ sed -i 's/^mirrorlist=http:\/\/mirrorlist.centos.org/#mirrorlist=http:\/\/mirrorlist.centos.org/g' /etc/yum.repos.d/CentOS-Base.repo && \ yum clean all && \ yum install -y gcc pcre-devel zlib-devel openssl-devel make && \ yum clean allWORKDIR /optCOPY nginx-1.20.1.tar.gz .RUN tar xf nginx-1.20.1.tar.gz && \ cd nginx-1.20.1 && \ ./configure --prefix=/usr/local/nginx && \ make && make install# ------------------------------# 生产环境镜像(非常干净)# ------------------------------FROM centos:7WORKDIR /usr/local/nginxCOPY --from=builder /usr/local/nginx /usr/local/nginxCOPY index.html /usr/local/nginx/html/index.htmlEXPOSE 80CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

<<<
Previous Post
携程任我行卡与任我游卡有这些区别,你知道吗?

Copyright © 2088 世界杯门票_托马斯穆勒世界杯进球数 - noh16.com All Rights Reserved.

友情链接