高性能WEB服务器Nginx常用功能(一):四层访问控制、账户认证、自定义错误页面、检查资源是否存在
|
admin
2025年6月29日 18:37
本文热度 1108
|
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版本以上),所有 limit_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; } }
server { listen 80; server_name www.m99-josedu.com; root /var/www/html/www.m99-josedu.com;
location = /a.html { deny all; allow 127.0.0.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; deny 10.0.0.208; allow 10.0.0.0/24; 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; auth_basic_user_file file;
[root@ubuntu ~][root@rocky ~]
[root@ubuntu ~]New password:Re-type new password:Adding password for user tom
[root@ubuntu ~]Adding password for user jerry
[root@ubuntu ~]tom:$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 ~]a.html[root@ubuntu ~]a.html
3.3 自定义错误页面
在没有配置错误处理页面的情况下,非 200 状态码的响应请求返回的都是 Nginx 默认页面,我们可以通过指令设置自定义的错误页面,不同的虚拟主机,不同的错误都可以设置成不同的错误页面
https://nginx.org/en/docs/http/ngx_http_core_module.html
error_page code ... [=[response]] uri;
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 ~]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; }
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
#全局配置[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;
location = /abc { error_log /dev/null; }}
try_files file ... uri; try_files file ... =code;
[root@ubuntu ~] 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;}
— END —
阅读原文:原文链接
该文章在 2025/7/1 23:03:35 编辑过