2017-09-16 198 views
1

我有一个网站使用Cloudflare来保护和代理网站。Nginx反向代理通过Cloudflare的Jetty应用服务器

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

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

我通过我的nginx.conf文件设置了nginx反向代理,以便当相应的URL被请求时,nginx指向各自的“应用”服务器。

https://SITE-ROOT/node 

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

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上本地主机上的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服务加载在我的Cloudflare代理网站内使用Nginx反向代理的位置,或者你能帮我明白我在哪里出错了...

我怀疑我需要安装安装Jetty服务器也让nginx的看到是Jetty服务器的本地资源在我的nginx服务器上的SSL证书 - 但我对这个非常不确定...

回答

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公司创建了一个新的测试位置nfig文件,并将其指向Jetty正在运行的外部IP和8080端口......并且繁荣,我在我的https://SITE-NAME/test`url上发现了一个码头错误页面,说'未找到'测试'位置,这意味着nginx反向代理正在按需要工作...

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

我从XWiki实现改变了战争的文件名来测试和重新启动码头和加载我在我的浏览器https://SITE-NAME/test ...

嘿,急,我的网站现在从码头通过使用nginx的服务于代理XWiki实现应用HTTPS在我的https://SITE-NAME/test网址...

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

然后我在nginx.conf改变了https://EXTERNAL-REAL-IP/test位置使用nginx的LAN IP使Nginx的代理会在本地,这仍然工作需要 - 所以,一切的一切,幸福的日子......

相关问题