使用Nginx搭建文件服務(wù)器的全過(guò)程
為什么選擇 Nginx 作為文件服務(wù)器
1.性能優(yōu)勢(shì)
- 高并發(fā)處理 - 輕量級(jí),支持大量并發(fā)連接
- 低資源消耗 - 內(nèi)存占用少,CPU使用率低
- 靜態(tài)文件服務(wù) - 專(zhuān)門(mén)優(yōu)化過(guò)的靜態(tài)文件傳輸
- 高穩(wěn)定性 - 長(zhǎng)期運(yùn)行穩(wěn)定可靠
2.功能特性
- 簡(jiǎn)單的配置 - 配置文件簡(jiǎn)潔明了
- HTTP基本認(rèn)證 - 內(nèi)置訪(fǎng)問(wèn)控制
- 目錄瀏覽 - 自動(dòng)顯示目錄內(nèi)容
- 防盜鏈 - 防止他人盜用資源
基礎(chǔ)配置
1.安裝 Nginx
# Ubuntu/Debian sudo apt update sudo apt install nginx # CentOS/RHEL sudo yum install nginx # 或者使用 dnf (較新版本) sudo dnf install nginx # Windows # 下載安裝包并運(yùn)行
2.基本文件服務(wù)器配置
# /etc/nginx/sites-available/fileserver
server {
listen 80;
server_name your-domain.com; # 或者使用IP地址
# 文件服務(wù)器根目錄
location / {
root /var/www/files; # 指定文件存儲(chǔ)目錄
autoindex on; # 啟用目錄瀏覽
autoindex_exact_size off; # 文件大小顯示為人類(lèi)可讀格式
autoindex_localtime on; # 顯示本地時(shí)間而非GMT時(shí)間
# 設(shè)置基本認(rèn)證(可選)
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/.htpasswd;
}
# 限制訪(fǎng)問(wèn)日志(可選)
access_log /var/log/nginx/fileserver_access.log;
error_log /var/log/nginx/fileserver_error.log;
}
3.創(chuàng)建認(rèn)證文件
# 安裝htpasswd工具 sudo apt install apache2-utils # Ubuntu/Debian # 或 sudo yum install httpd-tools # CentOS/RHEL # 創(chuàng)建用戶(hù)和密碼文件 sudo htpasswd -c /etc/nginx/.htpasswd username # 系統(tǒng)會(huì)提示輸入密碼
高級(jí)配置
1.HTTPS 配置
server {
listen 443 ssl http2;
server_name your-domain.com;
ssl_certificate /path/to/your/certificate.crt;
ssl_certificate_key /path/to/your/private.key;
# SSL 安全配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
location / {
root /var/www/files;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
# 限制文件上傳大小
client_max_body_size 100M;
}
}
# HTTP 重定向到 HTTPS
server {
listen 80;
server_name your-domain.com;
return 301 https://$server_name$request_uri;
}
2.防盜鏈配置
server {
listen 80;
server_name your-domain.com;
location /files/ {
root /var/www;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
# 防盜鏈配置
valid_referers none blocked server_names *.your-domain.com;
if ($invalid_referer) {
return 403;
}
}
}
3.壓縮傳輸
server {
listen 80;
server_name your-domain.com;
# 啟用Gzip壓縮
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
location / {
root /var/www/files;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
}
4.自定義文件類(lèi)型處理
server {
listen 80;
server_name your-domain.com;
# 自定義MIME類(lèi)型
location ~* \.pdf$ {
root /var/www/files;
add_header Content-Type application/pdf;
add_header Content-Disposition attachment;
}
location ~* \.(jpg|jpeg|png|gif)$ {
root /var/www/files;
expires 30d; # 緩存30天
add_header Cache-Control "public, immutable";
}
location ~* \.txt$ {
root /var/www/files;
add_header Content-Type text/plain;
}
}
完整的生產(chǎn)環(huán)境配置
# /etc/nginx/sites-available/fileserver.conf
upstream fileserver_backend {
server 127.0.0.1:8080; # 如果需要反向代理到應(yīng)用服務(wù)器
}
server {
listen 80;
listen [::]:80;
server_name your-domain.com;
# 重定向到HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name your-domain.com;
# SSL證書(shū)配置
ssl_certificate /path/to/certificate.crt;
ssl_certificate_key /path/to/private.key;
ssl_trusted_certificate /path/to/ca.crt;
# SSL安全配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# 安全頭
add_header X-Frame-Options DENY always;
add_header X-Content-Type-Options nosniff always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Strict-Transport-Security "max-age=63072000" always;
# 文件上傳限制
client_max_body_size 100M;
# 靜態(tài)文件服務(wù)
location / {
root /var/www/files;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
# 緩存靜態(tài)文件
expires 1d;
add_header Cache-Control "public, immutable";
# 防盜鏈
valid_referers none blocked server_names *.your-domain.com;
if ($invalid_referer) {
return 403;
}
}
# 特定目錄配置
location ^~ /private/ {
root /var/www;
auth_basic "Private Area - Authorization Required";
auth_basic_user_file /etc/nginx/.htpasswd;
}
# 日志配置
access_log /var/log/nginx/fileserver_access.log;
error_log /var/log/nginx/fileserver_error.log;
}
# 服務(wù)狀態(tài)監(jiān)控(可選)
server {
listen 127.0.0.1:8080; # 僅本地訪(fǎng)問(wèn)
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
}
啟用配置
1.啟用站點(diǎn)
# 創(chuàng)建軟鏈接(Ubuntu/Debian) sudo ln -s /etc/nginx/sites-available/fileserver.conf /etc/nginx/sites-enabled/ # 或者直接復(fù)制配置文件 sudo cp /etc/nginx/sites-available/fileserver.conf /etc/nginx/conf.d/fileserver.conf # 測(cè)試配置 sudo nginx -t # 重新加載配置 sudo systemctl reload nginx # 或 sudo nginx -s reload
2.創(chuàng)建文件目錄
# 創(chuàng)建文件存儲(chǔ)目錄 sudo mkdir -p /var/www/files sudo chown www-data:www-data /var/www/files sudo chmod 755 /var/www/files # 或者使用自定義目錄 mkdir -p ~/shared-files # 在配置中使用絕對(duì)路徑
文件上傳功能(配合后端)
1.Nginx 配置(配合后端處理上傳)
server {
listen 80;
server_name your-domain.com;
# 文件上傳處理(需要后端應(yīng)用)
location /upload {
proxy_pass http://127.0.0.1:3000; # 后端應(yīng)用地址
client_max_body_size 100M;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# 文件訪(fǎng)問(wèn)
location /files/ {
root /var/www;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
}
2.簡(jiǎn)單的上傳頁(yè)面
<!DOCTYPE html>
<html>
<head>
<title>文件上傳</title>
</head>
<body>
<h2>文件上傳</h2>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" required>
<button type="submit">上傳</button>
</form>
</body>
</html>
安全配置
1.訪(fǎng)問(wèn)控制
# IP白名單
location / {
root /var/www/files;
allow 192.168.1.0/24; # 允許特定IP段
allow 127.0.0.1;
deny all; # 拒絕其他所有IP
autoindex on;
}
# 基本認(rèn)證
location /protected/ {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
}
2.防止惡意文件上傳
# 禁止執(zhí)行腳本文件
location ~* \.(php|pl|py|jsp|asp|sh|cgi)$ {
deny all;
return 404;
}
# 限制上傳文件類(lèi)型
location /uploads {
location ~* \.(jpg|jpeg|png|gif|pdf|doc|docx|txt|zip|rar)$ {
# 允許的文件類(lèi)型
}
location ~* \.(php|html|htm|js|css)$ {
deny all;
return 404;
}
}
性能優(yōu)化
1.緩存配置
# 啟用文件緩存
location / {
root /var/www/files;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
# 設(shè)置緩存
expires 1y;
add_header Cache-Control "public, immutable";
# 啟用sendfile
sendfile on;
tcp_nopush on;
tcp_nodelay on;
}
2.Gzip壓縮
# 全局啟用Gzip
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_proxied expired no-cache no-store private must-revalidate auth;
gzip_types
text/plain
text/css
text/xml
text/javascript
application/javascript
application/xml+rss
application/json;
管理和監(jiān)控
1.常用命令
# 啟動(dòng)Nginx sudo systemctl start nginx # 停止Nginx sudo systemctl stop nginx # 重啟Nginx sudo systemctl restart nginx # 重載配置 sudo systemctl reload nginx # 檢查配置 sudo nginx -t # 查看狀態(tài) sudo systemctl status nginx
2.日志查看
# 查看訪(fǎng)問(wèn)日志
sudo tail -f /var/log/nginx/access.log
# 查看錯(cuò)誤日志
sudo tail -f /var/log/nginx/error.log
# 統(tǒng)計(jì)訪(fǎng)問(wèn)量
sudo awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
總結(jié)
使用 Nginx 作為文件服務(wù)器的優(yōu)勢(shì):
- 高性能 - 靜態(tài)文件服務(wù)效率極高
- 配置簡(jiǎn)單 - 配置文件直觀(guān)易懂
- 功能豐富 - 支持認(rèn)證、防盜鏈、緩存等
- 安全可靠 - 企業(yè)級(jí)穩(wěn)定性
- 資源占用少 - 輕量級(jí),適合各種規(guī)模部署
Nginx 是搭建文件服務(wù)器的理想選擇,特別適合用于靜態(tài)文件分發(fā)、內(nèi)網(wǎng)文件共享、CDN節(jié)點(diǎn)等場(chǎng)景。
以上就是使用Nginx搭建文件服務(wù)器的全過(guò)程的詳細(xì)內(nèi)容,更多關(guān)于Nginx搭建文件服務(wù)器的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Nginx強(qiáng)制跳轉(zhuǎn)Https(Http訪(fǎng)問(wèn)跳轉(zhuǎn)Https)
這篇文章主要為大家介紹了Http訪(fǎng)問(wèn)強(qiáng)制跳轉(zhuǎn)到Https的幾種方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
windows下nginx的安裝使用及解決80端口被占用nginx不能啟動(dòng)的問(wèn)題
這篇文章主要給大家介紹了關(guān)于windows下nginx的安裝使用,以及如何解決80端口被占用導(dǎo)致nginx不能啟動(dòng)的問(wèn)題,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-04-04
windows10 系統(tǒng)配置nginx文件服務(wù)器的圖文教程
這篇文章主要介紹了windows10 系統(tǒng)配置nginx文件服務(wù)器的圖文教程,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
Nginx學(xué)習(xí)之如何搭建文件防盜鏈服務(wù)的方法示例
這篇文章主要介紹了Nginx學(xué)習(xí)之如何搭建文件防盜鏈服務(wù)的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
nginx配置之部署后刷新產(chǎn)生404錯(cuò)誤的解決
文章總結(jié):在前端部署過(guò)程中遇到瀏覽器刷新出現(xiàn)nginx_error的問(wèn)題,通過(guò)配置nginx.conf文件中的try_files指令來(lái)解決,針對(duì)單頁(yè)面應(yīng)用的邏輯問(wèn)題,確保登錄頁(yè)面的邏輯正確處理會(huì)話(huà)存儲(chǔ)中的token,以避免頁(yè)面刷新后回到登錄頁(yè)面的情況2026-02-02
nginx后端節(jié)點(diǎn)的健康檢查和nginx平滑升級(jí)方式
本文介紹了Nginx反向代理的ngx_http_proxy_module和ngx_http_upstream_module模塊,以及淘寶開(kāi)發(fā)的nginx_upstream_check_module模塊,并介紹了Nginx平滑升級(jí)原理及實(shí)戰(zhàn)操作,最后總結(jié)了Nginx版本升級(jí)的方法2026-04-04
使用nginx實(shí)現(xiàn)ssh跳板機(jī)方式
文章介紹了如何使用Docker Compose在跳板機(jī)上安裝Nginx,并配置Nginx作為T(mén)CP流量的轉(zhuǎn)發(fā)器,文中提到配置NGINX支持STREAM模塊,并在`nginx.conf`文件中添加stream塊來(lái)實(shí)現(xiàn)TCP流量轉(zhuǎn)發(fā),需要注意的是,該方法不適合生產(chǎn)環(huán)境,存在安全風(fēng)險(xiǎn)2026-01-01
nginx部署二級(jí)目錄無(wú)法加載css和js的問(wèn)題及解決過(guò)程
文章描述了React+UmiJS項(xiàng)目部署到Nginx二級(jí)目錄時(shí)遇到的404和靜態(tài)資源加載問(wèn)題,因Nginx路徑配置錯(cuò)誤導(dǎo)致,通過(guò)調(diào)整.umirc.ts文件,修正了資源路徑,最終實(shí)現(xiàn)正常部署2025-09-09
nginx 配置特定IP訪(fǎng)問(wèn)的實(shí)現(xiàn)
本文主要介紹了nginx 配置特定IP訪(fǎng)問(wèn)的實(shí)現(xiàn),通過(guò)合理設(shè)置Nginx的配置文件,管理員可以根據(jù)實(shí)際需求,靈活地控制對(duì)網(wǎng)站資源的訪(fǎng)問(wèn),提高網(wǎng)站的安全性,感興趣的可以了解一下2024-01-01

