首页 文章

Nginx通过Cloudflare反向代理到Jetty应用服务器

提问于
浏览
0

我有一个使用Cloudflare来保护和代理网站的网站 .

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

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

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

https://SITE-ROOT/node

这反向代理使用我的nginx.conf文件中的以下位置设置在localhost上的端口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页面通过我的站点pubic URL和CloudFlares服务通过HTTPS提供 .

当我尝试为在端口8080上的本地主机上的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服务器视为本地资源 - 但我对此非常不确定......

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配置文件中创建了一个新的'test'位置并将其指向Jetty正在运行的外部IP和8080端口...并且繁荣,我在我的 https://SITE-NAME/test 上有一个Jetty错误页面 . 'test'找不到位置,这意味着nginx反向代理正在按需运行...

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

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

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

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

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

相关问题