少女祈祷中...

缘起

  • 因为宽带没有公网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
    22
    server {
    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
    3
    nginx -t

    systemctl restart nginx

注意事项

  • 代理时应该路径相同。比如/other/,目标网站的/other下面应该有东西。

  • 如果没有的话就需要加上/来解决。但这样也可能会导致一些资源请求失败而无法完全加载网页。

    1
    2
    3
    4
    5
    6
    location /other/ {
    proxy_pass http://other_server/;
    # 而不是
    # proxy_pass http://other_server;
    proxy_set_header Host $host:$server_port;
    }
  • 有部分网站可以通过重定向解决资源请求问题,但也只是部分。

    1
    2
    3
    4
    5
    location /other/ {
    proxy_pass http://other_server/;
    proxy_set_header Host $host:$server_port;
    proxy_redirect / /other/;
    }
  • $host:$server_port必不可少,因为我们使用的是内网穿透,端口自然不能自定义。加上这个,才能在网页内跳转的时候获取正确的url。

参考文章