有时候需要将某个目录暴露出去,供给访问者访问,使用Nginx会很方便。但是有时也会有需求,避免某些目录(无密码)被所有人访问。
下面是可以参考的 Nginx 配置文件
普通配置
这个是一个普通的暴露配置
server {
server_name domain.com; # 你的域名
location / {
alias /var/www/xxx; # 想要暴露的地址
sendfile on; # 不经过用户态缓冲区,直接发给访问,可以提高静态文件传输性能,减少 CPU 占用
autoindex on; # 没有index的目录,Nginx自动生成返回index
autoindex_exact_size off; # 让空间占用大小更加可读(on是字节)
autoindex_localtime on; # 文件时间格式,显示服务器的本地时间(off是GMT)
charset utf-8,gbk; # 返回内容的字符编码为 utf-8 和 gbk
}
}
密码验证
安装插件与创建凭证
如果我们希望加上密码验证功能,就需要安装点额外的插件。
apt install apache2-utils
# 如果是 Yum 系的话,安装稍有不同
yum install httpd-tools
假如我们想要创建一个名为 test
的用户。
htpasswd -c /etc/nginx/.htpasswd test
此时,会要求你为 test
这个用户设置密码
完成后,在 /etc/nginx/
目录下面,就会创建一个名为 .htpasswd
的文件。
追加用户:
如果你 希望追加用户,而不是覆盖它 ,创建新的文件, 那么就一定不要 加 -c
参数。
删除用户:
htpasswd -D /etc/nginx/.htpasswd test
# 你也可以直接编辑 `/etc/nginx/.htpasswd` 这个文件,手动删除那一行
Nginx 追加配置
假设我们想要加密,/var/www/xxx/
目录下的 adb
这个目录 (/var/www/xxx/adb)
之后,我们给我们的 Nginx 配置文件追加下面的内容即可
location /adb/ {
alias /var/www/xxx/adb; # 具体目录
auth_basic "Restricted Area"; # 浏览器弹窗提示信息,可以自定义
auth_basic_user_file /etc/nginx/.htpasswd; # 指定密码文件路径(刚刚创建那个)
autoindex on; # 启用目录列表功能
autoindex_exact_size off;
autoindex_localtime on;
charset utf-8,gbk;
}
完整配置
那么他们的完整配置就会是这样的
server {
server_name domain.com; # 你的域名
location / {
alias /var/www/xxx;
sendfile on;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
charset utf-8,gbk;
}
# 为 adb 目录启用账号密码验证
location /adb/ {
alias /var/www/xxx/adb; # adb 指向的具体目录
auth_basic "Restricted Area"; # 浏览器弹窗提示信息
auth_basic_user_file /etc/nginx/.htpasswd; # 指定密码文件路径
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
charset utf-8,gbk;
}
}
完整配置的 精简写法
只需要,将公共部分提取出来放到上层 location
或 server
块中,只保留每个 location
块的差异化配置:
server {
server_name domain.com; # 你的域名
# 通用配置,适用于所有 location
sendfile on;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
charset utf-8,gbk;
# / 根路径 配置
location / {
alias /var/www/xxx; # 想要暴露的地址
}
# adb 路径 启用账号密码验证
location /adb/ {
alias /var/www/xxx/adb; # adb 指向的具体目录
auth_basic "Restricted Area"; # 浏览器弹窗提示信息
auth_basic_user_file /etc/nginx/.htpasswd; # 指定密码文件路径
}
}
说明
算是 Nginx 常识了
location /adb/ { # 这里是自己取的,假如目录是 adb,这里是 xdb ,那么访问 domain.com/xdb ,其对应的目录其实是 adb。目录只与下面的 alias 有关。
alias /var/www/xxx/adb; # 具体目录
···
发表回复