我正在尝试按如下方式设置 nginx 配置:当收到如下请求时/tile/SteveCountryVic/1/2/3.png
:
- 尝试将其传递给
http://localhost:5005/1/2/3.png
- 如果是 404s,则将其传递给另一台服务器
/tile/SteveCountryVic/1/2/3.png
这是我的配置,它不太工作:
server {
listen 80;
server_name localhost; error_log /tmp/nginx.error.log notice;
access_log /tmp/nginx.access.log;
location /tile/SteveCountryVic/ {
rewrite_log on;
#rewrite ^.*/(\d+)/(\d+)/(\d+).*$ /$1/$2/$3.png break;
proxy_intercept_errors on;
error_page 404 = @dynamiccycletour;
#proxy_set_header Host $http_host;
#proxy_pass http://127.0.0.1:5005;
proxy_redirect /tile/SteveCountryVic/ http://localhost:5005/;
location @dynamiccycletour {
rewrite_log on;
#rewrite ^(\d+)/(\d+)/(\d+).*$ /tile/SteveCountryVic/$1/$2/$3.png break;
proxy_pass http://115.x.x.x:20008;
}
location /tile/ {
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:20008;
proxy_cache my-cache;
proxy_cache_valid 200 302 60m;
proxy_cache_valid 404 1m;
}
...
在此配置中,所有请求似乎都被重定向到代理服务器,但最终会提供图像。此外,错误日志包含以下行:
2013/09/10 09:44:11 [error] 564#0: *138 open() "/etc/nginx/html/tile/SteveCountryVic/13/7399/5027.png" failed (2: No such file or directory), client: 118.x.x.x, server: localhost, request: "GET /tile/SteveCountryVic/13/7399/5027.png?updated=15 HTTP/1.1", host: "mydomain.org"
如果不使用proxy_redirect
,我使用rewrite
and proxy_pass
:
rewrite ^.*/(\d+)/(\d+)/(\d+).*$ /$1/$2/$3.png break;
proxy_pass http://127.0.0.1:5005;
然后现在我实际上在浏览器中看到了 404 消息(即,它们没有被截获)。
我的问题:
- 我究竟做错了什么?
- 为什么 nginx 在 /etc/nginx/html/... 中寻找文件?
- 有没有办法获得更多的日志信息(特别是为了更好地理解 proxy_redirect)?
替代版本,使用
rewrite
和proxy_pass
表现完美 - 问题是另一台服务器返回 200 而不是 404。因此,为了完整起见,这里是工作配置:首先你没有
root
正确设置你的 - 指令 -> 这就是你得到 404 的原因 -> 这就是为什么所有请求都被重定向到你的 @dynamiccycletour (openstreetmap?)顺便说一句, /tile/ 和 /tile/SteveCountryVic/ 有什么区别?
所以我们首先需要在这里进行一些清理: