使用 Ubuntu 20,tomcat 9, nginx 1.18
背景
业务需求,要使用 Java 程序来上传图片,并且使用 nginx 作为文件服务器读取
步骤
安装 tomcat & nginx
以下两篇文章都有详细介绍,可以参考它们的步骤来安装
How to Install Apache Tomcat Server on Ubuntu 20.04
How To Install Nginx on Ubuntu 20.04
创建存放上传图片的目录
假设图片存放于 /a/b/upload/images,创建目录
命令:mkdir /a/b/upload/images
,
然后将 images
目录的所有者和所有组改为 tomcat:tomcat
命令:chown -R tomcat:tomcat /a/b/upload/images
nginx 配置反向代理
添加配置文件
nginx 配置的路径:/etc/nginx/conf.d
在 conf.d 中,创建 image-server.conf (这个 image-server.conf 文件名可以按自己项目的需求改变),nginx.conf 就会 include 它,不需要直接修改 nginx.conf
在 image-server.conf 中,写入
server {
listen 8081; # 可以按自己实际情况修改监听的端口,记得添加相应的防火墙规则、安全组等
server_name localhost;
location /images/ {
root /a/b/upload;
}
}
保存,返回命令行。
然后重新加载 nginx 配置
命令:sudo systemctl reload nginx.service
测试反向代理
在 /a/b/upload/images 添加一张图片(假设名字为 lion.png)
然后在浏览器访问 localhost:8081/images/lion.png
就能看到这张图片了
配置 tomcat catalina UMASK
由于 tomcat 的安全策略,把 tomcat 创建的文件的权限设为 640,这导致不同组的 nginx 没有读取权限
然后我在网上寻找解决方案,修改 UMASK 是主流的方案。详细步骤如下:
修改 UMASK
UMASK 位于 $CATALINA_HOME
,一开始我无法通过 echo $CATALINA_HOME
找到它;
后来我想到切换到根目录,然后用 find -name 'catalina.sh'
来找,结果真的找到了
catalina.sh 位于 /usr/share/tomcat9/bin
打开 catalina.sh,通过阅读它的说明,我发现不应该直接修改 catalina.sh 的内容,而是应该创建 setenv.sh,再在 setenv.sh 里面添加要设置的参数
于是,在 catalina.sh 同级目录中,创建 setenv.sh
命令:sudo vim setenv.sh
,添加内容为
UMASK=0022
再重启 tomcat
命令:`sudo systemctl reload tomcat9.service
测试 tomcat 创建文件
`
此时,tomcat 创建的文件的权限就变成 644 了
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。