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

时间:2017-09-16 15:23:56

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

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

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

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

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

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页面通过我的网站公共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服务器视为本地资源 - 但我对此非常不确定...... < / p>

1 个答案:

答案 0 :(得分: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端口......然后我在我的{上获得了一个Jetty错误页面{1}}`url说未找到'test'位置,这意味着nginx反向代理正在按需运行...

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

我将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://SITE-NAME/test位置以使用nginx局域网IP,以便Nginx在本地代理,这仍然可以根据需要工作 - 所以,总而言之,快乐的日子......