【问题标题】:Apache is adding header to images resulting in corrupting imagesApache 正在向图像添加标头,导致图像损坏
【发布时间】:2021-05-30 04:03:31
【问题描述】:

我正在对 laravel 应用程序进行 docker 化,我的图像基于 apache 图像,它托管在 AKS 中,我在 /public/images 中安装带有图像共享的 azure 文件,问题是 apache 会添加标头在图像内部导致图像损坏

即使我在 pod 内部执行并尝试 curl localhost,我也会遇到同样的问题,所以我确定这不是路由或我的入口的问题

    FROM php:7.3-apache

#install all the system dependencies and enable PHP modules 
RUN apt-get update -y && apt-get install -y libmcrypt-dev openssl
RUN apt-get update && apt-get install -y libmcrypt-dev \
    && pecl install mcrypt-1.0.2 \
    && docker-php-ext-enable mcrypt
RUN docker-php-ext-install pdo mbstring 
RUN apt-get install -y \
        libzip-dev \
        zip \
  && docker-php-ext-install zip
RUN apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev && \
docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/
RUN docker-php-ext-install gd
RUN docker-php-ext-install mysqli pdo pdo_mysql
# RUN apt-get install wget
RUN apt-get update; apt-get install curl -y

#install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer

#set our application folder as an environment variable
ENV APP_HOME /var/www/html

#change uid and gid of apache to docker user uid/gid
RUN usermod -u 1000 www-data && groupmod -g 1000 www-data

#change the web_root to laravel /var/www/html/public folder
#RUN sed -i -e "s/html/html\/public/g" /etc/apache2/sites-enabled/000-default.conf
COPY vhost.conf /etc/apache2/sites-available/000-default.conf
RUN echo "EnableSendfile off" >> /etc/apache2/apache2.conf


# enable apache module rewrite
RUN a2enmod rewrite

#copy source files and run composer
COPY . $APP_HOME

# install all PHP dependencies
RUN composer install --no-interaction


#change ownership of our applications
RUN chown -R www-data:www-data $APP_HOME

接下来使用常规部署 yaml 文件将其推送到具有以下卷挂载的 kubernetes:

volumeMounts:
- name: sessions
  mountPath: /var/www/html/storage/framework/sessions
- name: cache
  mountPath: /var/www/html/storage/framework/cache
- name: views
  mountPath: /var/www/html/storage/framework/views
- name: images
  mountPath: /var/www/html/public/images

卷:

  • 名称:会话 天蓝色文件: 秘密名称:appmnt 共享名称:会话 只读:假
  • 名称:缓存 天蓝色文件: 秘密名称:appmnt 共享名:缓存 只读:假
  • 名称:视图 天蓝色文件: 秘密名称:appmnt 共享名:意见 只读:假
  • 名称:图像 天蓝色文件: 秘密名称:appmnt 共享名称:图像 只读:假

现在的问题是,如果我尝试从图像文件夹访问静态文件,例如使用“https://www.somedomain.com/images/somefile.png”之类的网址

文件将被下载,但 apache 会将上述标头附加到内容中,从而导致损坏。

Web 应用程序运行良好,除了卷中的任何文件。

如果我执行“kubectl exec -it podname -- bash”并浏览文件,我可以看到卷挂载工作正常,如果我尝试从应用程序界面上传文件,文件将以写入方式写入在文件夹中,唯一的问题是浏览文件。

【问题讨论】:

  • 您能否分享有关图像和提供图像的代码的更多详细信息。它不是入口,因为它在 pod 内部是相同的,并且路由永远不会添加标头。目前尚不清楚哪些标头是问题以及预期的行为是什么。
  • 完成,我已经提供了更多细节,预期的行为是图像被下载或浏览时损坏
  • 不是 Docker 或 Kubernetes 的问题。我认为这将是 apache 配置或代码本身。您可以检查 vhost.conf 并将其与this article 进行比较。还比较您正在采取的步骤
  • jordanvrtanoski 可能是对的。您可以与我们分享您的vhost.conf 文件吗?
  • 附注:与其调用所有apt-getpecldocker-php-ext-install 命令,不如使用github.com/mlocati/docker-php-extension-installer 呢?

标签: docker apache kubernetes


【解决方案1】:

我们解决了这个问题,只是在 vhost.conf 中,我们需要关闭 EnableMMAP

EnableMMAP off

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-18
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    • 2021-02-23
    • 1970-01-01
    • 2015-12-11
    相关资源
    最近更新 更多