Apache2 - 从远程服务器加载损坏的图像

Apache2 - Broken images load from remote server

我在 Ubuntu 18.04

下有一个 apache2 服务器 运行

奇怪的是,尽管我的浏览器使用 200 响应消息加载它,但 apache 无法显示图像。

如果我直接触发图片link,我可以下载成功,但是图片打不开(格式错误),好像坏了

该网站曾经在配置大致相同的另一个 apache2 上工作。

我试过将图像文件放入默认文件夹 (var/www) 并使用简单的 src 显示它,成功了!

我的拒绝显示图片的网站在apache2.conf中有这样的配置:

<Directory /var/www>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

虚拟主机看起来像这样:

<VirtualHost *:80>
    ServerName nasticot.lan
    DocumentRoot /var/www/nasticot.lan
    ServerAlias www.nasticot.lan
</VirtualHost>

/var/www 是从远程容器安装的 SMB 共享。 服务器对该共享中的每个文件拥有完全权限 (777)

网站根目录下还有一个.htaccess文件

# Rewrite URL like xxx/yyy/zzz in index.php?controleur=xxx&action=yyy&id=zzz
RewriteEngine on
RewriteRule ^([a-zA-Z]*)/?([a-zA-Z]*)?/?([a-zA-Z0-9]*)?/?$ index.php?controleur=&action=&id= [NC,L]

[编辑]

奇怪的是,apache2 在加载时向我的图像添加内容。

我又一次验证了我的图像可以直接显示在我的 apache2 服务器读取的文件夹中,并且它有效。

如果我从浏览器本地下载图片,图片会多添加几行。

[编辑-01]: 我的 /var/www 是一个挂载共享,位于我的文件服务器中。 我发现这是问题所在。如果我在本地复制我的一个网站的内容,就会显示图像。

尽管我拥有对挂载共享的完全访问权限:

root@coruscant:/var/www/nasticot.lan/Content/img/icon# ls -la /var/www
total 4
drwxrwxrwx  2 root www-data    0 Mar 20 15:54 .
drwxr-xr-x 14 root root     4096 Mar 20 19:31 ..
drwxrwxrwx  2 root www-data    0 Mar 24 11:08 nasticot.lan

这是文件服务器中的共享配置:

[WWW]
    path = /media/share/www
    browseable = yes
    writeable = yes
    read only = no
    force create mode = 0770
    force directory mode = 2770
    valid users = @sambashare

最后,网络服务器上的 fstab 文件:

//192.168.0.53/WWW       /var/www    cifs    credentials=/root/.smbcredentials,iocharset=utf8,file_mode=0777,dir_mode=0777,gid=www-data       0 0

图像文件已加载(200 OK)但已损坏..

[EDIT-02]

仍在寻找解决方案,我很确定这不是权限问题,即使是 777 问题也总是出现...

我想知道 php 是否会在加载时破坏图像,我尝试设置

php.ini

error_reporting = E_ALL
error_log = /var/log/php_errors.log

但是我没有在这个日志文件中写入任何内容,所以..真的不知道去哪里搜索..

如有任何帮助,我们将不胜感激

有什么想法吗?

谢谢!

一种解决方法,但不是对原因的解释,是在 Directory 块中添加 EnableSendFile on 指令。

我说这是一个解决方法,因为在我诊断出同样的问题时(环境:Laravel Homestead 11 Vagrant guest,Windows 10 host using Hyper-V and smb mounts),它只会发生如果您使用 HTTP - HTTPS 工作正常,这使它成为 最奇怪 的事情