You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker环境下VueJS应用如何通过80端口调用PHP后端?

解决VueJS应用通过80端口调用PHP后端的配置方案

核心问题分析

当前你的Vue容器(todo-app)占用了主机80端口,但npm run serve默认监听容器内8080端口,导致端口映射不匹配;同时浏览器中运行的Vue应用发起AJAX请求时,会直接请求主机80端口(即Vue容器),而非PHP后端容器,因此返回404错误。下面分两种场景给出配置方案:


方案一:开发环境(基于Vue开发服务器)

1. 修正Vue开发服务器端口

在Vue项目根目录创建/修改vue.config.js,指定开发服务器监听80端口并配置代理规则:

module.exports = {
  devServer: {
    port: 80, // 让Vue开发服务器监听容器内80端口
    proxy: {
      '/api': { // 匹配所有以/api开头的请求,根据你的实际接口前缀调整
        target: 'http://php-backend:80', // 通过Docker内部服务名直接访问PHP容器
        changeOrigin: true,
        pathRewrite: {
          '^/api': '' // 如果PHP接口没有/api前缀,自动移除该前缀
        }
      }
    }
  }
}

2. 调整Vue容器的Docker配置

确保docker-compose.yml中todo-app的端口映射正确:

services:
  todo-app:
    build: ./app # 注意改为相对路径,避免Docker找不到构建目录
    ports:
      - "80:80"
    depends_on:
      - php-backend

3. 修改AJAX请求路径

将原来指定端口的请求(如http://localhost:8080/get-data)改为相对路径,比如/api/get-data,代理会自动转发到PHP后端。


方案二:生产环境(基于Nginx反向代理)

如果是部署生产版本,建议用Nginx托管Vue静态文件并反向代理API请求:

1. 修改Vue项目的Dockerfile

替换为多阶段构建,用Nginx替代开发服务器:

# 构建静态文件
FROM node:19.7-alpine3.16 as builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# 用Nginx托管静态文件并代理API
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
# 复制自定义Nginx配置
COPY nginx.conf /etc/nginx/conf.d/default.conf

EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

2. 创建Nginx配置文件(nginx.conf)

放在Vue项目根目录,配置静态文件托管和API反向代理:

server {
    listen 80;
    server_name localhost;

    root /usr/share/nginx/html;
    index index.html;

    # 处理Vue单页应用路由,避免刷新页面404
    location / {
        try_files $uri $uri/ /index.html;
    }

    # 反向代理API请求到PHP后端
    location /api {
        proxy_pass http://php-backend:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

3. 调整docker-compose.yml

优化PHP后端配置(无需对外暴露8080端口,仅内部访问即可):

services:
  todo-app:
    build: ./app
    ports:
      - "80:80"
    depends_on:
      - php-backend

  php-backend:
    build:
      context: ./php # 指定Dockerfile所在目录
      dockerfile: Dockerfile
    # 注释掉对外端口映射,仅通过内部网络访问
    # ports:
    #   - "8080:80"
    depends_on:
      - db
    environment:
      - DB_HOST=db
      - DB_PORT=3306
      - DB_DATABASE=todo
      - DB_USERNAME=todo-app-user
      - DB_PASSWORD=default

4. 同步AJAX请求路径

同样将请求改为相对路径/api/xxx,Nginx会自动转发到PHP后端。


额外注意事项

  • Docker Compose会自动创建内部网络,服务之间可通过服务名(如php-backend)直接通信,无需使用localhost或IP。
  • 确保主机80端口未被其他服务占用,否则会导致映射失败。
  • 根据PHP后端的实际接口前缀,调整代理规则中的/api匹配符和pathRewrite配置。

内容的提问来源于stack exchange,提问作者Max

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 05:25:28