【发布时间】:2019-04-04 09:49:53
【问题描述】:
我可以创建一个可以被 nginx 配置中的任何其他位置访问并且不能从外部直接访问的位置吗?
我可以使用拒绝指令,但它也会拒绝访问 nginx 配置中定义的位置。
这是我的配置 -
server {
listen *:80;
server_name 127.0.0.1;
location = /auth {
set $query '';
if ($request_uri ~* "[^\?]+\?(.*)$") {
set $query $1;
}
# add_header X-debug-message "Parameters being passed $is_args$args" always;
proxy_pass http://127.0.0.1:8080/auth?$query;
}
location /kibana/ {
rewrite ^/kibana/(.*) /$1 break;
proxy_pass http://127.0.0.1:5601;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_cache_bypass $http_upgrade;
auth_request /auth;
}
location ~ (/app/|/app/kibana|/bundles/|/kibana4|/status|/plugins|/ui/|/api/|/monitoring/|/elasticsearch/) {
internal;
proxy_pass http://127.0.0.1:5601;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
rewrite /kibana4/(.*)$ /$1 break;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
所以,我只需要从位置 /kibana/ 访问最后一个位置,但是使用 internal; 它会引发 404 错误,否则它可以正常工作。
我实际上需要用 nginx 保护 kibana,但我最终会在没有任何身份验证的情况下有效地暴露它。
【问题讨论】:
-
您打算如何从另一个位置访问一个位置?有internal directive或named location,都不能直接访问。
-
我已经用相关数据更新了我的问题
-
问题是,如果我只使用
/kibana,nginx会在/usr/share/nginx/html下寻找webapp,这很奇怪!然后我添加了这些额外的位置并再次代理到相同的位置127.0.0.1:5601然后它在没有internal;的情况下工作,但是我总是可以直接访问/app/kibana而无需任何身份验证。
标签: nginx nginx-location nginx-config auth-request