【发布时间】:2014-06-18 18:18:02
【问题描述】:
我有一个场景如下。
Nginx 被用作 apache 服务器的反向代理,监听端口 8080。nginx 在端口 80 上运行。有一个 wsgi 应用程序正在由 apache 服务器运行。
现在,我在 nginx 配置中添加了一个 proxy_pass,这样无论对 localhost/ 的请求(nginx 端口是默认端口 80),它们都会被重定向到 localhost:8080。
这里是 nginx 配置文件的摘录:
server {
listen 80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
location <app_name> {
proxy_pass http://localhost:8080/
proxy_redirect http://localhost/ http://localhost:8080/
}
}
我添加了代理重定向来处理来自 apache 服务器的任何重定向,以便任何映射到 http://localhost/<something> 的请求都被重定向到 http://localhost:8080/<something>,因为应用程序的资源将在端口 8080 下可用。
现在,这里的问题是 wsgi 应用程序生成一个 html,其中图像和 javascript 位置路径是绝对路径,例如 /img/image.png 和 /js/javascript.js。现在,它们是 HTML 的一部分,不会发送任何带有完整 http:// 前缀的重定向,因此,服务器会尝试在 localhost/img 目录而不是 localhost:8080/img 目录中定位图像.
同样的一个肮脏的解决方法可能是将 /img 和 /js 目录也定义为服务器配置中的单独“位置”,并为它们指定 proxy_pass。但是这些目录的数量可能会更多,并且保持相同的目录可能会令人头疼。
有没有更清洁的方法?
这是指解决石墨问题Apache cannot serve graphite-web from URLs other than /
【问题讨论】:
标签: redirect nginx apache2 reverse-proxy graphite