说在前面
我们都知道,docker可以实现很简便的部署环境。现在我们有一个前后端分离的项目,前端基于Vue开发、利用Webpakc打包为dist文件夹。后端则是一个Node.js服务,提供API接口,前端和后端是分离的。所以我们肯定是前端项目一个container,后台项目也是一个container。那么如果是在生产环境,就会产生跨域问题。前端的请求要反向代理到后台。大家肯定首先想到的就是使用 Nginx 设置proxy_pass 。是的没有错。那么我们有了这些想法。我们如何通过docker-compose 来实现呢?
开始动手
其实我也是才开始了解docker的。所以有很多不明白的地方,例如在docker里面,是通过image生成一个container,那么这个container,就可以当作是一个独立的系统,这个系统也就有自己独立的端口。那么就像我们刚刚那样的需求,假设我们的前端在container1 里面暴露80端口,同时映射到宿主机的80端口,后端在container2 里面暴露3000端口,同时映射到宿主机的3000端口。那我们反向代理请求的时候,是通过宿主机来反向代理呢,还是通过container来实现呢?我在网上查阅并学习了很多其他大佬的文章,还有官网的文档。发现直接通过container就可以实现这种需求。为什么呢?因为docker-compose,会将所有的container构建在同一网络下,我们要找其他container,我们只需通过docker-compose里面的service name 即可找到。 下面先来看看我们的目录:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 |
vueMusic
├─ .git
├─ .gitignore
├─ LICENSE
├─ README.md
├─ babel.config.js
├─ dist
├─ docker-compose.yml
├─ docs
├─ nginx.conf
├─ package-lock.json
├─ package.json
├─ public
├─ server
├─ src
└─ vue.config.js |
dist是我们的前端项目,server是我们的后端项目。 下面再来看看我们的docker-compose.yml :
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 |
version: '3'
services:
music-web: #前端项目的service name
container_name: 'music-web-container' #容器名称
image: nginx #指定镜像
restart: always
ports:
- 80:80
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf #挂载nginx配置
- ./dist:/usr/share/nginx/html/ #挂载项目
depends_on:
- music-server
music-server: #后端项目的service name
container_name: 'music-server-container'
|
可以看见,我们通过volumes 属性将宿主机的nginx.conf 挂载到容器内的nginx配置文件,用来覆盖原有的配置文件,同时也将dist 挂载到容器内。我们将前端项目的容器暴露并映射给宿主机的80端口,我们将后端项目的容器暴露3000端口。那么我们在哪里实现反向代理请求呢?请看 nginx.conf :
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 |
#user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
gzip on;
gzip_min_length 5k;
gzip_buffers 4 16k;
#gzip_http_version 1.0;
gzip_comp_level 3;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary on;
server {
listen 80;
server_name www.xieyezi.com;
#音乐app项目
location / {
index index.html index.htm; #添加属性。
root /usr/share/nginx/html; #站点目录
}
#音乐app项目设置代理转发
location /api/ {
proxy_pass http://music-server:3000/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
} |
可以看上面的proxy_pass http://music-server:3000/; 。其中music-server 是我们后端项目的服务名,我们通过服务名来找到这个容器,这样就实现了反向代理。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。
原文链接:https://juejin.im/post/5d6601496fb9a06acd4531ec
相关文章
- 利用FTP和计划任务自动备份网站数据和数据库 2025-05-27
- 服务器技术之硬件冗余技术 2025-05-27
- 服务器是租用还是服务器托管好? 2025-05-27
- 什么是DNS以及它如何影响服务器? 2025-05-27
- 刀片服务器与机架服务器的区别介绍 2025-05-27
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
-
2025-05-25 81
-
2025-05-26 93
-
2025-05-26 42
-
近 2000 台 Citrix NetScaler 服务器遭到破坏
2025-05-26 67 -
2025-05-27 62

