本文仅是个人思路和理解,如果适合你则使用.

因为个人会随时访问图片,视频.office文档等, 本来想到的思路是购买一个阿里云的国内服务器,挂载阿里的OSS对象存储, 这其实是最稳定也是最优的方案, 前提是不需要担心高额的OSS费用支出, 再加上个人备案有些麻烦, 所以就放弃了.

先在自己的openwrt路由上安装好网站, 买几个大容量的硬盘柜, 这其实已经满足了个人网盘的需求, 但是毕竟带端口访问, 如果顺便搭建下其他的网站,比如个人博客,就不太方便了, 直到最近突然想起自己有个搬瓦工的GIA CN2的机器平时就是用于学习科学的, 然后有了思路, 在搬瓦工的机器上安装Nginx反代自己的路由地址就OK啦, 再把静态的资源图片,视频等文件rewrite一下, 国内能直连不用绕一圈访问. 看起来挺简单的,但是其中还是有些曲折, 所以记录一下.

前期准备

在宝塔软件商店搜索KODBOX即可自动完成安装,这时候你应该可以通过自定义端口和域名浏览自己的网盘, 没有特别的需求, 以下步骤可以跳过了.

但是如果你不想通过自定义端口访问,或者有搭建自己博客的需求, 则可以选择继续折腾.

步骤

  • 为了区分, 我们假定把国外的服务器命名为A且网站域名为a.com,负责反代, 路由器命名为B且网站域名为b.com, 负责web服务. 路由B远程访问的域名为c.com
  • 在A里搭建一个空白网站, 域名为a.com. 且a.com解析到A
  • 在B里搭建好真实的网站, 域名为a.com(是的,域名和a.com一样)
  • 在B里添加一个另外的网站a1.com目录绑定至a.com (做伪静态用)
  • 在A里, 设置a.com反代规则
  • 由于B是动态IP地址, 而nginx的反代只解析一次就会把DNS地址保存,以后不会再解析, 所以为了避免因为网络变化而导致不能访问,需要nginx的upstream服务, 参考文章, 配置ngx_http_upstream_dynamic_module(改下模块名字即可)
  • 复制下面代码插入到nginx的conf配置里
#插入到server前
upstream cloudproxy {
    dynamic_resolve fallback=stale fail_timeout=30s;
    server b.com:端口号;
    #如果你没有多服务器做负载均衡,以下2行可忽略
    #server f.com:端口号;
    #check interval=3000 rise=2 fall=5 timeout=1000 type=http;
}
#插入到server里
#设置伪静态 国内直连
location ~ .*\.(gif|jpg|jpeg|png|mp3|mp4|zip|7z|css|js|woff|woff2|ttf)$ {  
     expires 30d;  
     rewrite "^/(.*)$" https://a1.com:端口号/$1;
}

反代

#PROXY-START/
location ~* \.(php|jsp|cgi|asp|aspx)$
{
    set $cloudproxy cloudproxy;
    proxy_pass https://$cloudproxy;
    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 REMOTE-HOST $remote_addr;
    proxy_http_version 1.1; 
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}
location /
{
    set $cloudproxy cloudproxy;
    proxy_pass https://$cloudproxy;
    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 REMOTE-HOST $remote_addr;
    proxy_http_version 1.1; 
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  
    #防跨域配置
    if ($request_method = 'POST') {
          add_header 'Access-Control-Allow-Origin' *;
          add_header 'Access-Control-Allow-Credentials' 'true';
          add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
          add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
      }
    if ($request_method = 'GET') {
          add_header 'Access-Control-Allow-Origin' *;
          add_header 'Access-Control-Allow-Credentials' 'true';
          add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
          add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
    }
    add_header X-Cache $upstream_cache_status;
    #Set Nginx Cache
  
    add_header Cache-Control no-cache;
    expires 12h;
}

#PROXY-END/
最后修改:2021 年 01 月 22 日
如果觉得我的文章对你有用,请随意赞赏