前置准备
1. 环境与工具清单
- 云服务器/本地主机:操作系统为CentOS 7.9/Ubuntu 20.04 LTS(推荐云服务器CentOS 7.9,内网公开可选本地Ubuntu)
- 轻量Web服务器:Nginx 1.20.2(稳定版,无广告、配置简单)
- 轻量静态文件/低权限目录浏览插件:Nginx自带ngx_http_autoindex_module(默认已编译,无需额外安装)
- 工具类:SSH远程连接工具(推荐Xshell 7免费版/VS Code Remote-SSH插件,无需额外配置下载)
- 档案整理规范:先确保本地/服务器上已有的档案按“年度-分类-项目-密级”分层存储,密级仅设“公开”“内部公开”两类(简化权限配置)
2. 服务器登录与基础检查
以VS Code Remote-SSH插件登录CentOS 7.9为例:
- 打开VS Code,按Ctrl+Shift+X,搜索“Remote - SSH”并安装
- 点击左下角绿色“><”图标,选择“Connect to Host”,输入“root@你的服务器公网IP”(内网本地主机用内网IP)
- 输入服务器root密码完成连接,在VS Code终端输入以下命令检查Nginx是否已编译自动索引模块:
```bash
nginx -V 2>&1 | grep autoindex
```
若输出包含“--with-http_autoindex_module”,则满足条件;若没有,参考Nginx官方源码编译文档添加模块即可(本指南默认已满足)
综合档案公布目录结构搭建
权限控制优先级最高,先在服务器根目录下创建分层的档案存储目录,同时设置严格的目录权限:
```bash
根目录下创建统一的档案公布根目录
mkdir -p /data/archives/public
mkdir -p /data/archives/internal
公开目录设置所有用户可读可执行(仅目录,文件单独设644)
chmod 755 /data/archives/public
内部公开目录仅允许root和内部用户组(本指南创建为internal_group)可读可执行
groupadd internal_group
chgrp -R internal_group /data/archives/internal
chmod 750 /data/archives/internal
测试目录结构创建成功
ls -l /data/archives/
```
输出应类似:
```
drwxr-xr-x 2 root root 4096 10月 24 14:30 public
drwxr-x 2 root internal_group 4096 10月 24 14:30 internal
```
Nginx核心配置文件编写
CentOS 7.9默认Nginx配置文件路径为/etc/nginx/nginx.conf,Ubuntu 20.04 LTS默认在/etc/nginx/nginx.conf和/etc/nginx/sites-available/default,本指南以CentOS 7.9为例,Ubuntu用户替换配置路径即可:
```bash
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
```
- 清空原配置文件,粘贴完整、可直接复制的轻量公布服务配置:
```bash
cat > /etc/nginx/nginx.conf << 'EOF'
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/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 /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
公开档案服务配置
server {
listen 80;
server_name 你的服务器公网IP; 替换成实际公网IP或域名
charset utf-8; 解决中文文件名乱码问题
root /data/archives/public;
index index.html index.htm;
location / {
开启目录自动索引
autoindex on;
显示文件字节大小
autoindex_exact_size off;
显示本地时间(而非UTC)
autoindex_localtime on;
允许所有IP访问
allow all;
deny all; 先写deny all再写allow,这里allow覆盖上面,严格写法
}
}
内部公开档案服务配置(带IP白名单)
server {
listen 8080;
server_name 你的服务器公网IP; 替换成实际公网IP或域名
charset utf-8;
root /data/archives/internal;
index index.html index.htm;
location / {
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
严格IP白名单,替换成实际需要访问的内部IP(如192.168.1.0/24代表整个内网段)
allow 192.168.1.0/24;
allow 114.114.114.114;
deny all;
}
}
}
EOF
```

注意:配置中的“你的服务器公网IP”需替换为真实值,内部公开服务的“192.168.1.0/24”“114.114.114.114”也需替换为实际允许的IP地址或段
配置验证与服务启动
```bash
nginx -t
```
若输出类似以下内容,则配置正确:
```
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
```
```bash
CentOS 7.9使用systemctl
systemctl start nginx
systemctl enable nginx 开机自启
```
- 检查CentOS 7.9防火墙是否放行80、8080端口:
```bash
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
```
若使用云服务器,还需登录云服务商控制台(阿里云ECS安全组、腾讯云CVM安全组等)手动放行80、8080的TCP入站规则
档案上传与测试访问
1. 档案上传(以Xshell 7免费版为例)
- 用Xshell 7连接服务器,点击顶部“窗口”→“新建文件传输”打开Xftp 7免费版
- 在Xftp左侧本地窗口找到已整理好的公开/内部档案,右侧服务器窗口分别导航到
/data/archives/public和/data/archives/internal,拖拽上传即可
- 在VS Code终端设置所有上传文件的权限(公开644,内部640):
```bash
chmod -R 644 /data/archives/public/
chgrp -R internal_group /data/archives/internal/
chmod -R 640 /data/archives/internal/
```
2. 访问测试
- 公开档案测试:在任意浏览器输入“http://你的服务器公网IP”,应能看到按时间/名称排序的公开档案目录,点击可直接下载或预览(浏览器支持的格式如PDF、图片、TXT可预览)
- 内部公开档案测试:
- 用配置中白名单内的IP设备(手机连公司WiFi/电脑用公司内网)访问“http://你的服务器公网IP:8080”
- 应能看到内部公开档案目录;用非白名单IP访问,应显示403 Forbidden错误
常见卡壳问题排查
1. 中文文件名乱码
确认Nginx配置中已添加charset utf-8;,同时检查上传的档案文件名是否本身为UTF-8编码(Windows系统下用记事本打开档案→另存为时选“UTF-8”编码重命名文件夹/文件即可)
2. 403 Forbidden错误(白名单外除外)
```bash
ps -ef | grep nginx
```
输出第一行(worker process)的用户应为nginx,若不是,修改nginx.conf第一行的user为nginx后重启
- 检查SELinux是否开启(CentOS 7.9默认开启),临时关闭测试:
```bash
setenforce 0
```
若测试成功,永久关闭需修改/etc/selinux/config文件,将SELINUX=enforcing改为SELINUX=disabled后重启服务器(生产环境建议配置SELinux规则,临时方案适合快速验证)