2017-09-16 238 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的代理會在本地,這仍然工作需要 - 所以,一切的一切,幸福的日子......

相關問題