[转帖]Nginx设置目录浏览模式

nginx,设置,目录,浏览,模式 · 浏览次数 : 0

小编点评

**Nginx目录浏览配置** **步骤 1:创建目录浏览配置文件** ``` sudo nano /etc/nginx/conf.d/directory_browse.conf ``` **配置文件内容:** ```nginx server { listen 18099; listen [::]:18099; location / { root /home/feng; autoindex on; autoindex_exact_size off; autoindex_localtime on; } } ``` **步骤 2:重启 Nginx 服务** ``` sudo systemctl restart nginx.service ``` **使用教程** 1. 创建一个名为 `feng` 的用户。 2. 为用户设置密码。 3. 创建一个名为 `htpasswd` 的文件,并在文件中添加用户密码。 4. 创建一个名为 `demo.conf` 的配置文件,并将其内容复制到 `/etc/nginx/conf.d/directory_browse.conf` 文件中。 5. 修改 `demo.conf` 中的 `default_type`属性,将其设置为 `application/octet-stream`。 6. 保存并重新加载配置文件: ``` sudo nano /etc/nginx/conf.d/directory_browse.conf sudo nginx -s reload ``` **注意** * 该配置仅适用于 Nginx 1.8 及更高版本。 * 配置中的 `autoindex_localtime` 指的是目录浏览的本地时间。 * 为了使用目录浏览,您需要在浏览器中设置代理地址,使用 `localhost:18099` 的地址。

正文

https://www.cnblogs.com/shanfeng1000/p/16259268.html

 

  Nginx除了可以实现反向代理外,还有个实用的功能,那就是目录浏览,它可以很方便的让我们查看某个目录下的文件内容,并可以选择性的下载。

  启用目录浏览

  一般的,我们可以创建一个demo.conf配置:  

    server{
      listen 18099;
      listen [::]:18099;

      location / {
        root /home/feng;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
      }
    }

  说明:  

    root:就是要进行目录浏览的那个目录,一般用绝对路径指定
    autoindex:表示是否开启目录浏览,on表示开启,off表示关闭,默认是off
    autoindex_exact_size:表示是否展示文件具体大小,默认on,那么文件大小就是一个很大的数字,这个不利于我们阅读,设置成off,表示将文件大小格式化成熟悉的G、M、KB等格式
    autoindex_localtime:目录浏览会展示最新修改时间,这个配置表示这个时间是使用本地时间还是UTC时间,on表示使用本地时间,off表示使用UTC时间,默认off

  好了,完成,然后重新加载配置:  

    #检查配置
    sudo nginx -t
    #重新加载配置
    sudo nginx -s reload

  然后就可以使用http://ip:port访问了,比如我这里是http://192.168.139.128:18099/

  

  注:如果发现远程访问打不开怎么办?

  首先,在nginx所在主机本地访问http://localhost:port/,比如我这里是http://localhost:18099/:  

    curl http://localhost:18099/

  如果结果正常返回html格式的数据,那么可能是开启了防火墙,端口没有放行。

  如果结果显示错误代码,那么根据错误代码去处理,比如404是文件不存在,403表示没有权限。

  如果是403无权限,那么可能是启动nginx的用户权限不够,最好的做法是修改nginx.conf文件中启用用户:

  

  我们可以把这个user配置改成root或者其它有权限的用户,然后重新启动nginx就好了  

    sudo systemctl restart nginx.service

 

  设置权限认证

  上面启用目录浏览后,所有用户均可访问,有时候我们需要一些权限控制,输入正确的账号密码后才能访问,为此,我们可以借助htpaawd插件来完成

    #Ubuntu安装htpasswd
    sudo apt install apache2-utils
    #CentOS安装htpasswd
    sudo yum install httpd-tools

   htpaawd常用参数说明:  

    -c:往指定一个加密文件添加一个用户;
    -n:不更新加密文件,只将加密后的用户名密码显示在屏幕上;
    -m:默认采用MD5算法对密码进行加密;
    -s:采用SHA算法对密码进行加密;
    -d:采用CRYPT算法对密码进行加密;
    -p:不对密码进行进行加密,即明文密码;
    -b:在命令行中一并输入用户名和密码而不是根据提示输入密码;
    -D:删除指定的用户。

   所以我们先创建用户密码  

    # 创建用户及设置密码
    sudo htpasswd -c /etc/nginx/htpasswd feng
    
    #/etc/nginx/htpasswd:存放用户及密码的文件,后面在nginx中配置需要
    #feng:用户名,命令执行后会要求输入密码

   执行后输入密码:

  

  接着修改上面的demo.conf:  

    server{
      listen 18099;
      listen [::]:18099;
	
      location / {
        root /home/feng;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
        
        auth_basic "Account and Password is Required";
        auth_basic_user_file /etc/nginx/htpasswd;
      }
    }

 

  说明:  

    auth_basic:表示是否开启验证,默认是off,如果值是一个字符串,那么未认证的时候,http响应头会携带一个WWW-Authenticate头,在浏览器中弹出的账号密码框中,会展示这句话(不是所有的浏览器都会展示,IE会展示,谷歌不会展示)
    auth_basic_user_file:这个就是上面生成的包含用户密码的文件

  那么接下来我们刷新页面,就会提示要输入账号密码了:

  

  :输入密码确定后,貌似没有办法取消,不过我们可以重置用户密码,让原来的账号密码失效:  

    # 删除用户
    sudo htpasswd -D /etc/nginx/htpasswd feng
    # 重新添加
    sudo htpasswd -c /etc/nginx/htpasswd feng

 

  设置mime-type

  到这里,我们基本上已经配置完了,可以使用了,但是我们会发现有一个问题,因为我们开启目录浏览,本质上是为了方便用户下载,但是现在你会发现,在默认规则下,像普通的文本文档,png、jpg等图片,还有pdf等文件,它是直接在浏览器打开而非下载,这种体验不是很友好,我们可以通过nginx设置响应的content-type来解决这个问题。

  修改demo.conf,完整的样子应该是这样子的  

    server{
	  listen 18099;
	  listen [::]:18099;
	  
	  location / {
	    root /home/feng;
	    autoindex on;
	    autoindex_exact_size off;
	    autoindex_localtime on;
        
	    auth_basic "Account and Password is Required";
	    auth_basic_user_file /etc/nginx/htpasswd;
        
	    default_type application/octet-stream;
	    types {
	      # 这里的type配置将会覆盖原来的配置,结合default_type来使用
	      # 格式:mime-type extension
	      # 如:
	      # image/png png;
	      # text/html html;
	      # text/html htm;
	    }
	  }
	}

   说明:  

    default_type:响应中默认的content-type,如果在types中没有获取到相对应的content-type,就会使用这个参数返回
    types:content-type匹配设置,会覆盖默认的设置,只是content-type+文件后缀,如
        image/png png;
        text/html html;
        text/html htm;

   :我们可以在types中什么都不配置,值配置default_type,这样,我们在浏览器上打开的所有文件都将会被下载而非打开浏览 

与[转帖]Nginx设置目录浏览模式相似的内容:

[转帖]Nginx设置目录浏览模式

https://www.cnblogs.com/shanfeng1000/p/16259268.html Nginx除了可以实现反向代理外,还有个实用的功能,那就是目录浏览,它可以很方便的让我们查看某个目录下的文件内容,并可以选择性的下载。 启用目录浏览 一般的,我们可以创建一个demo.conf配

[转帖]聊一聊nginx中KeepAlive的设置

文章目录 问题分析为什么要有KeepAlive?TCP KeepAlive和HTTP的Keep-Alive是一样的吗?Nginx的TCP KeepAlive如何设置Apache中KeepAlive和KeepAliveTimeOut参考资料 问题 之前工作中遇到一个KeepAlive的问题,现在把它记

[转帖]nginx 的超时设置

前言 我们在使用nginx做反向代理的时候,可能会遇到这个场景:后端正常的业务处理时间超过了nginx的超时时间,导致nginx主动返回504。为解决这个问题,我们网上搜索发现可以通过调整这几个参数来调大nginx的超时时间。 proxy_connect_timeout proxy_send_tim

[转帖]Nginx上传文件大小限制(请求报文过大)413 Request Entity Too Large

在nginx使用过程中,上传文件的过程中,通常需要设置nginx报文大小限制。避免出现413 Request Entity Too Large。 于是奇葩的问题被我们遇到了,详细配置请参考下面。我们的问题是,无论client_max_body_size设置在哪里,nginx -s reload后,依

[转帖]Nginx超时timeout 设置

Nginx 超时配置,连接时间过长直接关闭连接,显示timeout http { #每个 TCP 连接最多可以保持多长时间 keepalive_timeout 60; #客户端向服务端发送一个完整的 request header client_header_timeout 10; #客户端发送服务端

[转帖]Nginx服务器性能调优

Worker 相关worker设置比较简单,只需要设置正确的数量。 Worker Processes 如果您的站点流量不大,Nginx,数据库和Web应用程序都运行在同一台服务器上。则在/etc/nginx/nginx.conf中,设置worker_processes 1; 如果您的站点流量比较大或

[转帖]Nginx 反向代理地址后,session丢失,不能登录的问题

https://www.cnblogs.com/fan-yuan/p/14417255.html 设置反向代理后,session丢失无法正常登录,需按照如下格式设置即可location /aaaaa/bbbbbb { #代理跳转的路径 proxy_pass http://localhost:8080

【转帖】nginx变量使用方法详解-4

https://www.diewufeiyang.com/post/578.html 在设置了“取处理程序”的情况下,Nginx 变量也可以选择将其值容器用作缓存,这样在多次读取变量的时候,就只需要调用“取处理程序”计算一次。我们下面就来看一个这样的例子: Bash map $args $foo {

[转帖]nginx中map使用方法

场景: 匹配请求 url 的参数,如果参数是 debug 则设置 $foo = 1 ,默认设置 $foo = 0 map $args $foo { default 0; debug 1;} $args 是nginx内置变量,就是获取的请求 url 的参数。 如果 $args 匹配到 debug 那么

[转帖]nginx 反向代理中proxy_set_header的含义

https://www.jianshu.com/p/cd813d68ed25 0.1212020.10.23 09:29:53字数 284阅读 9,939 1.proxy_set_header设置的请求头是传递给后端服务器的 2.ngixn反向代理中proxy_set_header的设置: prox