Nginx配置文件详解

==========================================================

Nginx 核心配置文件 (用于 Docker 多容器环境)

==========================================================

1. 定义上游服务器 (可选,用于给后端起别名或做负载均衡)

upstream java_backend {

server backend:8080; # 这里 backend 是 Docker Compose 中的服务名

keepalive 32; # 保持长连接,提高性能

}

server {

------------------------------------------------------

A. 基础监听配置

------------------------------------------------------

listen 80; # 监听 IPv4 的 80 端口

listen :::80; # 监听 IPv6 的 80 端口

server_name 用来填写域名,如果没有域名那就填写_

server_name _; # _ 代表匹配所有域名或 IP 访问

字符集设置,防止中文乱码

charset utf-8;

------------------------------------------------------

B. 静态资源转发 (前端页面)

------------------------------------------------------

location / {

转发到前端容器的端

front 是你写docker-compse文件的时候给容器命的名

proxy_pass http://frontend:3000;

标准代理头设置

如果你通过域名访问host = **域名** 如果你通过IP访问,host = IP 地址

proxy_set_header Host $host;

告诉后端是谁在找你,获取请求用户的IP地址

proxy_set_header X-Real-IP $remote_addr;

IP链路清单,如果请求经过了多个代理(比如 CDN -> Nginx -> Java),这个字段会像接力棒一样记录所有的 IP

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

支持单页应用 (SPA) 的路由切换,防止 404

try_files uri uri/ /index.html;

}

------------------------------------------------------

C. 后端 API 接口转发 (Java/Spring Boot)

------------------------------------------------------

匹配所有以 /api/ 开头的请求

location /api/ {

1. 转发地址:使用 Docker 服务名 backend 访问

末尾加 / 表示去掉路径中的 /api/ 再转发给后端

proxy_pass http://java_backend/;

2. 身份识别头 (重点笔记!)

告诉后端原本请求的域名/Host是什么

proxy_set_header Host $host;

告诉后端用户的真实客户端 IP

proxy_set_header X-Real-IP $remote_addr;

记录整个请求链路中的所有代理 IP

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

告诉后端请求协议是 http 还是 https

proxy_set_header X-Forwarded-Proto $scheme;

3. 超时设置 (防止大任务处理时连接中断)

proxy_connect_timeout 60s;

proxy_read_timeout 60s;

proxy_send_timeout 60s;

4. 允许上传大文件 (默认只有 1M)

client_max_body_size 50m;

}

------------------------------------------------------

D. WebSocket 支持 (如果你的 AI Agent 有实时对话功能)

------------------------------------------------------

location /ws/ {

proxy_pass http://backend:8080;

proxy_http_version 1.1;

必须设置以下两个头才能建立 WebSocket 连接

proxy_set_header Upgrade $http_upgrade;

proxy_set_header Connection "upgrade";

proxy_set_header Host $host;

}

------------------------------------------------------

E. 错误页面配置

------------------------------------------------------

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root /usr/share/nginx/html;

}

------------------------------------------------------

F. 安全建议 (可选)

------------------------------------------------------

隐藏 Nginx 版本号,减少被攻击风险

server_tokens off;

}

一般情况来讲,一个NGINX配置文件对应了一个域名的配置,

真实的网络请求发过来的时候,NGINX启动,读取主配置文件,nginx.conf

执行 include:主配置里有一句 include /etc/nginx/conf.d/*.conf;那么就会将子文件的内容全部加载到内存中,进行一个巨大的路由查找。

输入域名,然后在这个巨大的路由这里进行查看,看用户输入的域名跟哪个NGINX配置文件对应,然后进行配置文件的读取,然后进行请求操作。

一个IP地址可以映射多个域名,通常情况下,我们是通过访问域名的方式访问这个网站,通过NGINX,可以让我们知道实际的请求是什么: proxy_pass http://frontend:3000;

相关推荐
by2099910 小时前
Linux GCC/G++ 编译与 Makefile 构建
linux·运维·服务器·经验分享
螺丝钉tina10 小时前
[Playwright][08] Upload 模块自动化:如何设计真实业务测试用例?
运维·自动化·测试用例
迪菲赫尔曼10 小时前
【基础篇 12】把环境与源码接起来:检查 GPU,再安装服务器上的项目
运维·服务器·开发语言·人工智能·python·yolo·目标检测
cq林志炫11 小时前
两个Linux服务器之间同步文件
linux·运维·服务器
yyuuuzz11 小时前
云服务器安全组规则优先级的机制记录
运维·服务器·网络·安全·阿里云·aws
KaiwuDB11 小时前
KaiwuDB 运维实战06:数据库备份与恢复:从理论到实战
运维·数据库·时序数据库·kaiwudb
知已难寻12 小时前
01 · OpenStack的认证管理 Keystone
运维·服务器·云原生·云计算·openstack
ai_xiaogui12 小时前
私有化部署大模型实战:PanelAI 一键搭建、Token 计费与多用户隔离
运维·私有化部署·大模型部署·大模型 token 计费·api key 统一管理·多用户实例隔离·应用市场一键部署
企鹅侠客12 小时前
Linux CPU 负载平均值(Load Average)详解:从原理到实践
linux·运维·服务器·服务器负载
易点云徐源13 小时前
HP 暗影精灵 PRO 16 安装双系统后,开机直接进入 Windows,按 F9 才能进入 Ubuntu:GRUB 菜单不显示的处理方法
linux·运维·ubuntu