静态资源部署
概述
1、客户端通过浏览器发送一个 HTTP 请求,获取所需要内容后,并把内容回显展示在页面
2、请求内容的类型
(1)静态资源:在服务器端真实存在,并且能直接展示的文件,如:html 页面、css 文件、js 文件、图片、视频等资源
(2)动态资源:在服务器端真实存在,但获取需要经过一定的业务逻辑处理,根据不同的条件,在页面展示不同部分的内容,如:报表数据展示、根据当前登录用户展示相关具体数据等资源
虚拟主机、域名解析
1、HTTP 协议(高级协议)在 TCP/IP 协议(基础协议)之上
2、虚拟主机
(1)一台服务器只能对应一个站点,通过虚拟主机技术,可以虚拟化成多个站点,同时对外提供服务
(2)一台主机,同一 IP,不同域名
3、应用
(1)多用户二级域名
(2)短网址
(3)HTTPDNS
server 块
1、一个 server 代表一个虚拟主机
2、一个 Nginx 配置多个 server,即同时运行多个主机
3、主机之间互不干扰,拥有独立站点、根目录
4、通过 listen(监听)不同端口区分主机
配置指令
1、listen
(1)配置监听端口
(2)语法
listen address[:port] [default_server]……;
listen port [default_server]……;
(3)默认值
listen *:80 | *:8000;
(4)位置:server
(5)default_server:标识符,将此虚拟主机设置成默认主机
(6)默认主机:如果没有匹配到对应 address:port,则会默认执行 default_server
(7)如果不指定 default_server,默认使用第一个 server
2、server_name
(1)设置虚拟主机服务名称(域名 / 主机名)
(2)语法
server_name name1 name2……;
(3)默认值
server_name "";
(4)位置:server
(5)允许配置多个域名,指向同一主机
3、server_name 匹配
(1)精确匹配
(2)通配符匹配:支持通配符 *,但通配符不能出现在域名的中间,只能出现在首段或尾段
(3)正则表达式匹配:使用 ~ 作为正则表达式字符串的开始标记
正则表达式 | 说明 |
^ | 匹配搜索字符串开始位置 |
$ | 匹配搜索字符串结束位置 |
. | 匹配除换行符 \n 之外的任何单个字符 |
\ | 转义字符,将下一个字符标记为特殊字符 |
[xyz] | 字符集,与任意一个指定字符匹配 |
[a-z] | 字符范围,匹配指定范围内的任何字符 |
\w | 与以下任意字符匹配 A-Z a-z 0-9 _,等价于 [A-Za-z0-9_] |
\d | 数字字符匹配,等价于 [0-9] |
{n} | 正好匹配 n 次 |
{n,} | 至少匹配 n 次 |
{n,m} | 匹配至少 n 次,至多 m 次 |
* | 零次或多次,等价于 {0,} |
+ | 一次或多次,等价于 {1,} |
? | 零次或一次,等价于 {0,1} |
(4)匹配顺序(从上至下):完全匹配 -> 通配符在前 -> 通配符在后 -> 正则表达式匹配
(5)都不匹配:listen 的 default_server -> listen 的第一个 server 块
4、location
(1)设置请求的 URI,即匹配 server_name + location
(2)语法
location [ |=|~|~*|^~|@] uri{……}
(3)位置:server、location
(4)URI 变量:待匹配的请求字符串
(5)不带符号:要求必须以指定模式开始
(6)=:表示不包含正则表达式,必须与指定的模式精确匹配
(7)~:表示当前 URI 中包含正则表达式,并且区分大小写
(8)~*:表示当前 URI 中包含正则表达式,并且不区分大小写
(9)如果 URI 包含正则表达式,需要用上述两个符合来标识
(10)^~:表示不包含正则表达式,作用与不加符号一致,唯一不同的是,根据最大前缀原则,使用普通 URI 匹配度最高的 location,则停止搜索其他模式
(11)@:定义一个命名的 location,用于内部定向,例如 error_page,try_files
(12)匹配顺序:Nginx 服务器首先检查多个 location 中是否有普通 URI 匹配,如果有多个匹配,先记住匹配度最高的 location 块,再检查正则匹配,从上到下依次匹配,一旦匹配成功,则结束检查,并使用该 location 块处理此请求,如果正则匹配全部失败,就会使用所记录普通 URI 匹配度最高的 location 块处理此请求;当普通匹配的最长前缀匹配有符号 ^~ 时,就不会再匹配正则,直接使用当前匹配的 location 块处理此请求;使用符号 = 定义一个精确匹配 URI、location 块,如果找到一个精确的匹配,则搜索终止
5、root
(1)设置请求的根目录
(2)语法
root path;
(3)path 为 Nginx 服务器接收到请求以后,查找资源的根目录路径
(4)默认值
root html;
(5)位置:http、server、location
(6)root 表示最上层目录
(7)root 处理结果:root 路径 + location 路径
(8)location 路径以 / 结尾,root 无要求
6、alias
(1)更改 location 的 URI
(2)语法
alias path;
(3)path 为修改后的根路径
(4)位置:location
(5)alias 定义一个目录别名
(6)alias 处理结果:使用 alias 路径替换 location 路径
(7)location 路径是以 / 结尾,则 alias 必须以 / 结尾
7、index
(1)设置网站的默认首页
(2)语法
index file……;
(3)默认值
index index.html;
(4)位置:http、server、location
(5)index 后面可以跟多个 file,如果访问时,没有指定具体访问的资源,则会依次进行查找,找到第一个为止
8、error_page
(1)设置网站的错误页面
(2)语法
error_page code…… [=[response]] uri;
(3)位置:http、server、location
(4)当出现响应 code 后的处理方式
(5)可以指定具体跳转的地址
(6)可以指定重定向地址
(7)使用 location 的 @,符合完成错误信息展示
(8)可选项:[=[response]] 将响应代码更改为另一个响应代码
优化配置语法
1、sendfile
(1)开启高效文件传输模式
(2)语法
sendfile on |off;
(3)默认值
sendfile off;
(4)位置:http、server、location
2、tcp_nopush
(1)该指令必须在 sendfile 为 on 下才会生效
(2)主要用来提升网络包的传输效率
(3)语法
tcp_nopush on|off;
(4)默认值
tcp_nopush off;
(5)位置:http、server、location
(6)缓存数据,再发送
3、tcp_nodelay
(1)该指令必须在 keep-alive 连接开启的情况下才生效
(2)提高网络包传输的实时性
(3)语法
tcp_nodelay on|off;
(4)默认值
tcp_nodelay on;
(5)位置:http、server、location
(6)有数据,就发送
4、tcp_nopush、tcp_nodelay
(1)在 Linux 2.5.9 版本后,两者兼容
(2)tcp_nopush 开启,确保在发送到客户端之前,已经充分缓存数据包,减少网络开销,并加快文件发送的速度
(3)最后一个没有缓存满而暂停的数据包,Nginx 会忽略 tcp_nopush,tcp_nodelay 强制套接字发送数据
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战