我有一个使用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>
答案 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在本地代理,这仍然可以根据需要工作 - 所以,总而言之,快乐的日子......