高性能WEB服务器Nginx常用功能(一):四层访问控制、账户认证、自定义错误页面、检查资源是否存在
				
									
					
					
						|  | 
							admin 2025年6月29日 18:37
								本文热度 1158 | 
					
				 
				
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 编辑过