首页 > 解决方案 > docker-compose 中分离的前端和 php 后端的问题

问题描述

我一直在努力解决 docker-compose 环境的问题,其中单页应用程序应该与 PHP api 对话。最好是laravel。

我的方法是让 nginx 充当两者的 reverve 代理。

但是,每次我尝试访问 /api 路由时,它都会显示找不到文件。php-fpm 确实收到了请求,但它显然无法加载索引,即使它在指定的文件夹中也很难。

的 docker-compose.yml看起来像这样。

version: "3.1"

services:

    redis:
      image: redis:alpine
      container_name: apitest-redis

    postgres:
      image: postgres:9.6-alpine
      container_name: apitest-postgres
      working_dir: /application/api
      volumes:
        - ./api:/application/api
      environment:
        - POSTGRES_USER=myapiuser
        - POSTGRES_PASSWORD=2cr34m1ng#n4k3d
        - POSTGRES_DB=test

    webserver:
      image: nginx:alpine
      container_name: apitest-webserver
      working_dir: /application
      volumes:
          - ./client/dist:/application/dist
          - ./api:/application/api
          - ./docker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
      ports:
       - "8080:80"

    php-fpm:
      build: docker/php-fpm
      container_name: apitest-php-fpm
      working_dir: /application/api
      volumes:
        - ./api:/application/api
        - ./docker/php-fpm/php-ini-overrides.ini:/etc/php/7.2/fpm/conf.d/99-overrides.ini

我的nginx.conf看起来像这样:

server {
    listen 80 default;

    client_max_body_size 108M;

    access_log /var/log/nginx/application.access.log;


    root /application;
    index index.html index.php;

    location / {
        root /application/dist;
        try_files $uri /index.html;
    }

    location /api {
        root /application/api/public;
        try_files $uri /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass apitest-php-fpm:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log";
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        include fastcgi_params;
    }

}

标签: apidockernginxdocker-composesingle-page-application

解决方案


推荐阅读