写下这个配置过程主要是因为frp官网的《为本地 HTTP 服务启用 HTTPS》我进行了尝试没有成功,于是就想通过反向代理+内网穿透实现这个功能。放在这里也正好和大家一起交流讨论一下。
前提
- 一台有带有公网IP的服务器
- 一台内网服务器
- 公网服务器安装好Nginx(安装过程略)
- 公网和内网服务器已经分别下载好frp(使用方法参见:https://gofrp.org/zh-cn/docs/examples/)
申请SSL证书
( Let’s Encrypt)参考:
这里我是:
-
安装Certbot
sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/bin/certbot
-
运行 Certbot
运行时要保证80端口未被占用(若需要保持我的网络服务器运行,参见官网参考教程)
sudo certbot certonly --standalone
运行完成后,会在本地生成证书,终端会显示安装位置:
Successfully received certificate.
Certificate is saved at: /path/to/your/fullchain.pem
Key is saved at: /path/to/your/privkey.pem
配置Nginx服务
方法:配置 Nginx 监听 80 和 443 端口,并将 HTTP 请求重定向到 HTTPS,同时将请求转发到 8080 端口。
编辑: /etc/nginx/sites-available/default
文件
# Redirect all HTTP requests to HTTPS
server {
listen 80;
server_name www.example.com; # 替换为你的域名
# 重定向所有 HTTP 请求到 HTTPS
return 301 https://$host$request_uri;
}
# HTTPS server configuration
server {
listen 443 ssl;
server_name www.example.com; # 替换为你的域名
# SSL 证书和密钥文件路径
ssl_certificate /path/to/your/certificate.crt;
ssl_certificate_key /path/to/your/private.key;
# 定义访问日志和错误日志的位置
# access_log /var/log/nginx/access.log;
# error_log /var/log/nginx/error.log;
location / {
# 将所有请求转发到 8080 端口
proxy_pass http://127.0.0.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 X-Forwarded-Proto $scheme;
}
}
配置完成后,所有的 HTTP 请求会自动重定向到 HTTPS,HTTPS 请求会被转发到 8080 端口。
接着测试Nginx配置并启动服务:
sudo nginx -t
sudo systemctl restart nginx
确保没有错误后,Nginx 服务将会启动并应用新的配置。
配置内网穿透服务
公网服务器(frps.toml
)
bindPort = 7000 # 与内网服务器的通信端口
vhostHTTPPort = 8080
内网服务器(frpc.toml
)
serverAddr = "1.1.1.1" #你的公网服务器IP
serverPort = 7000
[[proxies]]
name = "one-api"
type = "http"
localPort = 8080
customDomains = ["www.example.com","www.example.cn"]
这个配置是当用户访问 www.example.com
或者 www.example.cn
的时候, frp
会将内网服务器的8080端口服务暴露在公网上。
由于Nginx已经配置好了证书,当用户访问 www.example.com
时,会自动进行HTTPS加密通信,并将端口指向frp监听的端口。
测试与验证
完成以上配置后,可以就可以启动内网穿透服务,并进行验证:
-
启动 frps 和 frpc 服务
在公网服务器上启动 frps:
./frps -c ./frps.toml
在内网服务器上启动 frpc:
./frpc -c ./frpc.toml
-
访问测试
打开浏览器,输入
https://www.example.com
进行访问,检查是否能够成功连接到内网服务器的服务。如果一切配置正确,应该能够看到内网服务的页面。