Docker+Frp+NGinx+云服务器 实现HTTPS内网穿透

Docker+Frp+NGinx+云服务器 实现HTTPS内网穿透

服务端搭建 (用docker-compose 服务器端搭建)

前置条件

1. 一台有公网ip的服务器

2. 记得在服务器安全组开放对应端口 7000 7500 8888 9999 8080 8081 80 443

3. 公网服务器绑定域名1个(配置https用 非强制需要)
   教程 "https://baijiahao.baidu.com/s?id=1735338179545582206&wfr=spider&for=pc"

创建目录和文件

# 创建存放配置文件夹
mkdir /mydata/frp

# 调整目录
cd /mydata/frp

# 创建文件
touch frps.ini
touch docker-compose-aw.yml

配置 frps.ini

# 编辑 frps.ini
  vim frps.ini

#加入内容  密码 和 token自己替换
[common]
#绑定端口
bind_port = 7000
# 启用面板
dashboard_port = 7500
# 面板登录名和密码
dashboard_user = admin
dashboard_pwd = 123456
# 使用http代理并使用8888端口进行穿透
vhost_http_port = 8888
# 使用https代理并使用9999端口进行穿透
vhost_https_port = 9999
# 日志路径
log_file = ./frps.log
# 日志级别
log_level = info
# 日志最大保存天数
log_max_days = 2
# 认证超时时间
authentication_timeout = 900
# 认证token,客户端需要和此对应,类似于密码,建议设置复杂
token=2DwEfQYnY8f0jG7vPYI29tzzA72_iha93n1gmYqCj5Zw1wxH
# 最大连接数
max_pool_count = 5
max_ports_per_client = 0

配置 docker-compose-aw.yml 构建frp服务端

# 编辑 docker-compose-aw.yml
  vim docker-compose-aw.yml

#加入内容 构建nginx 和frp  (没有域名的可以不用安装nginx)
version: '3'
services:
  frp:
    image: snowdreamtech/frps
    container_name: frp
    restart: always
    ports:
      - 7000:7000 # 里的端口与 frps.ini 中 bind_port 保持一致
      - 7500:7500 # 里的端口与 frps.ini 中 dashboard_port 保持一致
      - 8888:8888 # 里的端口与 frps.ini 中 vhost_http_port 保持一致
      - 9999:9999 # 里的端口与 frps.ini 中 vhost_https_port 保持一致
      - 8080:8080 # 这个本地要映射出去的端口  可配置多个
      - 8081:8081 # 这个本地要映射出去的端口  可配置多个
    volumes:
      - /mydata/frp/frps.ini:/etc/frp/frps.ini  #frps.ini 文件地址和上面创建目录一致
  nginx:
    image: nginx:1.22
    container_name: nginx
    restart: always
    volumes:
      - /mydata/nginx/nginx.conf:/etc/nginx/nginx.conf #配置文件挂载
      - /mydata/nginx/html:/usr/share/nginx/html #静态资源根目录挂载
      - /mydata/nginx/log:/var/log/nginx #日志文件挂载
    ports:
      - 80:80
      - 443:443
    links:
      - frp  #绑定frp的网络

# 执行构建服务端
  docker-compose -f docker-compose-aw.yml up -d

外网浏览器输入 服务器ip:7500, 输入配置文件中的账号密码, 登录 dashboard ,确认是否启动成功

Docker+Frp+NGinx+云服务器 实现HTTPS内网穿透_第1张图片

客户端搭建(本地搭建)

下载对应版本 frp 客户端文件,地址:https://github.com/fatedier/frp/releases 解压到本地

  • Windows: frp_0.43.0_windows_386.zip
  • MacOS: frp_0.44.0_darwin_amd64.tar.gz
  • MacOS(m1): frp_0.44.0_darwin_arm64.tar.gz

解压找到目录中的 frpc.ini 文件,管理员模式打开编辑,编辑内容如下,记得在服务器安全组开放对应端口

[common]
# 服务端ip(服务器ip)
server_addr = xxxx  
# 对应服务端配置 bind_port
server_port = 7000
# 对应服务端配置中的 token
token = 2DwEfQYnY8f0jG7vPYI29tzzA72_iha93n1gmYqCj5Zw1wxH

# 每一个 server 对应一个端口映射,名称可自定义
[server-1]
type = tcp
# 此处不需要改
local_ip = 127.0.0.1
# 本地服务器映射端口
local_port = 8080
# local_port映射的远程端口(外网端口),也就是映射的服务端的端口
remote_port = 8080

# 每一个 server 对应一个端口映射,名称可自定义
[server-2]
type = tcp
# 此处不需要改
local_ip = 127.0.0.1
# 本地服务器映射端口
local_port = 8081
# local_port映射的远程端口(外网端口),也就是映射的服务端的端口
remote_port = 8081

Docker+Frp+NGinx+云服务器 实现HTTPS内网穿透_第2张图片

通过命令行启动 frpc

  • windows,通过安装根目录 cmd窗口执行
# 输入执行命令
frps.exe

windows 配置frp开机自启

  • 1 . windwos利用"任务计划程序"。在Frp同目录下新建一个"start.bat" 文件。接着,右键编辑这个 start.bat 加入下面内容
@echo off
:home
frpc -c frpc.ini
goto home
  • 2 . 此电脑右击 选择管理 创建任务
    Docker+Frp+NGinx+云服务器 实现HTTPS内网穿透_第3张图片
  • 2 . 创建任务
    Docker+Frp+NGinx+云服务器 实现HTTPS内网穿透_第4张图片
  • 3 . 配置触发器
    Docker+Frp+NGinx+云服务器 实现HTTPS内网穿透_第5张图片
  • 4 . 配置操作

Docker+Frp+NGinx+云服务器 实现HTTPS内网穿透_第6张图片

  • 5 . 配置条件

Docker+Frp+NGinx+云服务器 实现HTTPS内网穿透_第7张图片

  • 6 . 启动测试

Docker+Frp+NGinx+云服务器 实现HTTPS内网穿透_第8张图片* 7 . 以后就会开机自动启动 frp 了,并且不会弹出命令提示符窗口。

通过 服务器ip + remote_port 访问对应服务即可

Docker+Frp+NGinx+云服务器 实现HTTPS内网穿透_第9张图片

  • macos 通过终端执行,这里需要去 设置 -> 安全与隐私 -> 通用 -> 允许从以下位置下载的APP 点击允许才可继续执行命令
./frpc -c frpc.ini
# 需要注意的是,mac运行可能需要安装 go 的环境,若以上语句报错,则先执行
brew install go
# 通过 服务器ip + remote_port 访问对应服务即可

使用Nginx 来配置Https + 域名

修改Nginx配置

# 编辑nginx配置
vim /mydata/nginx/nginx.conf

加入内容

# 重定向,http跳转https
server{
	listen 80 default;
	server_name sgj.asia;
	rewrite ^(.*) https://$server_name$1 permanent;
}
server {
    #SSL 默认访问端口号为 443
    listen 443 ssl;
    #请填写绑定证书的域名
    server_name www.awei.press;
    underscores_in_headers on;
    #请填写证书文件的相对路径或绝对路径  私钥我是放到html文件夹下面
    ssl_certificate     /usr/share/nginx/html/crt/awei.press_bundle.crt;
    ssl_certificate_key  /usr/share/nginx/html/crt/awei.press.key;

    ssl_session_timeout 5m;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #表示使用的TLS协议的类型。
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_prefer_server_ciphers on;
    add_header X-Cache $upstream_cache_status;expires 12h;


    location / {
    proxy_redirect off;
    proxy_set_header Host $host;
    #proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Protocol $scheme;
    proxy_set_header X-Url-Scheme $scheme;
  
    #以下三行配置wss
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    # 代理本地端口
    proxy_pass "http://43.142.243.64:8080";
    }
 
}

重启Nginx

docker restart nginx

https+域名 访问网页效果

Docker+Frp+NGinx+云服务器 实现HTTPS内网穿透_第10张图片
❤️ 看完有所收获?希望爱学习的你不要吝啬三连击哟[点赞 + 收藏 + 评论]~

你可能感兴趣的:(Docker应用,内网穿透,docker,linux,intellij-idea)