LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

高性能WEB服务器Nginx常用功能(一):四层访问控制、账户认证、自定义错误页面、检查资源是否存在

admin
2025年6月29日 18:37 本文热度 36

3 Nginx 常用功能

3.1 Nginx 四层访问控制

Nginx 中的访问控制功能基于 ngx_http_access_module 模块实现,可以通过匹配客户端源 IP 地址进行限制

该模块是默认模块,在使用 apt/yum 安装的环境中默认存在,如果想要禁用,需要自行编译,然后显式声明禁用该模块

https://nginx.org/en/docs/http/ngx_http_access_module.html
deny address|CIDR|unix:|all; #拒绝访问的客户端,黑名单,可以是具体IP,网段,socket(1.5.1版本以上),所有allow address|CIDR|unix:|all; #允许访问的客户端,白名单,可以是具体IP,网段,socket(1.5.1版本以上),所有                              #deny 和 allow 指令同时存在时,按加载顺序生效                              #作用域 http,server,locationlimit_except
server {  listen 80;  server_name www.m99-josedu.com;  root /var/www/html/www.m99-josedu.com;
  location = /a.html {    allow 127.0.0.1#a.html 只允许 127.1 访问,但实际上并不起作用,因为在 server 和 location 中都没有 deny  }                  #所以还是所有人都可以访问}
server {  listen 80;  server_name www.m99-josedu.com;  root /var/www/html/www.m99-josedu.com;
  location = /a.html {    deny all; #所有客户端都不能访问 a.html,但当前 server 中其它资源不受影响    allow 127.0.0.1#此处放行了127.1,但 deny 写在前面了,所以 127.1 也同样无法访问  }}
server {  listen 80;  server_name www.m99-josedu.com;  root /var/www/html/www.m99-josedu.com;
  location = /a.html {    allow 127.0.0.1# 放行127.1    deny 10.0.0.208# 拒绝 10.0.0.208    allow 10.0.0.0/24# 放行 10.0.0.0/24 所有IP,但 10.0.0.208 在上一条被拒绝    deny all; # 拒绝所有,兜底规则  }}

3.2 Nginx 账户认证

Nginx 中的账户认证功能由 ngx_http_auth_basic_module 模块提供,该模块也是默认模块

此种认证方式并不安全,如果服务端是 http 协议,而非 https 协议,则用户名和密码在网络中是明文传输的,可以被抓包工具截获

https://nginx.org/en/docs/http/ngx_http_auth_basic_module.html
auth_basic string|off#身份验证时对话框上的提示信息,新版浏览器几乎不支持,默认off,即不启用验证功能auth_basic_user_file file; #指定身份认证的用户名和密码的文件路径,密码要使用 htpasswd 命令生成                           #作用域 http,server,location,limit_except
#安装密码工具[root@ubuntu ~]# apt install apache2-utils -y[root@rocky ~]# yum -y install httpd-tools
#创建用户名和密码#首次使用需要使用 -c 选项指定文件路径[root@ubuntu ~]# htpasswd -c /etc/nginx/conf.d/httpuser tomNew password:Re-type new password:Adding password for user tom
#新增用户,非交互式输入密码[root@ubuntu ~]# htpasswd -b /etc/nginx/conf.d/httpuser jerry 123456Adding password for user jerry
#查看文件,在生产环境中,基于安全考虑,可以将文件设为隐藏文件,修改属主属组,并配置读写权限[root@ubuntu ~]# cat /etc/nginx/conf.d/httpusertom:$apr1$.uhWB88p$NKvgCPmVyzJF6rRV9tpke1jerry:$apr1$8.1IC.TR$GxmCHPQjTHdXbltchvi1i/
#配置验证server {  listen 80;  server_name www.m99-josedu.com;  root /var/www/html/www.m99-josedu.com;
  location = /a.html {    auth_basic "pls input your name"; #访问 www.m99-josedu.com/a.html 时需要验证    auth_basic_user_file conf.d/httpuser; #同域名下其它资源不用验证  }}
# 测试# 在浏览器中会直接弹出结话框# 命令行中写法[root@ubuntu ~]# curl http://jerry:123456@www.m99-josedu.com/a.htmla.html[root@ubuntu ~]# curl -u tom:123456 --basic http://www.m99-josedu.com/a.htmla.html

3.3 自定义错误页面

在没有配置错误处理页面的情况下,非 200 状态码的响应请求返回的都是 Nginx 默认页面,我们可以通过指令设置自定义的错误页面,不同的虚拟主机,不同的错误都可以设置成不同的错误页面

https://nginx.org/en/docs/http/ngx_http_core_module.html#error_page
error_page code ... [=[response]] uri; #定义指定状态码的错误页面,可以多个状态码共用一个资源                  #作用域 http, server, location, if in location
server {  listen 80;  server_name www.m99-josedu.com;  root /var/www/html/www.m99-josedu.com;  error_page 400 404 502 503 504 error.html; #自定义指定状态码的错误页面  location = /error.html {    root /data/errors;  }}[root@ubuntu ~]# ls /data/errors/error.html
server {  listen 80;  server_name www.m99-josedu.com;  root /var/www/html/www.m99-josedu.com;  error_page 400 404 =302 /index.html; #通过302 重定向到 index.hmtl}
server {  listen 80;  server_name www.m99-josedu.com;  root /var/www/html/www.m99-josedu.com;  error_page 400 404 =302 http://www.baidu.com; #临时重定向  error_page 402 503 =301 http://www.baidu.com; #永久重定向}

3.4 自定义错误日志

默认没有为每个 server 配置单独日志的情况下,所有错误日志和访问日志都是写在相同的文件中,我们可以单独为每个 server 或 location 设置日志

https://nginx.org/en/docs/ngx_core_module.html#error_log
#全局配置[root@ubuntu ~]# cat /etc/nginx/nginx.conf | grep log    access_log /var/log/nginx/access.log;    error_log /var/log/nginx/error.log;
error_log file [level]; #指定保存错误日志的文件和记录级别,错误级别可参考syslog那一课的内容                        #如果不需要记录日志,值可以写在 /dev/null                        #默认值 error_log logs/error.log error                        #作用域 main, http, mail, stream, server, location
server {  listen 80;  server_name www.m99-josedu.com;  root /var/www/html/www.m99-josedu.com;
  error_log /var/log/nginx/www.m99-josedu.com.error.log; #为当前 server 配置定义单独的 error_log
  location = /abc { #此资源报错不记录日志    error_log /dev/null;  }}
# 测试,访问下列不存在的资源分别查看日志# http://www.m99-josedu.com/ab# http://www.m99-josedu.com/abc# http://www.m99-josedu.com/abd
3.5 检测资源是否存在
try_files file ... uri; #按顺序查询资源是否存在,返回第一个匹配到的,如果没有匹配到,会内部重定向到最后一个资源try_files file ... =code; #最后还可以加一个状态码
#默认虚拟主机中的 try_files[root@ubuntu ~]# cat /etc/nginx/sites-enabled/default | grep try_files    try_files $uri $uri/ =404;
server {  listen 80;  server_name www.m99-josedu.com;  root /var/www/html/www.m99-josedu.com;  try_files $uri $uri.html $uri/index.html /index.html;  location /a{    try_files $uri $uri.html;  }  location /b{    try_files $uri $uri.html =418;  }  error_log /var/log/nginx/www.m99-josedu.com.error.log;}
# 测试# http://www.m99-josedu.com/xyz 先找 xyz,往后依次是 xyz.html xyz/index.html /index.html# http://www.m99-josedu.com/a 如果有 a 或 a.html 会匹配到,返回状态码是200,如果没有则返回 500错误页面# http://www.m99-josedu.com/b 如果有 b 或 b.html 会匹配到,返回状态码是200,如果没有则返回 418错误页面

— END —


阅读原文:原文链接


该文章在 2025/7/1 23:03:35 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved