Centos:Apache 需要读取 Tomcat 创建的文件

Centos:Apache 需要读取 Tomcat 创建的文件

在尝试了很多不同的解决方案后,我来这里寻求帮助。

我在 apache HTTPD 中有一个 Web 应用程序,它为同一台服务器中的 Tomcat 中的前端提供服务,并且有一个 Java 应用程序。

问题是 Tomcat 创建的文件无法被 Apache 读取。我的意思是,用户可以在 appache 服务器中上传文件,它会将文件发送到 Tomcat 服务器,Tomcat 服务器会处理一些信息并将文件存储在公共文件夹中,以便 Apache 可以读取它。问题是 Apache 在这些文件上会得到 403。

如果我在 img/ 目录(存储文件的位置)中运行 chmod -R 777,我就可以访问这些文件,但是每次我上传新文件时,HTTPD 都无法访问该文件,直到我运行该命令。

我创建了一个名为 webusers 的组,并将 tomcat 和 apache 用户添加到其中。

如果我在该目录上运行 ln -l,我会得到(对于旧文件)

drwsrwsrwx. 2 tomcat webusers 4096 Aug 16 08:50 337

但是当我上传新文件时,我得到:

drwxr-s---. 2 tomcat webusers 4096 Aug 16 14:44 33f

如果我尝试在浏览器中打开,我会得到

禁止

您无权访问此服务器上的 /assets/img/cars/brands/33f1d3f1-0e4b-4924-acc1-11e28bed08a8/c_h_1.jpg。

我尝试了多次 chown -R / chmod -R 7777 都没有成功,你能帮我让 apache 可以读取 tomcat 创建的文件吗?

答案1

如果 Apache 仅用作 Tomcat 的前端,最简单的答案就是让 Apache 子进程作为 Tomcat 运行。我不确定您的 CentOS 版本,但看了几件事后发现默认的 Apache2 包似乎会在 中创建一个配置文件。/etc/httpd/conf/httpd.conf从那里您要找到配置参数User。在我的环境中,我有类似的东西:

User www-user
Group www

但您的设置可能会有所不同。将 更改User为您的 Tomcat 用户,并将 更改Group为与 Tomcat 用户相同的组。同样,我不确定 Apache 配置文件的位置 - 您可能需要搜索一下。更改此设置后,您必须重新启动 Apache 才能使其生效。

答案2

假设您正在使用 Java 上传文件。

File f = new File("/path/to/image/image_name.jpg);
f.setExecutable(true, false);
f.setWritable(true, false);
f.setReadable(true, false);

现在您可以从 apache 和 tomcat 访问您的文件。

相关内容