Firefox Send-临时文件分享服务部署 - Newlearnerの小站
- 获取链接
- X
- 电子邮件
- 其他应用
Firefox Send-临时文件分享服务部署
Newlearner365 最后修改:2019-08-5 10:18
Contents [隐藏]
最近火狐的一个项目Firefox Send在TG又火了一把,自从去年开始内测之后,最近Mozilla正式上线了该服务。该服务旨在提供简单、私密的文件分享服务,不登录火狐账户可以上传分享不超过1G的文件,登录火狐之后可以上传分享不超过2.5G的文件。且火狐承诺该服务是端到端的,分享链接可加密,到期即焚,十分安全。
要强调的是Firefox Send下载被分享文件是先在浏览器下载,再拷贝至桌面,通过抓包也能验证其安全性和不可获得直链的事实。
以上是官方提供的网址,刚好我看见其中有github开源的项目,于是开始了自建Firefox Send服务的探索。
交流群:Newlearnerの水群
准备工作
What I need
1、一台有公网ip的服务器
2、Node.js 10.0+
3、Redis server(可选)
4、nginx(可选,如果你想要绑定域名)
5、一些依赖
部署
安装Nodejs
1
2
3
4
5
6
7
|
#centos
curl --silent --location https://rpm.nodesource.com/setup_10.x | bash -
yum -y install nodejs
#debian
curl -sL https://deb.nodesource.com/setup_10.x | bash -
apt install nodejs
|
可用node -v
和npm -v
查看安装的版本号
安装Redis
1
2
3
4
5
6
7
8
9
|
#centos
yum -y install redis
systemctl start redis
systemctl enable redis
#debian
apt install redis-server
systemctl start redis-server
systemctl enable redis-server
|
安装Nginx
既然有兴趣做这个网页服务的人我想大都了解lnmp。以下过程也基于lnmp一键的环境,如果对其他并无要求,单独安装nginx即可。
安装其他
1
2
3
4
5
6
|
#centos
yum install screen
yum -y groupinstall "Development Tools"
#debian
apt install make gcc g++ screen
|
Git项目并安装运行
1
2
3
4
5
6
7
|
git clone https://github.com/mozilla/send.git
cd send
npm install
screen -S send
npm start
最后Ctrl+A+D退出screen窗口,该项目会在后台一直运行
|
此时通过浏览器访问https://yourserverip:8080即可
绑定域名
绑定域名我觉得是常规操作,毕竟ip难记且不容易被大家接受,所以我们需要用到nginx。
修改Webpack.config.js
因为新版的webpack-dev-server
出于安全考虑,默认检查hostname
,如果hostname
不是配置内的,将中断访问。所以我们要在Git项目并安装运行这一步之前修改webpack.config.js
文件的配置参数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#进入send文件夹,ls显示全部内容,即可发现Webpack.config.js
vi Webpack.config.js
#修改为以下内容(节选部分)
#在其中加入一行 disableHostCheck: true;
devServer: {
before:
process.env.NODE_ENV === 'development' && require('./server/bin/dev'),
compress: true,
hot: false,
disableHostCheck: true,
host: '0.0.0.0',
proxy: {
'/api/ws': {
target: 'ws://localhost:8081',
ws: true,
secure: false
}
}
}
|
书写nginx配置文件
在修改完上一步配置并成功运行服务之后,我们在相应位置增加相应的nginx配置。以lnmp一键配置https为例,在usr/local/nginx/conf/vhost
当中增加一个域名.conf
。内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
server
{
listen 80;
server_name domain ;
return 301 https://domain$request_uri;
access_log off;
}
server
{
listen 443 ssl http2;
server_name domain ;
ssl on;
ssl_certificate /usr/local/nginx/conf/ssl/domain/fullchain.cer;
ssl_certificate_key /usr/local/nginx/conf/ssl/domain/cloud.newlearner.tk.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
ssl_session_cache builtin:1000 shared:SSL:10m;
location /api/ws {
proxy_redirect off;
proxy_pass http://0.0.0.0:8081;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
location / {
proxy_pass http://0.0.0.0:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
access_log off;
}
|
直接通过443端口访问服务,如果你只想用http,简单修改即可。
其中的坑
因为我自己也是第一次用nodejs,踩坑无数,和大家分享下。
其一就是webpack.config.js
,如果不修改参数关闭自动检查,绑定域名之后无法访问。我一度认为是我的nginx配置文件写错了。
其二是文件上传,Firefox Send用websocket传输,并且可以从webpack.config.js
devserver里面看到端口是8081。我们用nginx之后,如果不配置,会报404错误。也就是网页打得开,文件无法上传。我从伟大的项目Project V获得灵感,在nginx里面加入:
1
2
3
4
5
6
7
8
|
location /api/ws {
proxy_redirect off;
proxy_pass http://0.0.0.0:8081;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
|
(o゜▽゜)o☆[BINGO!],最后不要忘记开放相关端口~
参考文章:Stackoverflow invaild-host-header
Tags: published
November 27, 2019 at 08:46PM
Open in Evernote
评论
发表评论