[英]apache mod_proxy, configuring ProxyPass & ProxyPassReverse for cross-domain ajax calls
[英]apache mod_proxy ProxyPassReverse Location header
我在apache后面的tomcat具有以下設置:
ServerName someapp.com
ProxyPass / http://localhost:8080/someapp/
ProxyPassReverse / http://localhost:8080/someapp/
一切正常,直到tomcat響應標頭包含以下內容:
Location: /someapp/foo
由於瀏覽器轉到“ http://someapp.com/someapp/foo ”而不是“ http://someapp.com/foo/ ”,因此會導致404或500
我做錯了什么?
因為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)
不確定這是最好的方法,但是到目前為止,發現的唯一解決方法是使用mod標頭:
Header edit Location ^/someapp/ http://someapp.com/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.