我有一个使用Cloudflare来保护和代理网站的网站 .
我在我的原始nginx网络服务器上使用Cloudflare SSL证书,以便所有请求都通过HTTPS处理,这可以根据需要使用 .
我在与托管我的Nginx网络服务器相同的物理服务器上设置了一个运行Xwiki的Node.js服务器和一个基于Jetty的应用服务器 .
我通过我的nginx.conf文件设置nginx反向代理,以便当请求相应的URL时,nginx指向相应的“应用程序”服务器,例如
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页面通过我的站点pubic URL和CloudFlares服务通过HTTPS提供 .
当我尝试为在端口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 .
所以我的实际问题是,如何使用Nginx反向代理将基于Jetty的Xwiki服务加载到我的Cloudflare代理网站中的某个位置,或者你能帮我理解我在哪里出错...
我怀疑我需要在Jetty服务器上安装我的nginx服务器上安装的SSL证书,以便nginx将Jetty服务器视为本地资源 - 但我对此非常不确定......
1 回答
正如我在原始问题中提到的那样,我希望xwiki重定向/代理的工作方式与节点重定向的工作方式相同...
我在摸不着头脑,想知道为什么这不起作用所以我玩了...
我发现他们转发请求的方式可能有问题所以我删除了以下行
并替换为:
这样Nginx就会负责SSL网站的事情
我按照上面的命令在我的nginx配置文件中创建了一个新的'test'位置并将其指向Jetty正在运行的外部IP和8080端口...并且繁荣,我在我的
https://SITE-NAME/test
上有一个Jetty错误页面 . 'test'找不到位置,这意味着nginx反向代理正在按需运行...虽然我可能不需要这样做,如果我已经重命名为nginx.conf文件中的位置设置,我从阅读Jetty文档中发现,我可以通过重命名战争来更改基于war的应用程序将在Jetty上运行的URL在Jetty home的webapp目录中的文件 .
我将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://EXTERNAL-REAL-IP/test
位置以使用nginx局域网IP,以便Nginx在本地代理,这仍然可以根据需要工作 - 所以,总而言之,快乐的日子......