liunx系统下,nginx和tomcat中文资源404

1 篇文章 0 订阅
1 篇文章 0 订阅

由于项目要求,系统需要支持中文文件名。

系统结构是nginx+tomcat。

首先是配置文件访问不经过tomcat。nginx直接触达资源:

给出一个例子,具体的nginx配置规则另行查阅。

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico|zip|mp4|woff|ttf|pdf|doc|docx|ppt|pptx|html)$ {
        expires 1h;
              autoindex on;
        autoindex_exact_size off;
      }

以这些后缀的文件,不经过Tomcat服务器,直接由nginx返回资源。

带中文路径的文件报404。

解决方案:

第一步:确认系统中文编码,命令:locale

正确显示:

LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

如果不是的应该修改:vi /etc/sysconfig/i18n  文件不存在则新建。

按键i后输入

LANG="en_US.UTF-8"

SYSFONT="latarcyrheb-sun16"

然后Esc  :wq保存退出。

source /etc/sysconfig/i18n  试编码立即生效。

第二步,修改nginx编码配置
charset utf-8,gbk;
放在location内外都可以,两种编码都支持。-s  reload重新加载配置。

按说到这里中文文件就可以在url访问了,但是还是报404。

下面是重点,纠结了我半天!!!!

文件上传的时候,无论使用什么工具一定要修改utf-8编码格式上传,否则上传后中文名其实已经乱码了,只是看不出来。

SecureCRT和SecureFx为例,如何修改可以参考,感谢作者!!!

https://blog.csdn.net/sp308036654/article/details/44595671

第三步,由于文件需要特殊权限控制,需要经过tomcat过滤。去掉上面nginx配置,改为如下:(只是一个例子,具体配置方法另查)

location ~ {
        proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Scheme  $scheme;
            client_body_buffer_size 10m;
            proxy_connect_timeout 7200;
            proxy_send_timeout 7200;
            proxy_read_timeout 7200;
            proxy_buffer_size 32k;
            proxy_buffers 4 32k;
            proxy_busy_buffers_size 64k;
            proxy_temp_file_write_size 64k;
        proxy_pass http://test;
        expires 5s;
    }

然后tomcat又报404!!!

tomcat打开conf文件下

web.xml文件下划线处有false改为true
    <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

server.xml文件添加下划线处

<Connector connectionTimeout="20000" port="8082" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true" URIEncoding="UTF-8"/>

至此中文文件经由nginx转到tomcat,在经过tomcat权限过滤后也可访问了。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值