本地服务器与云服务实现内网穿透ip映射—从创建到实现不用重新部署-CSDN博客
本篇文章基于以上frp内网穿透的继续补充
继内网击穿部署后,统一配置https请求,解决修改项目的麻烦步骤
前言——实现大致原理:
之前我们通过frp内网穿透,将公网ip的请求转到内网服务器的对应的端口实现了ip的映射。
在图片中我们在云服务器配置了nginx监听拦截监听443https的默认接受请求的端口,根据请求的路径判断解密为http请求转发给对应的端口,对应的端口通过内网穿透的隧道来到本地的内网服务器。
但是我们使用了阿里云服务器的免费试用期,为了后续跟换云服务器的ip,只需要配置frps的服务端便于更换,所以我们将nginx向下沉。将nginx放在内网客户端的内网的服务器中,配置好,通过frp工具建立连接通道,通过nginx接收https请求,对应不同的请求路径转发http请求到对应服务的端口。
一.下载nginx:
1.下载安装Nginx
yum install nginx -y
2.安装后可以测试一下是否成功安装
nginx -v
二.配置https需要的SSL证书
1.创建证书所在的目录
sudo mkdir -p /etc/nginx/ssl
2给目录添加权限方便nginx可以试用
sudo chmod 777 /etc/nginx/ssl
3.创建生成证书
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/nginx/ssl/server.key \
-out /etc/nginx/ssl/server.crt \
-subj "/C=CN/ST=Beijing/L=Beijing/O=YourCompany/CN=没有域名则使用你的ip"
生成私钥和自签名证书(有效期365天,Common Name填写你的域名或IP)其实不合规范的,请求时会显示不安全,可以使用一些符合规范的证书来生成
4.进入我们之前创建的目录
cd /etc/nginx/ssl
进入目录可以看到我们生成的证书的两个文件,由于我们生成时指定了我们生成的目录位置。
5.保险起见给证书文件也设置一下权限
sudo chown root:nginx /etc/nginx/ssl/server.*
sudo chmod 640 /etc/nginx/ssl/server.*
三.配置nginx和启动
1.创建我们配置的文件目录(如果报错已存在就不用)
mkdir /etc/nginx/sites-available
2.创建配置文件
touch /etc/nginx/sites-available/frp-proxy
3.配置监听拦截信息
vim /etc/nginx/sites-available/frp-proxy
I插入,鼠标中键粘贴
ESC,:,wq保存退出
这里没有配置http的强制重定向,这里就不说怎么配置了,反正前端请求改成https就好了
server {
listen 443 ssl;
server_name 6.6.6.6; # 替换为你的域名或IP
# SSL证书路径
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
ssl_session_timeout 1d;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# 代理Web服务(8080端口)
location /web/ {
proxy_pass http://127.0.0.1:8080/; # 转发到FRPS的vhost_http_port
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;
}
# 代理图片服务(9000端口,假设通过HTTP访问)
location /images/ {
proxy_pass http://127.0.0.1:9000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# 在第一个server块内添加新location
location /admin/ { # 自定义访问路径(如/newservice/)
proxy_pass http://127.0.0.1:8081/; # 转发到本机8081端口
proxy_set_header Host $host; # 必须保持的header
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;
}
location /ws/ {
proxy_pass http://127.0.0.1:8080; # 替换为内网WS服务地址和端口
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
# 可选:转发原始客户端IP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
详细描述:
proxy_pass http://127.0.0.1:8080;后面带斜杠则不会拼接上第一个路径比如ws,如果不带斜杠则会拼接上ws如:http://127.0.0.1:8080/ws/接着后续的路径
注意:nginx我们根据请求的路径来区分将请求服务送往本地的哪个端口
4.配置文件软连接
sudo ln -s /etc/nginx/sites-available/frp-proxy /etc/nginx/sites-enabled/
/etc/nginx/sites-enabled/这个文件目录要是没有记得创建,不如可能报错
5.软连接后需要竟然nginx的配置文件中告诉他你的配置文件加载位置。
在nginx目录下即/etc/nginx目录下找到nginx.conf这个配置文件
vim进去编辑,将
include /etc/nginx/sites-enabled/*
这个配置放在
sudo nginx -t # 测试配置语法
显示ok表示配置没啥问题
6.启动nginx
sudo systemctl restart nginx
补充:
1)查看启动状态
sudo systemctl status nginx
2)停止nginx
sudo systemctl stop nginx
最重要检查:检查我们https的443端口是否被监听,将通过443端口拦截https解析转发http
sudo ss -tuln | grep ':443'
四.修改frpc内网客户端服务器的击穿工具
回顾:
之前我们配置了8080和9000端口的映射,但是现在我们是通过nginx来监听443统一解析https转为http根据请求路径转发到对应的服务的端口,所以内网穿透端口映射不需要这些了,只要443端口。
[common]
省略不变
[ssl]
type = tcp
local_port = 443
remote_port = 443
完成后杀死进程重新启动
同时nginx配置了什么也可以ai问问,如果要https改回http,其实可以拦截http转发http,拦截https转发https,看你需要,由于内网服务器使用的其他软件项目较多,大量的添加https比较麻烦所以采用这个方法。