高性能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版本以上),所有
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$NKvgCPmVyzJF6rRV9tpke1
jerry:$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 编辑过