开始动手
先来看看我们的目录:
vuemusic ├─ .git ├─ .gitignore ├─ license ├─ readme.md ├─ babel.config.js ├─ dist ├─ dockerpose.yml ├─ docs ├─ nginx.conf ├─ package-lock.json ├─ package.json ├─ public ├─ server ├─ src └─ vue.config.js
dist是我们的前端项目,server是我们的后端项目。 下面再来看看我们的 dockerpose.yml :
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' build: ./server #根据server目录下面的dockerfile构建镜像 restart: always expose: - 3000
可以看见,我们通过 volumes 属性将宿主机的 nginx.conf 挂载到容器内的nginx配置文件,用来覆盖原有的配置文件,同时也将 dist 挂载到容器内。我们将前端项目的容器暴露并映射给宿主机的80端口,我们将后端项目的容器暴露3000端口。那么我们在哪里实现反向代理请求呢?请看 nginx.conf :
#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;
gzipp_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;
#音乐app项目
location / {
index index.html index.htm; #添加属性。
root /usr/share/nginx/html; #站点目录
}
#音乐app项目设置代理转发
location /api/ {
proxy_pass music-server:3000/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
}可以看上面的 proxy_pass music-server:3000/; 。其中 music-server 是我们后端项目的服务名,我们通过服务名来找到这个容器,这样就实现了反向代理。









