Nextcloud需要访问国外网站接口,所以导致国内机器获取失败或者超时。
用国外服务器
使用代理
查看配置文件
[root@bj-a-web Service]# pwd /data/nextcloud/apps/weather_status/lib/Service [root@bj-a-web Service]# ls WeatherStatusService.php WeatherStatusService.php
相关的URL
https://nominatim.openstreetmap.org/reverse https://api.opentopodata.org/v1/srtm30m https://api.met.no/weatherapi/locationforecast/2.0/compact
改成
http://nominatim.openstreetmap.9421.ltd/reverse http://api.opentopodata.9421.ltd/v1/srtm30m http://api.met.9421.ltd/weatherapi/locationforecast/2.0/compact
因为改写后的接口是好的,所以可以直接用了。
nginx(openresty) + lua
[root@TKY ~]# cat /usr/local/openresty/nginx/conf/www/proxy.conf server { listen 80; server_name nominatim.openstreetmap.9421.ltd api.opentopodata.9421.ltd api.met.9421.ltd ; default_type application/json; access_log logs/proxy_access.log main; error_log logs/proxy_error.log; location / { # 代替 nginx 响应正文 content_by_lua ' local ngx_host = ngx.var.host -- 获取当前请求的域名 local ngx_uri = ngx.var.request_uri -- 获取url后面的路径参数 local curl_host = "" -- 设置一个变量 if ( ngx_host == "nominatim.openstreetmap.9421.ltd" ) -- 判断当前域名 then curl_host = "https://nominatim.openstreetmap.org" -- 改写curl_host 变量 elseif ( ngx_host == "api.opentopodata.9421.ltd" ) then curl_host = "https://api.opentopodata.org" elseif ( ngx_host == "api.met.9421.ltd" ) then curl_host = "https://api.met.no" else ngx.exit(ngx.ERROR) -- 按照逻辑 这步应该不会出现 除非 nginx 配置出错了 end local next_url = curl_host .. ngx_uri -- 拼接URL local shell_cmd_1 = [[curl -A "NextcloudWeatherStatus/1.5.0 nextcloud.com" "]] -- 拼接 shell 命令 local shell_cmd_2 = [["]] local shell_cmd = shell_cmd_1 .. next_url .. shell_cmd_2 -- 最终拼接好的 shell 命令 local cmd_ini = io.popen(shell_cmd) -- 使用 io.popen 这个方法 执行shell 命令 可以获取到执行结果 local resp = cmd_ini:read("*all") -- 获取执行结果 ngx.say(resp) -- ngx 网页输出 '; } }
Thanks , I've recently been searching for info approximately this
topic for ages and yours is the greatest I've found
out so far. However, what concerning the bottom line?
Are you positive about the source?