【精选】nextcloud+nginx+ssl+非443,踩坑记录

您所在的位置:网站首页 反向代理内网穿透怎么设置 【精选】nextcloud+nginx+ssl+非443,踩坑记录

【精选】nextcloud+nginx+ssl+非443,踩坑记录

2023-10-21 12:54| 来源: 网络整理| 查看: 265

需求描述

pc 移动端app必须都支持 为了省阿里云服务器流量,服务器需要的三个访问路径 1、需要内网可以通过ip+port直接访问 2、外网可以通过ddns访问,因为443和80端口都被封,只能换端口,但依然需要ssl 3、为了防止ddns挂掉,通过阿里云配置内网穿透。阿里云由443端口,所以同样需要ssl。

结构

内网访问,直接访问nextcloud ddns访问。单个nginx。由于不止一个web服务,所以内网搭建nginx,反向代理到nextcloud。内网nginx负责域名解析,ssl配置。 阿里云访问。nginx+nps。本身备案需要开一个web用于定期检查。又需要内网穿透和域名解析。所以配置nginx,www直接指向阿里云本身(检查要求,www指向阿里云服务器),其他二级域名直接把流量通过内网穿透发送到内网nginx上,内网nginx做域名解析。穿透用的nps

出现问题

阿里云nginx转发到内网nginx,内网nginx做域名解析配置ssl。通过阿里云访问正常。 ddns直接访问内网nginx,网页登录提示 refused to send form data to xxx.xx.xx because it violates the following content security policy directive: "form-action 'self'". win 客户端提示从https访问,尽管登录 url 以 https 开头,但轮询 url 中没有,你将无法登录,因为这是一个安全问题 手机app登录提示access forbidden invalid request,还有提示严格模式,只允许https访问,即使设置了http。

解决方案

这里直接贴解决办法,具体过程和排查在后面。 nextcloud关键配置

'overwritecondaddr' => '^192\\.168\\.1\\.141$',#nginx的ip #nextcloud拿到的ip与overwritecondaddr做正则,通过,则会用使用overwriteprotocol定义的值替换http。 'overwriteprotocol' => 'https',

内网nginx配置

location / { proxy_set_header X-Real-IP '192.168.1.144';#设置为nginx所在的ip地址 #X-Forwarded-For:nextcloud通过此获取客户端实际ip,用于防止密码暴力破解等问题。 #如果ddns访问或者通过穿透访问时,一个客户端密码试错导致所有客户端都提示ip被锁定, #可以看是不是这个配错了,导致nextcloud拿到的所有客户端ip都是nginx的ip或者阿里云的ip proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto 'https';#从nginx访问的,只允许通过https,所以写死,不用$scheme了; proxy_set_header Host $http_host;#因为是带端口的访问,所以这里必须用$http_host proxy_pass http://192.168.1.145:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade;#升级http为wss,加上这两条以支持wss proxy_set_header Connection "upgrade"; }

关键在proxy_set_header X-Real-IP '192.168.1.144'。X-Real-IP值需要能被nextcloud的config.php中overwritecondaddr的正则匹配成功,成功后会为域名加上https,否则认为不是通过反向代理访问的,不会加https。 根据网上其他nginx配置,都写着X-Real-IP 需要配置为$remote_addr,翻源码后才发现nextcloud不是能这么设置。

过程

注!!!过程中的一些配置仅是提供排查思路,不是最终解决办法 首先遇到的问题是登录提示refused to send form data…,搜了一圈都说是nextcloud的 html/config/config.php配置文件中加入 'overwriteprotocol' => 'https', 'overwritecondaddr' => '^192\\.168\\.1\\.144$', 然而加入并没有用,依然提示。 然后搜了说是ContentSecurityPolicy(CSP)的配置,找到了配置文件,在html\lib\public\AppFramework\Http\ContentSecurityPolicy.php里面

protected $allowedFormActionDomains = [ '\'self\'', 'http://pan.example.com:8989',//加入允许的地址,8989是我自己通过外网访问的端口 ];

已经配好了ssl,访问用的是https&#x



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3