(nginx的方案源于网上资料,本文档仅供参考)
nginx配置监听端口不是80(http协议)或443(https协议)时,登录smartbi后在界面上无法导出资源、系统日志,打开报表点导出按钮无法导出文件,也就是大部分下载的操作都不正常。
如下示例,配置http监听端口是8088,有问题的nginx.conf配置如下:
#user root root; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 8088; server_name localhost 10.10.10.23; #charset koi8-r; resolver 8.8.8.8; location /smartbi/ { proxy_pass http://10.10.202.17:18600/smartbi/ ; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 100m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } } |
导出日志时浏览器并未下载文件,查看F12可以看到如下:
如果将8088端口改成80端口,保存重启nginx则可以正常导出日志。
在smartbi中下载资源是会重定向的,当前的nginx配置没有正确的把端口信息告知浏览器导致重定向时用了http协议默认的80端口(http协议的url中不显示80)
对于上述问题,有以下解决方案:
增加端口信息到proxy_set_header,将
proxy_set_header Host $host;改成
proxy_set_header Host $host:$server_port;
保存配置后重启nginx。
注意:如果nginx是通过docker之类的容器环境部署,并且nginx容器的内外端口不一致时,需要把$server_port 改为nginx对外的实际端口值