我按照指示in this post在代理后面运行Shiny服务器。
带有尾部斜杠http://yhat.io/shiny/faithful/的网址按预期工作。但是,URL http://yhat.io/shiny/faithful(没有尾部斜杠)
被重定向到http://yhat.io/faithful/,并且在找不到404时失败。
这是我的nginx
配置,
location /shiny/ {
rewrite ^/shiny/(.*)$ /$1 break;
proxy_pass http://localhost:3838;
proxy_redirect http://localhost:3838/ $scheme://$host/shiny/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 20d;
proxy_buffering off;
}
这是我的nginx access.log
,
147.158.2.202 - - [20/Jan/2018:06:25:41 +0000] "GET /shiny/faithful/__sockjs__/n=9D3bkci4UbDJVuOKzw/866/05qfjneq/websocket HTTP/1.1" 101 19667 "-" "Mozilla/5.0 ...
147.158.2.202 - - [20/Jan/2018:06:25:39 +0000] "GET /faithful/ HTTP/1.1" 404 209 "-" "Mozilla/5.0 ..
我想知道为什么rewrite
正则表达式没有捕获尾部斜杠?没有尾部斜杠的URL会被重定向到端口80而不是Shiny
端口3838。
我尝试了各种解决方案,包括
rewrite ^(/shiny/[^/]+)$ $1/ permanent;
,由@Dean Attali location ~ ^/shiny/?$
启用正则表达式匹配location \
不幸的是,到目前为止没有任何作用。有人能指出我的方向吗?
答案 0 :(得分:0)
我很抱歉。经过多次修补后,我得出结论,@ DeanAttali的建议确实有效。
rewrite ^(/shiny/[^/]+)$ $1/ permanent;
问题在于 我的 Chrome代理,这是一个孤立的问题。不幸的是,我仍然无法弄清楚背后的原因。
如果有人将来遇到类似的情况,我可以分享两个提示。
curl -L
测试结果,而不是在浏览器上手动刷新。 在命令行上,
$ curl -L yhat.io/shiny/faithful | head -n 10
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 194 100 194 0 0 194 0 0:00:01 --:--:-- 0:00:01 1083
100 2257 100 2257 0 0 2257 0 0:00:01 --:--:-- 0:00:01 2257
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<script type="application/shiny-singletons"></script>
<script type="application/html-dependencies">json2[2014.02.04];jquery[1.12.4];shiny[1.0.5];ionrangeslider[2.1.6];strftime[0.9.2];bootstrap[3.3.7]</script>
<script src="shared/json2-min.js"></script>
<script src="shared/jquery.min.js"></script>
<link href="shared/shiny.css" rel="stylesheet" />