本篇概要
最近在学习 docker 以及遇到一个需要 HTTP 内网穿透的事情,大致是本地的电脑 docker 构筑一个 laravel 环境,使用 frp 反向代理,服务器用私人 aws 。 服务器和客户端都使用了 docker-compose 。 frp 配置相关参考 frp 官方文档
服务器配置
- 目录结构如下: nginx + frp 。
├── docker-compose.yml
├── frp
│ ├── config
│ │ └── frps.ini
│ └── logs
│ └── frps.log
└── nginx
├── config
│ ├── conf.d
│ │ └── default.conf
│ ├── config.d
│ └── nginx.conf
└── logs
├── access.log
└── error.log
- docker-compose.yml 文件内容:
version: "3"
services:
nginx:
image: nginx
container_name: nginx
restart: always
volumes:
- ./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" # bind_port
- "7500:7500" # for frp dashboard
volumes:
- ./frp/config/frps.ini:/etc/frp/frps.ini
- ./frp/logs:/var/log
- nginx 配置文件 default.conf
server {
listen 80;
location / {
proxy_pass http://frp:8888; # frp HTTP 代理转发port。这里因为使用了已命名为 frp 的 docker 容器,所以可以在nginx配置中直接使用。
proxy_set_header Host $host; # 不要忘记这句 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;
}
}
- frp 配置文件 frps.ini
[common]
bind_port = 7000
bind_addr = 0.0.0.0
vhost_http_port = 8888
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = adminpwd
log_file = /var/log/frps.log
客户端配置
- 目录结构如下
Dockerfile
docker-compose.yml
docker
├── app
│ └── conf
│ └── php
│ ├── docker.conf
│ └── php.ini
├── db
├── frp
│ ├── config
│ │ ├── frpc.ini
│ │ └── frps.ini
│ └── logs
└── nginx
├── Dockerfile
└── conf
└── default.conf
docker 目录位于项目内。 Dockerfile 以及客户端的 nginx 具体配置与此次主题无关,所以忽略。
- docker-compose.yml 文件内容如下:
version: '3'
services:
nginx:
container_name: nginx
build: ./docker/nginx
ports:
- 8090:80
- 8443:443
volumes:
- ./:/app
depends_on:
- app
links:
- frp
frp:
image: snowdreamtech/frpc
container_name: frp
restart: always
ports:
- "5000:5000"
volumes:
- ./docker/frp/config/frpc.ini:/etc/frp/frpc.ini
- ./docker/frp/logs:/var/log/frpc.log
- 客户端 frp 配置 frpc.ini 如下:
[common]
server_addr = xxx.xxx.xxx.xxx # 远程服务器地址
server_port = 7000 # bind port 与上文服务器端设定一致
http_proxy = # 此处设定留空
[web]
type = http
local_port = 80 # 使用 nginx 容器的 port
local_ip = nginx # 使用 nginx 容器的 ip
custom_domains = your.domain.com