frp+nginx+子域名https

图片描述

我们有很多设备大概率下是放在内网的,其内部有个web服务,可以在浏览器上访问,如果也是在同一个内网去访问的话,固然是可以直接访问的,但如果人在外面呢?

所以我们做了一个移动端的app,通过内网穿透(用的frp,服务器frps我们提供)来连接这些设备。

因为考虑到多设备,多客户,所以我们用的子域名来访问,这个子域名就是每台设备的“身份证ID”,绝对不会重复,只需在每台设备的frpc.ini配置一下即可。

现在准备在移动端启用https进行加密访问,我的做法是在frps的服务器里再加一层代理,用nginx来做,现在证书也弄好了,假设域名为example.com

我的思路是,移动端发送https请求到nginx,nginx收到以http发送给frps,剩下的就交给frps了。

但实际不是这么回事,我在浏览器访问https://2496.example.com,它说不安全,我的nginx配置内容:

server {
    server_name *.example.com; # managed by Certbot
    root         /usr/share/nginx/html;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
        proxy_pass http://$server_name$1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header REMOTE-HOST $remote_addr;
        add_header X-Cache $upstream_cache_status;expires 12h;
    }
    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

server {
    listen       80 ;
    listen       [::]:80 ;
    server_name *.example.com;
    
    return 301 https://$server_name$1;
}

我最近几天在开始接触nginx和frp,有很多不懂,希望有懂的各位朋友能指导一下,谢谢。

阅读 3.8k
1 个回答

letsencrypt你没有配置泛域名,https的是的example.com主网站, 子域名访问的时候当然证书不对。点击游览器的锁图标查看那个域名的证书路径是否和你访问的是一样

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题