我使用以下设置在apache后面使用tomcat:
ServerName someapp.com
ProxyPass / http://localhost:8080/someapp/
ProxyPassReverse / http://localhost:8080/someapp/
一切正常,直到tomcat响应头包含如下内容:
Location: /someapp/foo
它会导致404或500,因为浏览器会转到" http://someapp.com/someapp/foo"而不是" http://someapp.com/foo/"
我做错了什么?
答案 0 :(得分:1)
因为ProxyPassReverse将替换服务器返回的位置。
就您而言,您可以看到示例1。
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)
答案 1 :(得分:0)
不确定这是最好的方法,但现在找到了唯一修复mod标头:
Header edit Location ^/someapp/ http://someapp.com/