网站首页 文章专栏 用frp内网穿透https网站
用frp内网穿透https网站
创建于:2019-08-21 16:00:00 更新于:2021-12-02 14:15:18 羽瀚尘 2548
网站 网站,内网穿透,https,运维

背景

使用frp穿透本地一个https网站,frp client运行在树莓派中,树莓派中的nginx再次反向代理请求内网的nextcloud应用。其中,内网的nextcloud是具体的应用,暴露http服务;树莓派nginx用于提供https。

由于nextcloud根据http header中的host来生成登录时的url,在经过frp->nginx https->nginx nextcloud这样的代理链路之后,nginx https会收到错误的host header,导致登录的url不带端口。

本例非常特殊,因为一般的web服务不会带端口访问。这里是仅供自己使用的web服务,所以使用了国内免费的内网穿透,只能带端口访问。

错误原因

流量由frp转发到nginx https时,http header中的host依旧为我自己的域名(似乎frp并没有修改这个host),但是端口被更改为443.

这么分析看来是frp的问题,它只修改了host的域名,没有加上端口。

解决方案

临时的解决方案是在nginx https的配置中硬编码端口号,如下:

location / {
        proxy_pass  http://192.168.255.3;

        #Proxy Settings
        proxy_redirect     off;
        proxy_set_header   Host             $host:38013;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
}

相关内容

nginx的变量

  • $proxy_host 配置文件中的值,应该与proxy_pass的内容有关。
  • $host http请求中的host

参考