0

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

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

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

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

https://SITE-ROOT/node

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

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 页面通过我的站点公共 URL 和 CloudFlares 服务通过 HTTPS 提供。

当我尝试对在端口 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 为页面提供服务。

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

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

4

1 回答 1

0

正如我在最初的问题中提到的那样,我期望 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 端口......然后繁荣,我在我的https://SITE-NAME/test`url 上得到一个 Jetty 错误页面说未找到“测试”位置,这意味着 nginx 反向代理正在按需要工作......

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

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

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

我已经更改了 nginx 文件中的战争文件的名称和位置,以指向类似的东西https://SITE-NAME/test,它就像一个魅力!

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

于 2017-09-16T18:45:08.843 回答