繁体   English   中英

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

[英]Nginx reverse proxy to Jetty app server via Cloudflare

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

我在原始Nginx Web服务器上使用Cloudflare SSL证书,以便所有请求都通过HTTPS处理,并且可以根据需要运行。

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

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

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;
            }

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

当我尝试对运行在端口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和Node服务在同一主机上的Jetty应用服务器中运行,这意味着Nginx和Jetty不能/不能以Nginx和Node可以相同的方式进行握手当涉及反向复制时...

如果将我的站点的真实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服务器视为本地资源-但我对此不确定。

正如我在原始问题中提到的那样,我期望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上看到了一个Jetty错误页面https://SITE-NAME/test test`url表示未找到'test'位置,这意味着nginx反向代理正在根据需要工作...

尽管如果我将其重命名为nginx.conf文件中的位置设置,可能不需要这样做,但是通过阅读Jetty文档,我发现可以更改URL,而基于war的应用程序将通过重命名war来在Jetty上运行文件位于Jetty主页的webapp目录中。

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

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

我已经更改了war文件的名称和nginx文件中的位置,使其指向类似于https://SITE-NAME/test并且它的工作原理就像一个超级按钮!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM