缘起
- 因为宽带没有公网ip,而买一个云服务器又太过费钱。因而选择了使用内网穿透,而内网穿透我比较熟悉的厂商也就是
SakuraFRP
了。 - 但内网穿透的免费隧道只有两条,挂个
alist
是绰绰有余的,但我还想挂其他服务。这么看来两条隧道显然是不够用,于是我想到了nginx反向代理。 - 通过反向代理监听本地端口实现子目录的不同服务访问。
下载应用
- 安装
nginx
1
sudo apt install nginx
配置反向代理
frp修改映射的端口
- 因为本文中用的是SakuraFRP,所以直接去网页那修改一下(本文是改为
10086
)然后重启frpc就行了。
添加反向代理文件
先备份一下默认配置
1
cp /etc/nginx/sites-avaliable/default /etc/nginx/sites-avaliable/default.bak
编辑
default
。删除所有配置并加入以下内容。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22server {
listen 10086; # Nginx 监听本地的 10086 端口(可以改为你需要的端口)
server_name 127.0.0.1;
# 将根路径 `/` 的请求代理到本地 5244 端口
location / {
proxy_pass http://127.0.0.1:5244;
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;
# 不加这个上传不了文件
client_max_body_size 20000m;
}
location /other {
proxy_pass http://127.0.0.1:5299;
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;
}加载配置文件并重启
nginx
服务。1
2
3nginx -t
systemctl restart nginx
注意事项
代理时应该路径相同。比如
/other/
,目标网站的/other
下面应该有东西。如果没有的话就需要加上
/
来解决。但这样也可能会导致一些资源请求失败而无法完全加载网页。1
2
3
4
5
6location /other/ {
proxy_pass http://other_server/;
# 而不是
# proxy_pass http://other_server;
proxy_set_header Host $host:$server_port;
}有部分网站可以通过重定向解决资源请求问题,但也只是部分。
1
2
3
4
5location /other/ {
proxy_pass http://other_server/;
proxy_set_header Host $host:$server_port;
proxy_redirect / /other/;
}$host:$server_port
必不可少,因为我们使用的是内网穿透,端口自然不能自定义。加上这个,才能在网页内跳转的时候获取正确的url。