Appleex
Appleex
Published on 2023-09-07 / 372 Visits
0
0

运维 | Nginx 配置文件访问与下载

Nginx 配置文件访问与下载

介绍

因为服务器上堆积了很多文件,有时候需要查看或下载,每次都要到服务器很不方便。

可能有小伙伴会说可以使用一些文件工具或者搭建文件系统等等,不过我觉得看个人需求吧

本章节主要简单的介绍使用 nginx 托管文件,实现文件访问与下载。

使用

默认配置

初始化安装 nginx 后,会生成默认的配置,其中

全局配置文件路径一般为: /etc/nginx/nginx.conf

user  nginx;  # 指定nginx运行的用户
worker_processes  auto;  # 自动设置工作进程的数量

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;  # 每个工作进程的最大连接数
}


http {
    include       /etc/nginx/mime.types;  # 包含MIME类型配置文件
    default_type  application/octet-stream;  # 默认MIME类型

    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;  # 禁用Nagle算法

    keepalive_timeout  65;  # 客户端连接保持超时时间

    #gzip  on;  # 开启gzip压缩

    include /etc/nginx/conf.d/*.conf;  # 包含其他配置文件
}

默认配置文件路径一般为:/etc/nginx/conf.d/default.conf

server {
    listen       80;  # 指定监听的端口
    listen  [::]:80;
    server_name  localhost;  # 指定主机名

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;  # 根目录
        index  index.html index.htm;  # 默认索引文件
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

配置文件解析:

# 主要结构
user
worker_processes
events {}
http {
	server {
		location / {}
	}
}

# 全局配置段 (user, worker_processes, events): 指定nginx运行的用户、设置工作进程数量、定义事件模块(如最大连接数)
# http块: 包含HTTP服务器的配置,包括MIME类型、默认类型、日志格式、访问日志位置、文件传输模式、TCP优化、保持连接超时、gzip压缩等。
# server块: 定义一个虚拟主机(server),监听指定端口,处理指定主机的请求。
# location块:处理URI路径,指定根目录和默认索引文件。
# ...

文件配置

注意:下方注释了很多配置参数,仅作为测试,可自行查阅网络资料按需选用

http{
    server{
    	# 根配置
    	location / {
    		root /usr/share/nginx/html;  # 根目录
    		# alias   /usr/share/nginx/html;
    		
    		index index.html index.htm;  # 默认索引文件
      		try_files $uri $uri/ /index.html last;
    	}
    	
    	# 多文件配置
        location ^~ /files/ {
                alias  /usr/share/nginx/files/;  # 需要下载的文件存放的目录
                # internal;  # 指令表示只允许nginx内部调用该URL,不允许客户端直接访问,从而保证了下载的安全性
                
                if ($request_filename ~* ^.*?\.(html|doc|pdf|zip|docx|txt)$) {
                    add_header Content-Disposition attachment;
                    add_header Content-Type application/octet-stream;
                }
                
                sendfile on;  # 开启高效文件传输模式
                # tcp_nopush on;  # 该指令必须在 sendfile 打开的状态下才会生效,主要是用来减少发送数据包的数量,提高网络包的传输效率
                # tcp_nodelay on;  # 该指令必须在keep-alive连接开启的情况下才生效,来提高网络包传输的实时性
                
                autoindex on;  # 开启目录文件列表
                autoindex_exact_size on;  # 显示出文件的确切大小,单位是bytes
                autoindex_localtime on;  # 显示的文件时间为文件的服务器时间
                charset utf-8,gbk;  # 避免中文乱码
            
                # aio threads;  # 开启异步文件IO,在进行大文件传输时提高效率 
                # gzip    off;  # 关闭gzip压缩,避免影响传输速度 
                # etag    off;  # 关闭etag,避免占用过多CPU资源

    			# client_max_body_size    1G;  # 设置单个连接最大传输文件大小 
			    # client_body_buffer_size      128k;
                # proxy_max_temp_file_size    0;  # 代理缓存文件最大值
                # output_buffers  1 1m;  # 指定块大小,减小内存占用 
                
                # keepalive_timeout 65;  # 客户端连接保持超时时间
                # keepalive_requests 100000;
                # limit_req zone=baism burst=5 nodelay;
                # limit_conn addr 1;  # 只能同时建立一个链接
                # limit_rate 128k;  # 最大传输速率
                # limit_rate_after 250m;  # 超过250m限制传输速率
        }
        
        # 单文件配置
        location ^~ /files-part/ { 
            internal; 
            alias /usr/share/nginx/files/; 
            
            # 单个连接速率限制 
            limit_rate 10M; 
        } 
    }
}

配置进程数和连接数:

worker_processes  4;  # 进程数
worker_cpu_affinity 0001 0010 0100 1000;  # 为每个进程分配cpu

events {
    use                 epoll;  # 使用epoll的I/O模型,用这个模型来高效处理异步事件
    worker_connections  65535;  # 每个进程允许的最多连接数
    multi_accept        on;  # 接受多个新连接
}
...

http {
    ...
    sendfile        on;
    #tcp_nopush     on;
    ...
}

注意:以上内容仅作为参考示例,通过配置进程数和连接数在一定程度上可以提高性能(高并发),不过需要对服务器配置有一定了解和要求,否则会起反作用,具体可以查阅网络资料。

FAQ

参考文献


Comment