前言
我一直觉得自己前端技术掌握的还不错,可没想到,前几天被后端的同事吐槽了一句:"你连 Nginx 命令都不会?"好吧,你算是把我给刺激到了!不能忍!学它!
不过想想也是,Nginx 这东西虽然在后端用得多,但咱前端也不能两眼一抹黑啊,所以经过我两天的学习,也算是知道 Nginx 有什么用了,下面我就来分享一下我学的一些内容。注:想看常用命令汇总的直接拉到文章最底部。
Nginx是什么?
Nginx 是一个非常高性能的 Web 服务器和反向代理服务器。
- Web服务器就是存放前端静态资源的服务器,也就是存放每次项目打包后的dist文件的地方。
- 反向代理服务器是指位于客户端和后端服务器之间的服务器
明白了这两个服务器的概念,我们再来详细的说一下它为什么高效?首先我们从它
作为 Web 服务器的层面来讲:
-
Nginx 在处理静态资源时的速度和效率非常高,因为它采用了
异步非阻塞的事件驱动模型,和咱们前端中理解的异步一个意思,不会在处理一个请求时阻塞等待其他操作完成,能够同时处理多个并发请求。在内存方面,Nginx减少了内存碎片的产生,即便处理大量静态文件请求,也不会因内存问题导致性能下降,它还使用了轻量级的进程来处理请求,每个进程能够处理多个连接,相比传统的多线程模型,减少了线程切换和同步的开销,从而提高了系统的并发处理能力。此外,Nginx支持对静态文件进行缓存,当客户端请求相同的静态资源时,可以直接从缓存中返回,无需再次从磁盘读取文件,这一点和我们浏览器机制是差不多的。 -
支持 HTTP 和 HTTPS 协议,可以提供安全的网页来打开前端项目。
作为反向代理服务器的层面来讲:
-
它能接收来自客户端的请求,并将这些请求转发到后端的多个服务器上,这有助于实现负载均衡,将请求均匀地分配到不同的后端服务器,避免单个服务器过载。
-
支持处理 SSL 加密,大大减轻后端服务器的加密和解密负担。
-
可以隐藏后端服务器,增强后端服务器的安全性,防止直接暴露后端服务器的信息。
前端可以用Nginx做什么?
-
静态资源服务: 将前端的静态资源通过 Nginx 进行高效的分发和缓存,提高资源加载速度。
-
解决跨域问题: 通过配置 Nginx 的反向代理,可以规避浏览器的同源策略限制,解决跨域问题。
-
负载均衡: 在前端应用部署多个实例时,利用 Nginx 实现请求的负载均衡,确保各个实例的负载相对均衡。
-
缓存控制: 可以更精细地控制前端资源的缓存策略,如设置缓存的有效期、根据文件类型进行不同的缓存处理等。
-
配置 URL 重写: 根据业务需求和路由模式,对前端的 URL 进行重写和跳转。
-
配合开发环境: 在开发过程中,配置 Nginx 来模拟不同的环境和场景,方便前端的开发和调试。
常用的 Nginx 命令汇总
| 命令 | 释义 |
|---|---|
| nginx -s reload | 重新加载 Nginx 配置文件,使配置生效,而无需中断服务 |
| nginx -s stop | 快速停止 Nginx 服务 |
| nginx -t | 检查 Nginx 配置文件的语法是否正确 |
| nginx -V | 显示 Nginx 的版本信息以及编译时的配置参数 |
| nginx -v | 仅显示 Nginx 的版本信息 |
| nginx -c filename | 使用指定的配置文件启动 Nginx 服务,而不是默认的配置文件 |
| nginx -p prefix | 设置 Nginx 的工作目录前缀 |
| nginx -g directives | 在命令行中设置全局配置指令 |
| nginx -h | 显示 Nginx 命令的帮助信息 |
| nginx -u username | 以指定的用户身份运行 Nginx 工作进程 |
| nginx -e filename | 将错误日志输出到指定的文件 |
| nginx -q | 在测试配置时,抑制非错误消息的显示 |
| nginx -T | 打印包括主配置和所有包含文件的配置内容 |
| nginx -k start/stop/reopen/reload | 用于控制 Nginx 服务的启动、停止、重新打开和重新加载 |
| nginx -l | 显示 Nginx 模块信息 |
| nginx -M | 显示已加载的模块及其相关信息 |
| nginx -L | 显示 Nginx 支持的指令列表 |
| nginx -o | 在测试配置时,只显示错误信息 |
| nginx --builddir=dir | 指定构建目录 |
| nginx -S signal | 向主进程发送指定的信号,例如 nginx -S quit 用于优雅地停止服务 |
| nginx --with-http_ssl_module | 在编译时指定包含 HTTP SSL 模块 |
| nginx --without-http_gzip_module | 在编译时排除 HTTP Gzip 模块 |
| nginx --with-http_realip_module | 在编译时包含获取真实客户端 IP 的模块 |
| nginx --with-http_stub_status_module | 启用状态信息统计模块 |
| nginx --with-http_auth_request_module | 包含 HTTP 授权请求模块 |
| nginx --with-http_v2_module | 启用 HTTP/2 模块 |
| nginx --with-mail_ssl_module | 在处理邮件时启用 SSL 模块 |