目录
一、源码编译安装nginx并部署私人网盘系统
1、源码编译、安装nginx
2.编写nginx启动脚本
3.管理nginx服务
4.安装并配置网盘程序
5.启动与管理网盘系统
6.检验
?二、使用nginx实现私人网盘安全代理
1.反向代理
?编辑?2.正向代理
?编辑?3.部署nginx实现反向代理?
4.验证
5.可能会遇到的问题
?三、使用nginx实现https加密传输
1.搞懂http与https
2.阿里云申请ssl证书
?3.绑定ssl证书到nginx
4.验证
一、源码编译安装nginx并部署私人网盘系统
1、源码编译、安装nginx
也可以看我这篇文章:Linux CentOS 7 下安装Nginx详细过程
部署步骤如下:?
(1)安装依赖和工具
[root@Server00 ~]# yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel wget pcre pcre-devel git
(2)将 linux-amd64-filebrowser.tar.gz 和 nginx-1.20.2.tar.gz 上传至/home/nginx_tar并解压nginx
[root@Server00 ~]# mkdir -p /home/nginx_tar
[root@Server00 ~]# cd /home/nginx_tar/
[root@Server00 nginx_tar]# tar -zxvf nginx-1.20.2.tar.gz
(3)编译安装
[root@Server00 nginx_tar]# cd nginx-1.20.2
[root@Server00 nginx-1.20.2]# ./configure --with-http_stub_status_module --with-http_ssl_module
[root@Server00 nginx-1.20.2]# make && make install
# --with-http_ssl_module 启用ssl证书
nginx编译完成后,默认安装路径为/usr/local/nginx
2.编写nginx启动脚本
[root@Server00 nginx]# vim /etc/systemd/system/nginx.service
#输入下面代码
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/bin/rm -f /usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
[Install]
WantedBy=multi-user.target
3.管理nginx服务
接着,就可以通过systemctl管理nginx服务了。
systemctl start nginx #启动nginx服务
systemctl stop nginx #关闭nginx服务
systemctl reload nginx #重载nginx服务
systemctl enable nginx #设置nginx服务开机自启动
systemctl status nginx #查看nginx服务运行状态
4.安装并配置网盘程序
filebrowser 是一个使用go语言编写的软件,功能是可以通过浏览器对服务器上的文件进行管理。可以是修改文件,或者是添加删除文件,甚至可以分享文件,是一个很棒的文件管理器,你甚至可以当成一个网盘来使用。总之使用非常简单方便,功能很强大。
下载地址:https://github.com/filebrowser/filebrowser/releases 官方文档:Welcome - File Browser
(1)安装网盘系统
[root@Server00 ~]# cd /home/nginx_tar/
[root@Server00 nginx_tar]# tar -zxvf linux-amd64-filebrowser.tar.gz
[root@Server00 nginx_tar]# cp filebrowser /usr/sbin/ # 将网盘主程序文件复制到sbin目录
(2)配置网盘系统
[root@Server00 nginx_tar]# mkdir -p /data/fb
[root@Server00 /]# filebrowser -d /data/fb/filebrowser.db config init
# 初始化
[root@Server00 /]# filebrowser -d /data/fb/filebrowser.db config set --address 0.0.0.0
# 绑定网卡,任何人都可以访问
[root@Server00 /]# filebrowser -d /data/fb/filebrowser.db config set --port 8088
# 配置网盘系统访问的端口为8088,可自定义
[root@Server00 /]# filebrowser -d /data/fb/filebrowser.db config set --locale zh-cn
# 设置语言为简体中文
[root@Server00 /]# filebrowser -d /data/fb/filebrowser.db config set --log /var/log/filebrowser.log
# 设置日志存放路径
(3)设置网盘系统登录用户名和密码
[root@Server00 /]# filebrowser -d /data/fb/filebrowser.db users add admin abc123456 --perm.admin
上面创建了一个用户是admin,密码是abc123456的管理员账号 (4)设置网盘系统共享数据目录
[root@Server00 /]# mkdir -p /data1/fb
[root@Server00 /]# filebrowser -d /data/fb/filebrowser.db config set --root /data1/fb
以后网盘上传的数据会自动放在/data1/fb目录下。
5.启动与管理网盘系统
Linux下管理一个服务有两种方式: (1)手动直接启动
要运行网盘系统,可执行如下命令:
[root@server1 filebrowser]# nohup filebrowser -d /data/fb/filebrowser.db >/dev/null 2>&1 &
#停止网盘系统,执行如下命令:
[root@server1 filebrowser]# kill -9 $(pidof filebrowser)
#设置服务开机自启动:
[root@server1 filebrowser]# echo 'nohup filebrowser -d /data/fb/filebrowser.db >/dev/null 2>&1 &' >>/etc/rc.local
[root@server1 filebrowser]# chmod +x /etc/rc.d/rc.local
(2)通过systemctl管理服务?
编写systemd服务脚本管理网盘系统,脚本内容如下:
[root@Server00 /]# vim /etc/systemd/system/fb.service
[Unit]
Description=The filebrowser Process Manager
After=network.target
[Service]
Type=simple
ExecStart=/usr/sbin/filebrowser -d /data/fb/filebrowser.db
ExecStop=/bin/killall filebrowser
PrivateTmp=true
[Install]
WantedBy=multi-user.target
运行:systemctl start fb.service
停止运行:systemctl stop fb.service
开机启动:systemctl enable fb.service
取消开机启动:systemctl disable fb.service
查看运行状态:systemctl status fb.service
6.检验
输入服务器ip:8088,输入前面设置的admin账号密码即可登录。
访问不了则关闭防火墙:
[root@Server00 /]# systemctl stop firewalld.service
[root@Server00 /]# systemctl disable firewalld.service
?二、使用nginx实现私人网盘安全代理
1.反向代理
????????要实现网盘安全稳定运行,我们还需要在网盘前端构建一个反向代理服务器,通过nginx屏蔽网盘系统直接暴露在网上,最大限度保障网盘安全。可见,反向代理保障了服务器的安全。
?2.正向代理
????????正向代理是从客户端的角度出发,服务于特定用户,比如说一个局域网内的客户,以访问非特定的服务,例如当你用浏览器访问国外的网站(谷歌),被拒绝无法访问时,你可以在国外搭建一个代理服务器,这样就可以正常访问了。 ????????正向代理隐藏了用户,用户的请求被代理服务器接收代替,到了服务器,服务器并不知道用户是谁。而反向代理隐藏的是服务器。?
?3.部署nginx实现反向代理?
通过源码安装nginx,默认nginx会安装到/usr/local/nginx路径下,接着,找到nginx配置文件nginx.conf,在 http 段的server段注释掉下面内容:
[root@Server00 /]# vim /usr/local/nginx/conf/nginx.conf
#location / {
# root html;
# index index.html index.htm;
#}
同时,添加如下内容:
location / {
proxy_pass http://192.168.177.128:8088;
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
????????这段内容实现的就是反向代理功能,也就是用户请求先访问nginx,然后nginx通过反向代理功能将请求转发到后端的个人网盘对应的服务端口上。这里192.168.177.128是我安装网盘程序的服务器IP,开放的端口是8088.
4.验证
最后,每次修改完nginx配置文件都需要重新启动nginx服务: systemctl restart nginx 最后,通过nginx所在服务器的80端口http://192.168.177.128直接就可以访问我们的网盘系统了。
5.可能会遇到的问题
????????现在通过nginx反向代理,保障了后端网盘系统的安全,但也会带来一些问题,例如,在网盘系统中上传大文件的时候,可能出现如下错误:
查看nginx日志文件信息:
[root@Server00 /]#?tail -f /usr/local/nginx/logs/error.log
2022/07/17 15:38:06 [error] 305603#0: *199 client intended to send too large body: 605228707 bytes,client: 192.168.177.128, server: localhost, request: "POST/api/resources/harbor-offline-installerv2.3.5.tgz?override=false HTTP/1.1", host: "192.168.177.128", referrer: http://192.168.177.128/files/
这个错误是说,nginx不允许上传这么大的文件.?
要取消这个限制,需要在nginx配置文件nginx.conf中的 http 模块增加如下配置:
client_max_body_size 500m;
其中,client_max_body_size表示允许上传单个文件的最大值,如果你要上传1GB大小的文件, 那么就修改这个值大于1GB。
?三、使用nginx实现https加密传输
1.搞懂http与https
????????HTTP是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全。 ????????HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版本,HTTPS协议是利用SSL+HTTP协议建立安全信道,加密数据包,提供身份认证的网络协议,要比http协议安全。 HTTPS和HTTP的区别: ? http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。 ? http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。 ? 使用https协议需要申请证书,证书有收费和免费的。
现在网站几乎所有都开启了https协议,所以使用https已经是个趋势。
????????个人网盘系统,需要保障数据安全、加密传输,所以,我们还需要设置域名访问网盘,并开启https加密传输。 ????????要实现这个功能,需要申请一个ssl证书,我们可以在阿里云申请一个免费的ssl证书,然后将证书绑定到我们服务器的nginx上,即可实现网盘数据加密传输。
2.阿里云申请ssl证书
前提:已有注册域名阿里域名注册地址
阿里云有一年的免费ssl证书可用,申请方式如下:
阿里云SSL证书购买
验证成功后,点击下载nginx:
?
?解压后有两个证书:
?3.绑定ssl证书到nginx
????????获取证书之后,将证书下载上传到/usr/local/nginx/conf/ssl目录下并绑定到我们服务器的nginx配置上即可,在nginx上配置ssl证书,需要在nginx.conf中 http模块 添加一个 server段,内容如下:
[root@Server00 ~]# mkdir -p /usr/local/nginx/conf/ssl
[root@Server00 /]# vim /usr/local/nginx/conf/nginx.conf
server
{
listen 443 ssl; # https 默认端口
server_name www.startsky.top; # 设置的域名
ssl_certificate ssl/8132331_startsky.top.pem; # 阿里云证书文件
ssl_certificate_key ssl/8132331_startsky.top.key; # 私钥文件
ssl_prefer_server_ciphers on; # 以下是加密算法和强度相关
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "HIGH:!aNULL:!MD5";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-Xss-Protection 1;
# 反向代理
location / {
proxy_pass http://192.168.177.128:8088;
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
4.验证
重启nginx?:systemctl restart nginx
在Windows配置本地域名解析,添加服务器ip和域名:
?
最后,再次通过域名访问网盘,如下图所示:
|