编译源码包
准备安装编译所用的依赖和工具
$ sudo yum -y install make zlib zlib-devel gcc gcc-c++ libtool openssl openssl-devel wget pcre pcre-devel git
解压并安装
$ ls -l nginx-1.20.2.tar.gz
$ tar -zxvf nginx-1.20.2.tar.gz
$ cd nginx-1.20.2/
# 这里开始编译指定功能,--help可以查看开启或关闭哪些模块
# 这里开启了https需要的ssl模块和nginx 状态查看模块
$ ./configure --with-http_ssl_module --with-http_stub_status_module
# 编译成文件 并且 拷贝到指定目录,默认拷贝到/usr/local/nginx
$ make && make install
$ ls /usr/local/nginx
# 执行并测试
$ /usr/local/nginx/sbin/nginx
# 查看nginx端口
$ sudo lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 907 root 6u IPv4 30218 0t0 TCP *:http (LISTEN)
nginx 908 nobody 6u IPv4 30218 0t0 TCP *:http (LISTEN)
$ ss -tnl | awk '/80\>/'
LISTEN 0 128 *:80 *:*
$ curl 127.0.0.1
# 关闭nginx服务
$ killall -9 nginx
注意:这里 nginx服务暂通过命令启动和通过kill杀进程来关闭。因此需要一个.service文件来注册成系统服务才便于管理。
配置注册成系统服务
$ 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
# 然后使用systemd来管理
# 启动服务
$ systemd start nginx
# 查看系统状态
$ ssytemd status nginx
# 关闭服务
$ systemd stop nginx
# 设置开启自动启动
$ systemd enable nginx
# 取消开启自动启动
$ systemd disable nginx
启动一个filebrowser网盘服务
注:一个golang语言编写的http协议的web应用。
# 解压并安装
sudo tar zxvf linux-amd64-filebrowser.tar.gz
sudo cp filebrowser /usr/sbin/
ls -l /usr/sbin/filebrowser
# 使用--help可以查看使用
# 查看选项命和命令
$ /usr/sbin/filebrowser --help
# 查看子命令config的使用
$ /usr/sbin/filebrowser config --help
# 开始配置,写成sh脚本
$ vim setup-fb.sh
# 初始化数据库,-d指定数据库路径
filebrowser -d /data/fb/filebrowser.db config init
# 设定开启路由监听的地址
filebrowser -d /data/fb/filebrowser.db config set --address 0.0.0.0
# 设定开启的端口
filebrowser -d /data/fb/filebrowser.db config set --port 8088
# 语言支持及日志文件指定
filebrowser -d /data/fb/filebrowser.db config set --locale zh-cn
filebrowser -d /data/fb/filebrowser.db config set --log /var/log/filebrowser.log
# 添加网盘的用户及密码
filebrowser -d /data/fb/filebrowser.db users add admin abc123456 --perm.admin
# 设定网盘的上传文件存储路径
filebrowser -d /data/fb/filebrowser.db config set --root /data1/fb
同样注册filebrowser为一个系统服务
$ cat /etc/systemd/system/fb.service
[Unit]
Description=The fileborwser 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
# 然后使用systemd来管理
# 启动服务
$ sudo systemd start fb
# 查看8088端口是否开启
$ ss -tnl | awk '/8088\>/'
LISTEN 0 128 [::]:8088 [::]:*
浏览器访问8088
登录,使用脚本命令里配置的用户密码
上传文件
配置http protocol反向代理filebrowser
注意:在http中的server段里配置,location /表示访问网站根目录代理到8088端口,也就是fb服务。
$ sudo vim /usr/local/nginx/conf/nginx.conf
.....
http {
...
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
# location / {
# root html;
# index index.html index.htm;
# }
location / {
proxy_pass http://127.0.0.1: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服务
$ sudo systemctl restart nginx
$ sudo systemctl reload nginx
再次访问80端口
再次上传文件测试
上传一个小文件
再上传一个大文件
这里上传文件出现错误, 查看nginx日志
$ tail -n 1 /usr/local/nginx/logs/error.log
2023/02/09 13:42:14 [error] 15737#0: *15 client intended to send too large body: 32233760 bytes, client: 10.0.2.2, server: localhost, request: "POST /api/resources/scrt_sfx801-x64.exe?override=false HTTP/1.1", host: "127.0.0.1", referrer: "http://127.0.0.1/files/"
注:client intended to send too large body: 32233760 bytes,这个提示请求过大,也就是上传的文件过大,在未配置nginx代理通过fb 8088访问是默认无限制,但经过nginx代理却有显示。
在http配置段,server段之前配置最大请求体的大小,这里配置500m:
client_max_body_size 500m;
$ sudo vim /usr/local/nginx/conf/nginx.conf
..........
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
# 在http配置段,server段之前配置最大请求体的大小,这里配置500m
client_max_body_size 500m;
server {
listen 80;
......
配置nginx后重启再测试
这里发现上传成功了,可以查看 /data1/fb 中是否有文件。
$ ls /data1/fb/
scrt_sfx801-x64.exe scrt_sfx801-x86.exe test.txt
配置ssl自签证书,https协议、域名访问
CA
# 自建CA
cd /etc/pki/CA
# 生成密钥
openssl genrsa -out private/cakey.pem 2048
# 生成CA证书
openssl req -new -x509 -nodes -key private/cakey.pem -days 730 -out cacert.pem
# 增量序号,新认证一个会自增
touch index.index
echo 01 > serial
nginx 申请证书
openssl genrsa -out server.pem 2048
openssl req -new -nodes -key server.pem -out server.csr
这里是同一机器,如果不是同一台,把.csr拷到CA所在服务器
openssl ca -in server.csr -days 365 -out server.crt
然后server.pem(私钥), server.crt证书放到nginx的conf目录,进行配置
$ cd /usr/local/nginx/conf/
$ ls server.*
server.crt server.pem
# 配置nginx https协议,http中添加一个server 段
$ vim nginx.conf
...
server {
listen 443 ssl;
server_name www.test.com;
ssl_certificate server.crt;
ssl_certificate_key server.pem;
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://www.test.com: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;
}
}
...
使用/etc/hosts来进行域名测试,添加本机执行127.0.0.1,也可以设定指定ip
$ tail /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 www.test.com
给firefox浏览器添加CA证书为信任的根证书。也就是cacert.pem文件
启动服务,通过https:// sheme访问,会代理到8088