问题摘要

问题摘要

问题摘要

自从在我的家庭网络上设置了 Nginx 反向代理后,当我访问我服务器上托管的某个应用程序的 URL 时,它会持续出现错误 502:网关错误,并且 Nginx 错误日志中至少会出现一个相应的错误 111(“连接被拒绝”)。

系统详细信息

  • 服务器(“MyDomain”):
    • 操作系统:云诺主机v. 3.8.5.7(基于 Debian Stretch 的发行版)
    • 硬件:一台旧台式电脑
    • 网络连接:通过以太网电缆连接到我的路由器
  • 反向代理:
    • 操作系统:Raspbian GNU/Linux 10 (buster)
    • 硬件:Raspberry Pi 4 Model B
    • 网络连接:通过 WiFi

网络流量的流动情况如下:

Internet -> Router -> Raspberry Pi reverse proxy -> [ MyDomain server -> internal reverse proxy ]

最后一步“内部反向代理”是指由 YunoHost 系统自动配置和管理的 Nginx 反向代理,它允许托管和获取多种不同的服务。

问题详细信息

我使用 YunoHost 在我的家庭网络上的服务器上托管多项服务,包括calibreweb。我使用了多个域名,但只有一个受到此问题的影响 - 我们称之为 MyDomain.com。

6 月 11 日,我在家庭网络上设置了 Raspberry Pi 反向代理,以便我可以将流量引导到两个独立的 YunoHost 服务器。在设置该代理之前,我可以导航到 MyDomain.com/calibre,然后 calibreweb 服务就会加载。自那天起,导航到 MyDomain.com/calibre 会在浏览器中显示错误 502:网关错误。当我检查/var/log/nginx/mydomain.com-error.logMyDomain 服务器上的文件时,我看到了相应的错误消息:

2020/08/14 17:32:46 [错误] 23605#23605:*149804 connect() 连接到上游时失败(111:连接被拒绝),客户端:192.168.0.179,服务器:mydomain.com,请求:“GET /calibre/HTTP/1.0”,上游:“http://127.0.0.1:8083/calibre/”,主机:“mydomain.com”

此外,自 6 月 11 日以来,该文件没有添加任何内容/var/log/calibreweb/calibreweb-access.log

mydomain.com 域上的其他服务均未受到类似影响。我可以成功访问 mydomain.com/gitea、mydomain.com/wallabag 和 mydomain.com/wiki。只有 calibreweb 以这种方式失败。

预期行为

导航到 mydomain.com/calibre 加载 Calibre 网络应用程序。

Nginx 配置文件

如上所述,这里有两个 Nginx 反向代理在起作用,我预计这两个代理之间存在一些分歧,从而导致了这个问题。第一个反向代理是 Raspberry Pi 代理,它根据请求将流量引导到我家庭网络上的不同机器。第二个反向代理是 MyDomain 机器上的 YunoHost 内置代理。

Raspberry Pi 反向代理(遇到的第一个反向代理),该/etc/nginx/sites-available/xanderwhart.us.conf文件如下所示:

server {
        server_name mydomain.com;
        location / {
                proxy_pass              https://192.168.0.117;
                proxy_redirect          off;
                proxy_read_timeout      60s;

                proxy_set_header        Host            mydomain.com;
                proxy_set_header        X-Real-IP       $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

                client_max_body_size 50M;
        }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot



}
server {
    if ($host = mydomain.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


        listen 80;
        server_name mydomain.com;
    return 404; # managed by Certbot


}

YunoHost内置代理(第二次遇到),这里是/etc/nginx/conf.d/mydomain.com.d/calibreweb.conf

location /calibre {
  client_max_body_size 200M;
  # Force usage of https
  if ($scheme = http) {
    rewrite ^ https://$server_name$request_uri? permanent;
  }
        proxy_pass                              http://localhost:8083;
        proxy_set_header                X-Forwarded-For                         $remote_addr;
        proxy_set_header                Host                                            $http_host;
        proxy_set_header                X-Forwarded-For                         $proxy_add_x_forwarded_for;
        proxy_set_header                X-Scheme                                        $scheme;
        proxy_set_header                X-Script-Name                           /calibre;
#        proxy_set_header               X-Remote-User                           $remote_user;

  # Include SSOWAT user panel.
  include conf.d/yunohost_panel.conf.inc;
}

我尝试过的方法

  • 重新启动 Nginx 服务:没有任何变化
  • 重新启动 Calibreweb 服务:没有任何变化
  • 检查 calibreweb 的状态systemctl status calibreweb:报告为已加载且处于活动状态
  • 从 MyDomain 计算机上的会话执行curl 127.0.0.1:8083:产生“curl:(7)无法连接到 127.0.0.1 端口 8083:连接被拒绝”
  • 检查 MyDomain 计算机上的 8083 端口是否打开:
  • 导航至http://192.168.0.117:8083/(MyDomain 计算机的本地 IP 地址)来自同一网络上的台式计算机:“Firefox 无法与 192.168.0.117:8083 的服务器建立连接。”

怀疑与结语

根据此问题发生的时间,我怀疑两个 Nginx 反向代理之间存在不兼容性,但我对网络管理员的知识不够丰富(我完全是新手),无法识别发生了什么。欢迎提供任何帮助;提前致谢。

答案1

好吧,我尝试卸载并重新安装 Calibreweb 包,这似乎解决了这个问题。虽然这并没有让我更深入地了解这个问题,但至少它已经解决了。

相关内容