【问题标题】:Unable to remote deploy on Tomcat through Nginx reverse proxy无法通过 Nginx 反向代理在 Tomcat 上远程部署
【发布时间】:2018-03-06 02:26:34
【问题描述】:

在我的测试服务器(Fedora 26)上安装了一个 tomcat 环境。一切都是库存包装。我还在前面安装并设置了 Nginx 反向代理。 tomcat-users.xml 已设置,我可以按预期登录应用管理器。

现在,当我尝试向其部署 WAR 时,我的 Nginx 日志出现严重故障:

2017/09/25 15:12:21 [crit] 13878#0: *36 open() "/var/lib/nginx/tmp/client_body/000000XXXX" failed (13: Permission denied), client: 200.x.x.x, server: some-sandbox.com, request: "POST /manager/html/upload?org.apache.catalina.filters.CSRF_NONCE=XXXXXXXxxxx HTTP/1.1", host: "some-sandbox.com", referrer: "https://some-sandbox.com/manager/html/upload?org.apache.catalina.filters.CSRF_NONCE=XXXXXXXxxxx

Nginx 然后返回 500 内部服务器给浏览器。

我会做错什么吗?有什么建议可以解决吗?

谢谢。

【问题讨论】:

  • 请发布 nginx.conf 和 server.xml
  • 您可以查看当前用户对文件的用户权限。
  • @Oleg 我检查了/var/lib/nginx/tmp 并且它归apache(nginx 用户)所有。还有什么建议吗?
  • 那么tomcat呢?部署由tomcat完成。

标签: java tomcat nginx deployment


【解决方案1】:

您可以检查当前用户对文件的用户权限。

【讨论】:

  • 这应该是评论而不是答案
  • 如上评论所述,文件夹/var/lib/nginx/tmp 归相应用户所有。
【解决方案2】:

临时上传文件夹/var/lib/nginx/tmp 显然存在一些权限问题。我已确保整个路径归正确的系统用户所有。但问题依然存在。

所以为了规避这个问题,我决定配置 Nginx 以完全跳过缓存客户端主体。就我而言,在代理之前缓存没有实际价值。

Nginx 1.7.11 引入了一个新的proxy_request_buffering 指令。如果将其设置为off,缓冲将被禁用。因此任何权限问题都不会影响上传。

所以我的服务器部分有这个:

location / {
    proxy_request_buffering off;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://127.0.0.1:8080/;
}

【讨论】:

    猜你喜欢
    • 2021-12-01
    • 2010-11-07
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    相关资源
    最近更新 更多