Nginx 容器化部署实战:SPA 路由、Cookie 透传与 WebSocket 全配置详解

发布时间:2026/8/24 15:04:13

Nginx 容器化部署实战:SPA 路由、Cookie 透传与 WebSocket 全配置详解
场景容器内同时跑 Nginx 和 Go 后端。Nginx 负责前端 Vue SPA 静态资源7777 端口、/api反向代理到 Go8888、/static静态资源代理上传的图片/文件并带 30 天强缓存。同时解决四个经典问题SPA 路由 404、Cookie 丢失、WebSocket 握手失败、非 root 用户运行权限。1. 完整配置nginx.conf# Nginx 配置文件 # 容器以非 root 用户 (1000) 运行不切换用户 worker_processes auto; # 自动匹配 CPU 核数 pid /run/nginx/nginx.pid; # PID 文件位置非 root 可写 error_log /var/log/nginx/error.log warn; events { worker_connections 1024; # 单 worker 最大连接数 } http { # 非 root 用户临时目录覆盖 Alpine 默认的 /var/lib/nginx/tmp否则 403 权限错误 client_body_temp_path /tmp/nginx_client_body; proxy_temp_path /tmp/nginx_proxy; fastcgi_temp_path /tmp/nginx_fastcgi; uwsgi_temp_path /tmp/nginx_uwsgi; scgi_temp_path /tmp/nginx_scgi; # MIME 类型 include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; server { listen 7777; # 前端入口端口 server_name _; client_max_body_size 30M; # 上传文件大小限制壁纸/图片/头像 # ───────────────────────────── # 前端静态文件 SPA 路由 # ───────────────────────────── location / { root /usr/share/nginx/html; index index.html; # SPA 路由核心所有未匹配的路径都返回 index.html # 由前端 vue-router 接管路由history 模式 try_files $uri $uri/ /index.html; } # ───────────────────────────── # 后端 API 反向代理 # ───────────────────────────── location /api/ { proxy_pass http://127.0.0.1:8888; # 注意无尾斜杠 保留原始 URI proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 确保 cookie 透传解决 session/JWT 丢失问题 proxy_set_header Cookie $http_cookie; proxy_pass_header Set-Cookie; # 禁止 nginx 修改重定向解决 307 二次请求问题 proxy_redirect off; # WebSocket 支持 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; # 代理超时聊天/SSE 流式接口需要 proxy_connect_timeout 90; proxy_read_timeout 90; } # ───────────────────────────── # 静态文件代理壁纸、聊天文件、头像等 # ───────────────────────────── location /static/ { proxy_pass http://127.0.0.1:8888; # Go 后端 r.Static(/static, ./static) proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 静态资源强缓存 30 天 expires 30d; add_header Cache-Control public, immutable; } } }2. 逐段讲解每个配置解决什么问题2.1 SPA 路由 ——try_fileslocation / { root /usr/share/nginx/html; index index.html; try_files $uri $uri/ /index.html; }问题Vue Router 用 history 模式时URL 是/blog/article/123而不是/#/blog/article/123。用户刷新页面时Nginx 找不到对应的真实文件返回 404。解决try_files依次尝试$uri— 命中真实文件如/assets/index-xxx.js$uri/— 命中目录自动找 index.html/index.html— 兜底交给前端路由处理注意后端要有对应的 API 接口或返回 404 页面避免 SEO 无效页面被索引。2.2 Cookie 透传 —— 解决登录态丢失proxy_set_header Cookie $http_cookie; proxy_pass_header Set-Cookie;问题默认 Nginx 会透传 Cookie但某些场景跨域、代理到不同端口会导致 Session 丢失。显式声明后Cookie把客户端 Cookie 原样传给后端Set-Cookie后端设置的 Cookie 原样返回给客户端2.3 307 重定向问题 ——proxy_redirect off问题Go 后端某些接口返回 307如 HTTP→HTTPS 跳转Nginx 默认会改写 Location 头导致客户端跳转到错误地址出现二次请求或死循环。解决proxy_redirect off;让 Location 头原样透传。2.4 WebSocket —— 协议升级proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade;问题WebSocket 握手时客户端发Upgrade: websocket头HTTP/1.0 不支持长连接Nginx 必须用 HTTP/1.1 转发并带上 Upgrade/Connection 头否则握手失败。2.5 非 root 用户运行 —— 临时目录client_body_temp_path /tmp/nginx_client_body; proxy_temp_path /tmp/nginx_proxy;问题容器以USER 1000:1000运行时Nginx 默认的/var/lib/nginx/tmp没有写权限上传文件或代理大响应时直接 403/500。解决把临时目录全部指到/tmp下并在 Dockerfile 里chown给用户 1000。2.6 上传大小限制client_max_body_size 30M;不设置默认只有 1M上传壁纸/图片会报413 Request Entity Too Large。3. 验证与排查命令# 检查配置语法nginx-t-c/etc/nginx/nginx.conf# 容器内实时日志dockerlogs-fledger-service# 手动验证各路由curl-Ihttp://localhost:7777/# 前端页面curl-Ihttp://localhost:7777/api/v1/user/info# API 代理curl-Ihttp://localhost:7777/static/wallpapers/xxx.jpg# 静态资源看 Cache-Control4. 常见问题排查表现象原因解决刷新页面 404没配try_files加try_files $uri $uri/ /index.html;登录后刷新掉登录态Cookie 没透传加proxy_set_header Cookieproxy_pass_header Set-CookieWebSocket 连不上缺 Upgrade 头加proxy_http_version 1.1 Upgrade/Connection 头上传 413体积超限client_max_body_size 30M;上传 403非 root 无写权限临时目录指到/tmp chown图片不更新强缓存 30 天文件名带 hash 或改用no-cache接口 502后端没启动/端口不对检查proxy_pass地址与后端监听端口5. 与 Dockerfile 的配合# 非 root 运行所需创建目录并授权 RUN mkdir -p /var/log/nginx /run/nginx /var/lib/nginx/logs /tmp/nginx_client_body /tmp/nginx_proxy \ chown -R 1000:1000 /app /usr/share/nginx/html /var/log/nginx /run/nginx /var/lib/nginx /tmp/nginx_client_body /tmp/nginx_proxy USER 1000:1000总结这份配置的核心价值一个 7777 端口搞定前后端静态资源 API WebSocket 静态文件外部只暴露一个入口四个经典坑全部规避SPA 404、Cookie 丢失、WS 握手失败、非 root 权限性能静态资源 30 天强缓存后端只处理动态请求

相关新闻

计算机笔试题总结

计算机笔试题总结

2026/8/24 14:54:13

1.激活函数 sigmoid (0,1) tanh (-1,1) relu max(0,x) leaky relu 2.RPO,RTO RPO(恢复点目标)—— 衡量“数据能丢多少” 定义:指业务发生故障时,最多能容忍丢失多少数据(按时间计算) RTO&#xff0…

388 个 PR:AI 自主运维实测

388 个 PR:AI 自主运维实测

2026/8/24 14:54:13

摘要:Claude Code 负责人 Boris Cherny 做了个实验——让 Claude 通过一个 Slack 频道每天自主维护 Anthropic 的六个端,几周开了 388 个 PR、合并 180 个。本文拆开这套"自动驾驶式运维"的 12 个 routine、46% 合并率背后的真实含义&#xff…

KMS_VL_ALL_AIO 激活脚本:3 步搞定 Windows 和 Office 激活

KMS_VL_ALL_AIO 激活脚本:3 步搞定 Windows 和 Office 激活

2026/8/24 14:54:13

KMS_VL_ALL_AIO 激活脚本:3 步搞定 Windows 和 Office 激活 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 新装的 Win10 专业版刚过第 7 天,右下角准时爬出"此 Win…

Java异步编程与分布式系统面试核心考点解析

Java异步编程与分布式系统面试核心考点解析

2026/8/24 18:54:23

1. 面试场景还原与技术考点解析那天下午三点,陈千语准时出现在科技园区B座的3楼会议室。空调出风口正对着面试座位,他下意识把简历往左边挪了挪。技术主管推门进来时,手里拿着台亮着屏幕的MacBook——这通常意味着现场coding环节逃不掉了。&q…

FastJson反序列化漏洞深度审计:原理、利用链与安全实践

FastJson反序列化漏洞深度审计:原理、利用链与安全实践

2026/8/24 18:54:23

1. 项目概述:一次完整的FastJson反序列化漏洞深度审计之旅最近在做一个内部系统的安全评估,又双叒叕碰到了FastJson。这个库在Java生态里太常见了,功能强大,用起来也方便,但它的反序列化安全问题,就像房间里…

深度学习面试核心要点与PyTorch实战解析

深度学习面试核心要点与PyTorch实战解析

2026/8/24 18:54:23

1. 深度学习面试核心要点解析作为一名经历过数十场深度学习岗位面试的从业者,我深知面试官最常考察的核心知识点。这份总结将系统梳理PyTorch框架和深度学习算法原理中的高频考点,帮助你在面试中游刃有余。不同于简单的知识点罗列,我会结合真…

弱电门禁系统施工组织设计:从需求解析到落地部署的实战指南

弱电门禁系统施工组织设计:从需求解析到落地部署的实战指南

2026/8/24 18:54:23

1. 项目启动:从“一张图纸”到“一套活路”的认知转变 干弱电门禁系统这行十几年,我见过太多项目从图纸到落地,最后验收时问题百出的情况。很多时候,问题不是出在设备本身,而是从一开始的“施工组织设计”就没整明白。…

前端面试实战指南:React/Vue原理与工程优化

前端面试实战指南:React/Vue原理与工程优化

2026/8/24 18:54:23

1. 项目背景与核心价值这份前端面试笔记最初是我在准备2026年春季招聘时整理的私人资料库。随着前端技术栈的快速迭代,我发现市面上的面试资料要么过于基础,要么缺乏真实业务场景的深度解析。于是决定系统梳理大厂高频考点和工程实践要点,形成…

零基础小白也能学会网络安全?收藏这份转行入行核心指南,助你轻松拿高薪!

零基础小白也能学会网络安全?收藏这份转行入行核心指南,助你轻松拿高薪!

2026/8/24 18:44:22

零基础小白也能学会网络安全?收藏这份转行入行核心指南,助你轻松拿高薪! 本文针对零基础、想跳槽、年龄偏大的群体,分享了如何转行进入网络安全行业的核心逻辑。文章强调网络安全行业需要终身学习,并提出三个核心问题…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/23 0:02:09

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/23 0:02:09

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/23 0:02:09

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

OpenModScan:免费跨平台 Modbus 主站调试工具,让现场通讯验证一键搞定

OpenModScan:免费跨平台 Modbus 主站调试工具,让现场通讯验证一键搞定

2026/8/24 0:03:28

OpenModScan:免费跨平台 Modbus 主站调试工具,让现场通讯验证一键搞定 【免费下载链接】OpenModScan Open ModScan is a Free Modbus Master (Client) Utility 项目地址: https://gitcode.com/gh_mirrors/op/OpenModScan OpenModScan 是一款开源免…

WechatHook 终极指南:5大核心能力详解,3分钟看懂微信自动化

WechatHook 终极指南:5大核心能力详解,3分钟看懂微信自动化

2026/8/24 0:03:28

WechatHook 终极指南:5大核心能力详解,3分钟看懂微信自动化 【免费下载链接】WechatHook Enjoy hooking wechat by Xposed....Accessibility...and so on... 项目地址: https://gitcode.com/gh_mirrors/we/WechatHook WechatHook 是一个基于 Xpos…

如何在ThinkPad X390上安装macOS:OpenCore EFI完整指南

如何在ThinkPad X390上安装macOS:OpenCore EFI完整指南

2026/8/24 0:03:28

如何在ThinkPad X390上安装macOS:OpenCore EFI完整指南 【免费下载链接】ThinkpadX390-Opencore-EFI macOS Catalina & Big Sur & Monterey on ThinkPad X390 (Hackintosh) 项目地址: https://gitcode.com/gh_mirrors/th/ThinkpadX390-Opencore-EFI …

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/22 4:13:47

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/22 1:32:34

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…