我想configurationnginx作为一个反向代理,根据传递的URI将redirect到两个不同的Kibana主机。 /redirect到标准和/october/到十月专用Kibana。 configuration( / )的第一部分工作正常,但尝试访问/october时,我得到了Too many redirections错误。 我尝试将第二部分( location /october/ )注释掉,并在第一部分中将10.10.0.3replace为localhost ,然后将其redirect到十月平台。 所以问题在于这个nginxconfiguration。
server { listen 80; server_name my.domain.io; return 301 https://$server_name; } server { listen 443 ; ssl on; ssl_certificate /etc/letsencrypt/live/my.domain.io/cert.pem; ssl_certificate_key /etc/letsencrypt/live/my.domain.io/privkey.pem; server_name my.domain.io; access_log /var/log/nginx/kibana.access.log; error_log /var/log/nginx/kibana.error.log; location / { auth_basic "Restricted"; auth_basic_user_file /etc/nginx/conf.d/kibana.htpasswd; location / { proxy_pass http://localhost:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } location /october/ { proxy_pass http://10.10.0.3:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } }
感谢之前的回应,我find了解决scheme,但并不完全知道“如何”和“为什么”它的工作…
这是我的新configuration:
server { listen 80; server_name my.domain.io; return 301 https://$server_name; } server { listen 443 ; ssl on; ssl_certificate /etc/letsencrypt/live/my.domain.io/cert.pem; ssl_certificate_key /etc/letsencrypt/live/my.domain.io/privkey.pem; server_name my.domain.io; access_log /var/log/nginx/kibana.access.log; error_log /var/log/nginx/kibana.error.log; auth_basic "Restricted"; auth_basic_user_file /etc/nginx/conf.d/kibana.htpasswd; location / { proxy_pass http://localhost:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } location = /october { return 302 /october/; } location /october/ { proxy_pass http://10.10.0.3:5601/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
不需要proxy_redirect指令。 诀窍是在/october位置和/octoberredirect到/october/ whit 302代码的末尾添加一个/ 。 不要忘记,你必须在你的kibana.yml文件中设置server.basePath为"/october" 。
这篇文章帮助了我: 如何使用nginx proxy_pass删除path
希望这将有助于…
我认为你的locations嵌套不正确,请尝试以下操作:
server { listen 443 ; ssl on; ssl_certificate /etc/letsencrypt/live/my.domain.io/cert.pem; ssl_certificate_key /etc/letsencrypt/live/my.domain.io/privkey.pem; server_name my.domain.io; access_log /var/log/nginx/kibana.access.log; error_log /var/log/nginx/kibana.error.log; auth_basic "Restricted"; auth_basic_user_file /etc/nginx/conf.d/kibana.htpasswd; location / { proxy_pass http://localhost:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } location ~ ^/october.*$ { proxy_pass http://10.10.0.3:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
通过给定的configuration, /october/some/path请求将被原样传递给你的第二个Kibana主机,这个主机可能没有被configuration为预期前缀为/october请求。
我不知道Kibana,但是一个快速的search把我带到5.1的configuration文件,它有一个server.basePathconfiguration值。 尝试将其设置为“/十月”。
另外,正如文档所说,这个值只会影响Kibana生成的URL,您需要在nginxconfiguration中添加一个proxy_redirect指令,并修改proxy_pass nginx指令,并在后端URL中添加一个/ :
server { listen 80; server_name my.domain.io; return 301 https://$server_name; } server { listen 443 ; ssl on; ssl_certificate /etc/letsencrypt/live/my.domain.io/cert.pem; ssl_certificate_key /etc/letsencrypt/live/my.domain.io/privkey.pem; server_name my.domain.io; access_log /var/log/nginx/kibana.access.log; error_log /var/log/nginx/kibana.error.log; location / { auth_basic "Restricted"; auth_basic_user_file /etc/nginx/conf.d/kibana.htpasswd; location / { proxy_pass http://localhost:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } location /october/ { proxy_pass http://10.10.0.3:5601/; proxy_redirect / /october/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } }
proxy_redirect重写“位置”和“刷新”标题中返回的URL,附加的斜杠导致代理模块剥离由nginx“location”指令匹配的path。 这些有效地相互补充。