搞一个http文件服务器

就像这种效果,可以在局域网内分享文件,其他人还可以上传,就像ftp那样。

有了它,可以在内网种非常简便的给别人发文件,不再需要某些用户量非常庞大还很恶心的“流氓软件”。

正文开始

文件服务器部分

这个东西分为两个部分,一是文件服务器程序,二是web服务器nginx(主要用于反向代理)

先来搞http文件服务器程序,在GitHub上看到的一个1.8k Star的一个Go程序

codeskyblue/gohttpserver: The best HTTP Static File Server, write with golang+vue (github.com)

点开链接把他下载下来。

Windows版本竟然也使用了tar.gz格式。无大碍,找个解压缩软件把它解压出来,只要这个exe文件即可。然后在电脑上找一个安装位置把他存下来。

然后直接打开它测试一下,这时候会弹出一个防火墙是否放行,一定要选择允许,否则就废了,不允许的话只有你自己可以访问这个网页。然后需要把你当前连接的网络设置成专用网络,前提是你信任你正在使用的网络,它不会导致你的电脑出现网络安全问题。

如果你忘了点击防火墙的允许访问,可以把这个程序删掉,重新解压,换个文件名再打开。

根据命令行提示的内容,这个程序占用的是8000端口(每个人有可能不一样),在浏览器中打开http://localhost:8000/,像下面这样,说明软件运行正常。

然后进行下一步,把这个软件安装成系统服务,这样就可以实现开机自启并后台运行。

安装服务前先看一下程序的运行参数。

我的需求是别的可以看到我的文件,也可以给我上传文件。所以不加访问验证,启用上传文件功能。

根据这些需求来添加一些启动参数。

./httpserver.exe --root "D:\httpServerFile" --upload

在命令行中测试一下是否生效。

可以的话继续,把这个程序安装成一个系统服务。

推荐一个自动化安装为系统服务的程序,属于是Instsrv.exe和srvany.exe的GUI版本,操作起来比较简单。

cxwl3sxl/AnyExeToService: install any exe program to window service (github.com)

像下面这样设置,然后点击安装。

在软件下方的输出中查看是否安装成功,成功了之后,在浏览器中访问一下。

好啦,现在文件服务器就已经安装成功了,如果不需要域名的话,可以直接IP+端口号访问了,如果学校局域网访问的话,可以在宿舍路由器搞一个端口映射。

nginx反向代理部分

下面是nginx反向代理通过域名访问的方法。

在nginx官网上下载下来,解压到你要安装的目录。

然后再用 AnyExeToService.exe 把他安装成系统服务

找到nginx的配置文件

添加文件服务器的反向代理配置

http{


# server的配置修改成一下内容,填入你想要的域名,如果有
 server {
        # listen       443 ssl; # 如果开启了https,请打开监听443端口
        # listen      [::]:1213 ssl; # 监听ipv6和ipv6的端口。
        listen 80;
        server_name your-domain-name.com; # 你要使用的域名

        location / {
        proxy_pass http://127.0.0.1:8800; # http文件服务器的IP
        proxy_redirect off;
        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 0; # disable upload limit
        # Https相关配置
        # ssl_certificate   D:\File\certificate.pem;
        # ssl_certificate_key  D:\File\certificate.key;

        ssl_protocols        TLSv1.2 TLSv1.3;
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        }
    }

}

如果要使用ipv6,那么不要使用80和443端口,法律原因,因为服务器未备案。

配置完成之后,进入服务管理重启nginx,把域名解析到你的内网IP。然后可以通过域名访问了。

内网访问可以不用配置ssl,传输安全问题按情况可以忽略。

如果内网IP经常变化,可以在电脑上安装一个ddns服务。

jeessy2/ddns-go: 简单好用的DDNS。自动更新域名解析到公网IP(支持阿里云、腾讯云dnspod、Cloudflare、华为云、百度云、porkbun) (github.com)

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
上一篇
下一篇