我在前端服务器(server1)中安装了一个apache,它作为反向代理。我有另一个运行webapp的tomcat服务器(server2)。
我配置了我的反向代理(server1):
ProxyPass /app1/ ajp://server2:8009/app1/
ProxyPassReverse /app1/ https://www.external_domain_name.com/
当我连接到:
https://www.external_domain_name.com/app1/
我的网络应用正常运行。在某些页面中,Web应用程序将我(302)重定向到另一个页面。
然后,我被重定向到:
https://server1_internal_ip/app1/foo_bar
当我查看http标头时,响应头包含:
Status code: 302
Location: https://server1_internal_ip/app1/foo_bar
所以,我的结论是ProxyPass正常工作,但ProxyPassReverse不是。
你能帮助我理解出了什么问题吗?
由于
答案 0 :(得分:0)
将其设置为此
ProxyPassReverse /app1/ ajp://server2:8009/app1/
当我遇到类似的问题时,似乎对我有用。
答案 1 :(得分:0)
实际上,ProxyPassReverse将替换服务器返回的位置。
Apache2设置
ProxyPass "/8080" "http://localhost:8080"
ProxyPassReverse "/8080/" "/"
Node.js设置
const express = require("express");
const app = express()
app.get('/', (req, res) => {
res.json({a: 8080})
})
app.get("/hi", (req, res) => {
res.json({a: "8080hi"})
})
app.get("/redirect", (req, res) => {
res.redirect("/hi")
})
app.listen(8080)
原始位置为“位置:/ hi”。
新的是“位置:/ 8080 / hi”。 (/ => / 8080 /)
这意味着Apache2用ProxyPassReverse设置替换了Location值。
或者,您可以使用完整的FQDN来完成此操作。
Apache2设置
ProxyPass "/8080" "http://localhost:8080"
ProxyPassReverse "/8080" "http://localhost:8080"
Node.js设置
const express = require("express");
const app = express()
app.get('/', (req, res) => {
res.json({a: 8080})
})
app.get("/hi", (req, res) => {
res.json({a: "8080hi"})
})
app.get("/redirect", (req, res) => {
res.setHeader("Location", "http://localhost:8080/hi")
res.send(302)
})
app.listen(8080)
Apache2将http://localhost:8080/hi
转换为http://localhost/8080/hi
。
(如果我的Apache2配置为80端口。)