欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Docker部署Nginx、frp实现内网穿透

时间:2023-06-27

原文链接:https://waynegong.cn/posts/8279.html

由于没有公网 IP,加上黑群晖没有洗白,无法进行外网的远程连接。

通过 frp 内网穿透后可以通过 sub.domain.com:xxx 的形式访问到内网的 web 服务,但是带上端口号十分不优雅也难以记忆。

在公网服务器上部署 Nginx 反向代理到 frp 的特定端口,即可在使用内网服务时不需要端口号了。

服务端部署

通过 docker-compose 启动 Dcoker 容器,保持 Nginx 与 frp 两个容器在同一个 Network 下即可在 nginx 容器中将请求转发到 frp 容器。

前置条件:

服务端需要 docker 环境及 docker-composeNginx 镜像snowdreamtech/frps 镜像 目录结构

.├── docker-compose.yml├── frp│ └── config│ └── frps.ini└── nginx ├── config │ ├── conf.d │ │ └── default.conf │ └── nginx.conf └── logs ├── access.log └── error.log

docker-compose.yml 内容如下:

version: "3"services: nginx: image: nginx container_name: nginx restart: always volumes: - ./nginx/config/nginx.conf:/etc/nginx/nginx.conf - ./nginx/config/conf.d:/etc/nginx/conf.d - ./nginx/logs:/var/log/nginx ports: - "80:80" environment: - NGINX_PORT=80 links: - frp frp: image: snowdreamtech/frps container_name: frp restart: always ports: - "7000:7000" # 里的端口与 frps.ini 中 bind_port 保持一致 volumes: - ./frp/config/frps.ini:/etc/frp/frps.ini

nginx 的 default.conf 配置文件(可以先 run 一个 nginx 容器然后 通过 docker cp 得到默认配置):

server { listen 80; server_name *.domain.com; location / { proxy_pass http://frp:8888; # 这里的端口与 frps.ini 中 vhost_http_port 保持一致 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }}

frps.ini 配置文件:

[common]bind_port = 7000vhost_http_port = 8888frpc.ini 配置文件(这里是 frp 客户端配置,仅做参考):[common]server_addr = x.x.x.xserver_port = 7000[xx sercer]type = httplocal_port = xxxcustom_domains = sub.domain.com

完成所有配置之后在 docker-compose.yml 所在的目录执行 docker-compose up 完成验证即可。

验证

按照上述配置之后,原来通过 sub.domain.com:8888 才能访问的内网 web 服务现在只需要通过 sub.domain.com 访问即可。

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。