php - Apache 忽略来自 Lumen 的 header 和状态代码

标签 php laravel apache docker lumen

我有基于 Docker 和微服务的应用程序。 Angular、MySQL、Lumen + Apache。不幸的是,在 Docker 上我的 API 不发送任何 header 或状态代码。任何响应都是 200。我尝试将 HTTP 服务器更改为 NGINX 但没有任何结果。我不知道如何解决这个问题。

Apache 配置

NameVirtualHost *:8080
Listen 8080

<IfModule mod_ssl.c>
    # If you add NameVirtualHost *:443 here, you will also have to change
    # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
    # to <VirtualHost *:443>
    # Server Name Indication for SSL named virtual hosts is currently not
    # supported by MSIE on Windows XP.
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    Listen 443
</IfModule>
ServerName localhost:8080

<VirtualHost *:8080>
  DocumentRoot /var/www/html/public
  <Directory /var/www/html/public>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
  </Directory>
</VirtualHost>

Dockerfile

FROM php:7.4.1-apache

# Arguments defined in docker-compose.yml
ARG user
ARG uid

# Install system dependencies
RUN apt-get update && apt-get install -y \
    git \
    curl \
    libpng-dev \
    zlib1g-dev \
    libonig-dev \
    libxml2-dev \
    curl \
    libzip-dev \
    zip \
    unzip

#COPY .docker/apache.conf /etc/apache2/sites-available/000-default.conf

# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install PHP extensions
RUN docker-php-ext-configure gd
RUN docker-php-ext-configure zip && docker-php-ext-install zip
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd zip

# Get latest Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

RUN chown -R www-data:www-data /var/www/html
RUN a2enmod rewrite headers cache


# Create system user to run Composer and Artisan Commands
RUN useradd -G www-data,root -u $uid -d /home/$user $user
RUN mkdir -p /home/$user/.composer && \
    chown -R $user:$user /home/$user

# Set working directory
WORKDIR /var/www/html

USER $user

EXPOSE 8080

docker-compose.yml

version: "3.7"
services:
  backend:
    build:
      args:
        user: sammy
        uid: 1000
      context: ./backend
      dockerfile: .docker/Dockerfile
    image: backend
    ports: 
    - 8000:8080
    container_name: backend
    restart: unless-stopped
    working_dir: /var/www/html
    volumes:
      - ./backend:/var/www/html
      - ./backend/.docker/apache.conf:/etc/apache2/sites-available/000-default.conf
      - ./backend/.docker/ports.conf:/etc/apache2/ports.conf
      
    networks:
      - jpk
  db:
    image: mysql:5.7
    container_name: jpk-db
    restart: always
    ports: 
      - "3306:3306"
    environment:
      MYSQL_DATABASE: 'jpk'
      MYSQL_ALLOW_EMPTY_PASSWORD: 1
      MYSQL_ROOT_PASSWORD: ""
    volumes:
      - ./db:/var/lib/mysql
    networks:
      - jpk
  frontend:
    build:
      args:
        env: prod
      context: ./frontend
      dockerfile: Dockerfile
    image: frontend
    container_name: frontend
    ports: 
      - "80:80"
    environment:
      NODE_ENV: production
networks:
  jpk:
    driver: bridge

.htaccess

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
      Options -MultiViews
    </IfModule>

    <IfModule mod_headers.c>
        SetEnvIf Origin "http(s)?://([^.]+\.)?(mysite.com|mysite.local:4200|localhost:4200)$" AccessControlAllowOrigin=$0$1
        Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
        Header set Access-Control-Allow-Credentials true
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

最佳答案

好吧,我找到了问题的答案。我需要添加行

RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"

在我的 Dockerfile 中

关于php - Apache 忽略来自 Lumen 的 header 和状态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64959508/

相关文章:

linux - 如何更改 apache 配置文件的默认路径?

php - Laravel RESTful API 解析外键

apache - 在 MacOS 10.11 上编译 http 2.4.16 时出现 "OpenSSL version is too old"

JavaBridge errno=10054 被 Remotehost 关闭

php - 什么是 www.conf?

php - 如何使用 PHP 和 Wamp Server 使用和访问 SQLite 数据库?

javascript - 服务器设置的 cookies 第一次不会在 javascript 中显示

mysql - 使用 group by 后 Order by 未按预期工作

php - 不同 View 组的自定义错误页面

python - 在 Django 应用程序中启动线程时出现奇怪的错误