当前位置: 首页 > news >正文

Nginx学习与安装

一、nginx概述

nginx是高性能的开源HTTP服务器。反向代理服务器、负载均衡器和HTTP缓存

典型的应用场景为:
(1)作为静态资源服务器(部署HTML、CSS、JS、图片等)

(2)作为 反向代理服务器,转发请求到后端应用服务器(如Tomcat、node.js)

(3) 实现负载均衡,分发请求到多个后端节点

(4) 作为API网关,处理请求过滤、认证、限流等功能。

(5)部署SSL/TLS证书,实现HTTPS加密传输

二、什么是反向代理

当我们部署项目的时候,突然就接触到了nginx,然后又提到了反向代理,所以反向代理到底是什么

首先说一下正向代理:

代理客户端帮助客户端访问目标目标服务器就是正向代理(如VPN访问境外网站),目标服务器不知道实际客户是谁

反向代理:

代理客户端代理目标服务器,客户端请求先发送到反向代理服务器,再由反向代理转

转发到后端真实服务器。所以客户端不知道实际处理请求的服务器是谁

两者逻辑正好相反

三、反向代理的流程

  1. 客户端向反向代理服务器(Nginx)发送请求(如 http://example.com/api)。
  2. Nginx 根据配置的规则(如 URL 路径、域名)判断请求应转发到哪个后端服务器(如 192.168.1.100:8080)。
  3. Nginx 将请求转发给后端服务器,并等待后端返回响应。
  4. 后端服务器处理请求后,将响应返回给 Nginx。
  5. Nginx 将响应转发给客户端,客户端感知不到后端服务器的存在。

四、Nginx反向代理配置示例+分析

#user  nobody;
worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {worker_connections  1024;
}http {include       mime.types;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;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;#gzip  on;server {listen       82;server_name  118.170.91.230;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root usr/local/myLibrary/dist;try_files $uri $uri /index.html;index index.html ie.html;# 禁用缓存确保获取最新HTMLadd_header Cache-Control "no-cache, no-store, must-revalidate";add_header Pragma "no-cache";34,0-1        Top
1.全局配置:
worker_processes 1;
events {worker_connections 1024;
}

(1)指定了Nginx使用1个工作进程

(2)每个工作进行最多处理1024个链接

2.HTTP块配置
http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;
3.服务器代理配置
 3.1 服务器静态资源服务
server {listen 82;server_name 118.178.91.230;location / {root /usr/local/myLibrary/dist;try_files $uri $uri/ /index.html;index index.html ie.html;add_header Cache-Control "no-cache, no-store, must-revalidate";add_header Pragma "no-cache";add_header Expires 0;}
}

(1)监听端口:82

(2)服务器名:118.178.91.230

(3)location / 处理所有请求:

  • root 指定静态文件根目录为 /usr/local/myLibrary/dist

  • try_files 尝试按顺序查找文件:先找请求的URI,再找目录,最后回退到index.html(支持前端路由)

  • index 指定默认索引文件

  • 添加了禁用缓存的HTTP头,确保客户端总是获取最新HTML

3.2 后端API代理(核心代理配置)
location /prod-api/ {proxy_pass http://118.178.91.230:8082/;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

  (1)匹配规则:所有以/prod-api/开通的请求都会被代理

  (2)代理目标:

  • proxy_pass http://118.178.91.230:8082/ 将请求转发到后端服务器 118.178.91.230:8082

  • 注意结尾的 / 很重要,它会将 /prod-api/xxx 转换为 http://后端服务器/xxx(去掉 /prod-api 前缀)

(3)请求头处理:

  • proxy_set_header Host $host:保持原始请求的Host头

  • X-Real-IP:传递客户端真实IP

  • X-Forwarded-For:追加代理链信息

4.梳理代理的流程:

1.当请求到达Nginx(端口号82):

 如果是/prod-api/开头的请求->转发到后端 http://118.178.91.230:8082/

其他请求->尝试从/usr/local/myLibrary/dist提供静态文件

2.代理转发时:

  • 例如请求 http://118.178.91.230:82/prod-api/user

  • Nginx会将其转发到 http://118.178.91.230:8082/user

  • 后端响应后,Nginx再将响应返回给客户端

3.静态文件服务:

  • 当请求前端资源时,Nginx直接返回文件系统中的文件

  • 对于前端路由(如React/Vue的单页应用),通过 try_files 回退到 index.html

你有没有一个疑问,为什么再配置后端api代理时为什么要使用/prod-api/作为api请求前缀

由你的前端开发时设计决定的(我这里是基于若依框架开发的

# 页面标题
VUE_APP_TITLE = 若依管理系统# 生产环境配置
ENV = 'production'# 若依管理系统/生产环境
VUE_APP_BASE_API = '/prod-api'

五、Nginx的安装

(1)创建路径

(2)解压

(3)配置编译编译方法

./configure

可以看到配置编译后的结果信息:


(4)编译nginx

在nginx源文件目录中直接运行 make指令
(5)安装nginx

(6)安装nginx

ok,nginx的工作区形成了

(7)更改nginx.conf配置文件

http://www.dtcms.com/a/330151.html

相关文章:

  • Docker(springcloud笔记第三期)
  • docker 将本地python环境(有系统依赖)进行打包移到另一个服务器进行部署
  • 飞算AI:企业智能化转型的新引擎——零代码重塑生产力
  • sql查询优化方式常见情况总结
  • TLSv1.2协议与TCP/UDP协议传输数据内容差异
  • 【Redis】Sentinel (哨兵)
  • 深度学习实战114-基于大模型的深度研究(DeepResearch)架构:从自主信息探索到洞察生成的革命
  • games101 第三讲 Transformation(变换)
  • RK3568项目(十五)--linux驱动开发之进阶驱动
  • Linux应用层开发--进程处理
  • 【完整源码+数据集+部署教程】医学报告图像分割系统源码和数据集:改进yolo11-HGNetV2
  • @Linux进程管理工具 - PM2全面指南
  • 理财 - 基金
  • 【React】use-immer vs 原生 Hook:谁更胜一筹?
  • PromptPilot — AI 自动化任务的下一个环节
  • 云蝠智能 Voice Agent 多模型接入技术架构与实践
  • 微信小程序实现导航至目的地
  • 腾讯位置商业授权微信小程序关键词输入提示
  • python自学笔记7 可视化初步
  • 并发编程(八股)
  • epoll模型解析
  • 数据科学与计算:从基础到实践的全面探索
  • 深度学习(6):参数初始化
  • 动画相关 属性动画+animateToImmediately+ImageAnimator帧动画组件+模态转场
  • 【C++】哈希表的实现
  • EUDR的核心内容,EUDR认证的好处,EUDR意义
  • web开发,在线%射击比赛管理%系统开发demo,基于html,css,jquery,python,django,三层mysql数据库
  • lesson37:MySQL核心技术详解:约束、外键、权限管理与三大范式实践指南
  • SpringBoot工程妙用:不启动容器也能享受Fat Jar的便利
  • CAD 的 C# 开发中,对多段线(封闭多边形)内部的点进行 “一笔连线且不交叉、不出界