【问题标题】:Nginx reverse proxy to Jetty app server via Cloudflare通过 Cloudflare 到 Jetty 应用服务器的 Nginx 反向代理
【发布时间】:2017-09-16 15:23:55
【问题描述】:

我有一个使用 Cloudflare 保护和代理该网站的网站。

我在我的原始 nginx 网络服务器上使用 Cloudflare SSL 证书,以便通过 HTTPS 处理所有请求,这可以根据需要进行。

我已经设置了一个 Node.js 服务器和一个基于 Jetty 的应用程序服务器,该服务器在托管我的 Nginx 网络服务器的同一物理服务器上运行 Xwiki。

我通过我的 nginx.conf 文件设置了 nginx 反向代理,以便 nginx 在请求相应的 URL 时指向相应的“应用程序”服务器,例如

https://SITE-ROOT/node

使用我的 nginx.conf 文件中的以下位置设置,这反向代理到我在本地主机上的端口 3001 上运行的 node.js 服务器...

location /node {
            proxy_pass         http://192.168.1.69:3001;
            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
            }

这可以根据需要工作,并且 node.js 页面是通过 HTTPS 通过我的网站公共 URL 和 CloudFlares 服务提供的。

当我尝试对在端口 8080 上 localhost 上的 Jetty (Java) 应用程序服务器上运行的 Xwiki 站点执行相同操作时,例如

https://SITE-ROOT/xwiki

location /xwiki/ {
            proxy_pass         http://192.168.1.69:8080/xwiki;
            proxy_redirect     off;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
            }

我收到以下错误:

DNS points to prohibited IP

Unfortunately, it is resolving to an IP address that 
is creating a conflict within Cloudflare's system.

我不明白为什么会发生这种情况,因为我预计节点反向代理请求也会发生同样的事情。

我能想到的唯一区别是 Xwiki 与 nginx 和节点服务在同一主机上的 Jetty 应用程序服务器中运行,这意味着 nginx 和 Jetty 不能/不能以相同的方式握手 nginx当涉及到反向代理时,节点可以......

如果我将我的网站真实 IP 地址和 Xwiki 端口号放在我的 nginx.conf 文件的代理重定向部分,例如

https://SITE-ROOT/xwiki

location /xwiki/ {
            proxy_pass         http://EXTERNAL-REAL-IP:8080/xwiki;
            proxy_redirect     off;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
            }

这在 Xwiki 默认页面加载时起作用,但 URL 更改为我服务器的真实外部 IP,并且不使用 SSL。我知道这是因为 Jetty 服务器通过端口 8080 并完全通过 nginx 为页面提供服务。

所以我的实际问题是,我怎样才能让基于 Jetty 的 Xwiki 服务使用 Nginx 反向代理加载到我的 Cloudflare 代理网站中的某个位置,或者你能帮我了解我哪里出了问题...

我怀疑我需要在 Jetty 服务器上安装安装在我的 nginx 服务器上的 SSL 证书,以便 nginx 将 Jetty 服务器视为本地资源 - 但我对此非常不确定......

【问题讨论】:

    标签: ssl cloudflare nginx-location jetty-9 nginx-reverse-proxy


    【解决方案1】:

    正如我在最初的问题中提到的,我希望 xwiki 重定向/代理能够以与节点重定向相同的方式工作......

    我一直在挠头,想知道为什么这不起作用,所以我玩了一会......

    我发现他们转发请求的方式可能存在问题,因此我删除了以下行

    proxy_set_header   X-Forwarded-Host $server_name;
    

    并将其替换为:

    proxy_set_header        X-Forwarded-Proto https;
    

    这样 Nginx 就会处理 SSL 站点的事情

    location /test {
                proxy_pass              EXTERNAL-REAL-IP:8080/;
                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 https;
                proxy_set_header        Host $http_host;
                            }
    

    我根据上述在我的 nginx 配置文件中创建了一个新的“测试”位置,并将其指向 Jetty 正在运行的外部 IP 和 8080 端口……然后,我在我的 @ 上看到了一个 Jetty 错误页面987654324@ `url 表示未找到“测试”位置,这意味着 nginx 反向代理正在按需要工作...

    虽然如果我重命名为 nginx.conf 文件中的位置设置,我可能不需要这样做,但我从阅读 Jetty 文档中发现,我可以更改基于战争的应用程序将在 Jetty 上运行的 URL重命名Jetty home的webapp目录下的war文件。

    我将战争文件名从 xwiki 更改为 test 并重新启动 Jetty 并在我的浏览器中加载了我的 https://SITE-NAME/test...

    嘿-presto,我的网站现在通过 nginx 在我的https://SITE-NAME/test url 上使用 HTTPS 从 Jetty 为代理的 Xwiki 应用程序提供服务...

    我已将 nginx 文件中的 war 文件的名称和位置更改为指向 https://SITE-NAME/test 之类的东西,它就像一个魅力!

    然后我将 nginx.conf 中的 https://EXTERNAL-REAL-IP/test 位置更改为使用 nginx LAN IP,以便 Nginx 可以在本地代理,这仍然可以根据需要工作 - 所以,总而言之,快乐的日子......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-24
      • 1970-01-01
      • 2018-09-10
      • 2016-09-07
      • 2017-08-16
      • 2014-07-22
      • 2017-07-17
      • 2020-08-19
      相关资源
      最近更新 更多