nginx学习
公司是使用公司内部的开发部署平台进行部署项目的。
开发部署平台的使用过程就是需要先配置好nginx的一些信息,然后进行应用构建,这个应用构建是从git上拉取最新项目进行构建的。接着是部署实例。
应用构建可以理解为将应用打包成jar包,jar内置tomcat、所有第三方依赖库、编译后的.class文件。部署实例可以理解为将jar包放到服务器某个目录下,然后启动jar包,jar内置的tomcat也会启动。那么tomcat就会监听端口的所有请求。
java -jar → JVM 加载 → Spring 容器初始化 → 自动创建内嵌 Tomcat → 启动端口监听 → 应用就绪。
ok,除了jar包方式,还有容器部署的方式,这个坑后续再补。现在我们研究这个nginx:
整个请求过程nginx起到的作用如下:
- 访问页面: 浏览器访问
http://localhost:80
。- 👉 Nginx 接收到请求 (
GET /
). - 👉 Nginx 查找配置的
root
目录,找到index.html
文件。 - 👉 Nginx 将
index.html
文件内容返回给浏览器。 (静态资源服务)
- 👉 Nginx 接收到请求 (
- 加载静态资源: 浏览器解析
index.html
,发现需要加载main.js
,style.css
,logo.png
。- 👉 浏览器发起新请求
GET /static/js/main.js
,GET /static/css/style.css
,GET /images/logo.png
到localhost:80
。 - 👉 Nginx 接收到这些请求。
- 👉 Nginx 根据
root
配置,在/path/to/your/vue/dist/static/js/
,/path/to/your/vue/dist/static/css/
,/path/to/your/vue/dist/images/
目录下找到对应的文件。 - 👉 Nginx 将这些文件内容返回给浏览器。(静态资源服务)
- 👉 浏览器发起新请求
- 用户点击按钮 (触发 API 调用): 前端 JS (Vue) 代码执行,例如
axios.get('/api/data')
。- 👉 浏览器发起请求
GET http://localhost:80/api/data
。 (注意:请求发给80
端口!) - 👉 Nginx 接收到请求 (
GET /api/data
). - 👉 Nginx 检查配置,发现路径
/api/data
匹配了location /api/
规则。 - 👉 Nginx 反向代理:将请求转发到
proxy_pass
指定的地址http://localhost:8080/api/data
。 🔄 (关键步骤!) - 👉 运行在
8080
端口的 Spring Boot 应用收到请求GET /api/data
。 - 👉 Spring Boot 执行对应的 Controller 方法,查询数据库/处理业务,生成数据 (JSON)。
- 👉 Spring Boot 将 JSON 数据作为响应返回给… Nginx (因为是 Nginx 转发过来的请求)。
- 👉 Nginx 收到 Spring Boot 的响应 (JSON)。
- 👉 Nginx 将这个 JSON 响应原封不动地返回给浏览器。✅ (反向代理完成)
- 👉 浏览器发起请求
- 前端展示数据: 浏览器中的
axios.get
接收到 Nginx 返回的响应(里面是 Spring Boot 生成的 JSON)。- 👉 前端 JS 解析 JSON 数据。
- 👉 前端 JS 使用这些数据更新页面(如填充表格、刷新图表)。