docker安装nginx,部署多个前端项目在同一个server中去配置,设置后端接口转发

devtools/2024/9/25 23:16:30/

nginx_1">nginx配置文件示例

进入挂载的目录,我的是/docker/nginx/conf/conf.d/default.conf

server {listen       80;listen  [::]:80;server_name  localhost;client_max_body_size 100M;  # Adjust this size as needed# 处理 /ai_book 请求location /ai_book {alias /usr/share/nginx/html/ai_book/dist;  # 指向 /dist 目录index  index.html index.htm;try_files $uri $uri/ /index.html;  # 尝试找到文件,找不到回退到 /ai_book/index.html}# 处理 /gw/ 请求,指向 /docker/nginx/html/dist/gw 目录location /gw{alias  /usr/share/nginx/html/gw/dist;  # 指向 /usr/share/nginx/html/distindex  index.html index.htm;try_files $uri $uri/ /gw/index.html;  # 尝试找到文件,最终回退到 /gw/index.html}# Java 后端服务代理到 8083 端口
location /blog {proxy_pass http://192.168.1.118:8083/;  # 使用 私有ip 访问宿主机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;
}# 错误页面配置error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}
}=====================================================示例二===================================================================
server {listen 80;listen [::]:80;server_name localhost;client_max_body_size 100M;  # Adjust this size as needed# 官网静态页面 (默认主页)location / {root /usr/share/nginx/html/gw_web;index index.html index.htm;try_files $uri $uri/ /index.html;}# Java 后端服务(代理到9001端口)location /compute {proxy_pass http://172.19.400.108:9001/jiutuai/api1/;   # 反向代理到 Java 服务,记得结尾需要加上/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;}# Python 后端服务(代理到5000端口)location /tupu {proxy_pass http://localhost:5000;   # 反向代理到 Python 服务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;}# 知识图谱前端页面(5010端口对应的前端)location /kg {alias /usr/share/nginx/html/kg/dist;index index.html index.htm;try_files $uri $uri/ /kg/index.html;  # SPA 路由处理}# AI 书籍前端页面(9003端口对应的前端)location /ai_book {alias /usr/share/nginx/html/ai_book/dist;index index.html index.htm;try_files $uri $uri/ /ai_book/index.html;  # SPA 路由处理}# 错误页面配置error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;}
}

注意

涉及到文件上传,在nginx的这个配置需要加上    
client_max_body_size 100M;  # Adjust this size as needed否则大文件上传可能会出问题在后端请求的时候,比如遇到文件或者图片转url的端口应该变为前端的端口,和部署的转发地址,也就是/compute
比如 前端端口是8081,后端端口是9001,返回给前端去访问的地址应该为下面这个 
http://xx.xx.xxx.xxx:8081/compute/file/upload

区别 alias 和 root

  • Nginx 配置中的 alias 指令,用于将请求的 URL 路径映射到服务器的文件系统目录。具体来说:
alias  /usr/share/nginx/html/gw/dist;  # 指向 /usr/share/nginx/html/gw/dist

这个配置的意思是,当 Nginx 收到匹配 /gw 路径的请求时,它会将请求的文件路径映射到 /usr/share/nginx/html/gw/dist 目录,而不是使用默认的根目录(root)。

  • root:root 指令会将匹配的 URL 路径直接附加到指定的根目录路径中。
  • alias:alias 会将整个 URL 路径替换为指定的路径。
    举例说明
    假设有以下 Nginx 配置:
location /gw {alias /usr/share/nginx/html/gw/dist;
}

当用户请求 http://example.com/gw/somefile.html 时,Nginx 会将 /gw/somefile.html 映射为文件系统中的 /usr/share/nginx/html/gw/dist/somefile.html,然后尝试从该目录返回文件 somefile.html。
与此相反,若你使用 root 指令:

location /gw {root /usr/share/nginx/html/gw;
}

当用户请求 http://example.com/gw/somefile.html 时,Nginx 会将其映射为 /usr/share/nginx/html/gw/gw/somefile.html,因为 root 是将路径 /gw 附加到根目录后,这样可能导致多重目录结构。

alias 示例

location /gw {alias /usr/share/nginx/html/gw/dist;
}
  • 请求 http://example.com/gw/file.html
  • Nginx 会查找 /usr/share/nginx/html/gw/dist/file.html

root 示例

location /gw {root /usr/share/nginx/html/gw;
}
  • 请求 http://example.com/gw/file.html
  • Nginx 会查找 /usr/share/nginx/html/gw/gw/file.html(路径多了一层 /gw)

总结

  • alias:完全替换路径。/gw/file.html 将映射为 /usr/share/nginx/html/gw/dist/file.html。
  • root:直接附加路径。/gw/file.html 会附加到根路径 /usr/share/nginx/html/gw/ 后,生成 /usr/share/nginx/html/gw/gw/file.html。
    因此,使用 alias 可以更灵活地映射请求路径,而不会导致路径重复。

http://www.ppmy.cn/devtools/117218.html

相关文章

网络高级day03(Http)

目录 【1】HTTP简介 【2】 HTTP特点 【3】 HTTP协议格式 1》客户端请求消息格式 1> 请求行 2> 请求头 3> 空行 4> 请求数据 2》服务器响应消息格式 【1】HTTP简介 HTTP协议是Hyper Text Transfer Protocol (超文本传输协议)的缩写&a…

【嵌入式硬件】续流二极管

1.续流二极管简介 续流二极管(flyback diode),有时也称为飞轮二极管或是snubber二极管,是一种配合电感性负载使用的二极管,当电感性负载的电流有突然的变化或减少时,电感二端会产生突变电压,可能会破坏其他元件。配合续流二极管时,其电流可以较平缓地变化,避免突波电压…

【编程基础知识】MySQL中什么叫做聚簇索引、非聚簇索引、回表、覆盖索引

一、引言 在数据库的奇妙世界里,索引是提升查询速度的超级英雄。就像图书馔的目录帮助我们快速找到书籍一样,MySQL中的索引加速了数据检索的过程。本文将带你深入了解MySQL中的聚簇索引、非聚簇索引、回表操作以及覆盖索引,探索它们如何影响…

Linux之实战命令01:xargs应用实例(三十五)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【…

mac-m1安装nvm,docker,miniconda

1.安装minicondaMAC OS(M1)安装配置miniconda_mac-mini m1 conda-CSDN博客 2.安装nvm(用第二个方法)Mac电脑安装nvm(node包版本管理工具)-CSDN博客 3.安装docker dmg下载链接docker-toolbox-mac-docker-for-mac安装包下载_开源镜像站-阿里云 教程MacOS系…

vue3/Element/Tabs 标签页的使用与详解

1. 引入 Element Plus 首先&#xff0c;在你的 Vue 组件中引入所需的组件&#xff1a; <template><el-tabs v-model"activeTab" tab-click"handleTabClick"><el-tab-pane label"用户管理" name"first">用户管理内…

408算法题leetcode--第14天

92. 反转链表 II 92. 反转链表 II思路&#xff1a;头插法时间&#xff1a;O(n)&#xff1b;空间&#xff1a;O(1) /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNo…

sheng的学习笔记-AI-蒙特卡罗强化学习

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 强化学习&#xff1a;sheng的学习笔记-AI-强化学习&#xff08;Reinforcement Learning, RL&#xff09;-CSDN博客 K-摇臂赌博机&#xff08;K-armed bandit&#xff09;&#xff1a;https://blog.csdn.net/coldstarry/ar…