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;

相关推荐
乘云数字DATABUFF3 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--4 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森4 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜5 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB6 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode8 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220708 天前
如何搭建本地yum源(上)
运维
ping某9 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树8811 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠11 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql