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 工作正常,这使它成为 最奇怪 的事情
我在 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 工作正常,这使它成为 最奇怪 的事情