13. Nginx 访问认证

本文介绍了如何在Nginx中启用基本访问认证,使用htpasswd生成并管理用户密码,以及创建一个实际的配置示例。通过学习,您可以保护网站内容,仅对授权用户开放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

13. Nginx 访问认证

ngx_http_auth_basic_module 模块实现让访问者,只有输入正确的用户密码才允许访问web内容。
web上的一些内容不想被其他人知道,但是又想让部分人看到。nginx的http auth模块以及Apache http auth都是很好的解决方案。

默认情况下nginx已经安装了ngx_http_auth_basic_module模块,如果不需要这个模块,可以加上 --without-http_auth_basic_module
# nginx 提供了认证模式,语法如下
location / {
	auth_basic 'string';	# 开启认证功能,并自定义名称
	auth_basic_user_file conf/htpasswd;		# 配置一个认证密码文件
}
linux 提供了密码生成命令:htpasswd
htpasswd 是 Apache 提供的密码生成工具, nginx 也支持 auth_basic 模块,我们可以利用 htpasswd 命令生成账号密码文件提供给 nginx 使用

# 安装 htpasswd
yum install httpd-tools -y
# 语法
htpasswd -bc .access username password
# 解释:
-b	在命令行中输入账号密码
-c	创建密码文件
username	账号
password	密码

默认 .access 文件使用 md5 加密验证

# 创建密码文件
[root@nginx conf_file]# htpasswd -bc ./htpasswd demo 123
Adding password for user demo
[root@nginx conf_file]# ls -a
.  ..  htpasswd  learn_rewrite.conf  mylocation.conf  port.conf  test1_rewrite.conf
[root@nginx conf_file]# cat htpasswd 
demo:$apr1$pYxCrJ0m$6PuPOIoPf856BzfJcsbL0.
  • 案例测试
server {
		listen 86;
		server_name _;
		location / {
			root html/learn_auth;
			index	index.html;
			auth_basic "learn nginx auth_basic";	# 
			auth_basic_user_file /usr/local/nginx/conf/conf_file/htpasswd;	
		}
   }

在这里插入图片描述

 
 
 
 
 

<think>我们正在讨论Nginx访问日志的内容以及如何修改其配置。根据提供的引用,Nginx访问日志记录了客户端对服务器的HTTP请求的详细信息,包括客户端IP地址、请求时间、请求方法、请求的URI、HTTP状态码等。错误日志则记录Nginx运行中的错误和警告。用户的问题有两个部分:1.Nginx访问日志记录的内容是什么?2.如何修改Nginx访问日志的配置?根据引用[2],访问日志记录了每一次客户端请求的详细信息,包括但不限于:-客户端IP地址($remote_addr)-请求时间($time_local)-请求方法($request_method)-请求的URI($request_uri)-HTTP协议版本($server_protocol)-响应状态码($status)-响应体大小($body_bytes_sent)-引用来源(即HTTPReferer,$http_referer)-用户代理($http_user_agent)引用[4]提到,我们可以通过定义日志格式来指定记录哪些内容,使用Nginx预定义的变量。关于修改日志配置,主要涉及两个指令:1.`log_format`:用于定义日志的格式。2.`access_log`:用于指定日志文件的路径和使用的日志格式。此外,引用[1]提到,如果日志文件路径中使用了变量,可以使用`open_log_file_cache`指令来设置缓存以提升性能。引用[3]还提到可以通过添加模块(如lua-nginx-module)来记录响应体(RespBody),但默认情况下Nginx并不记录响应体,因为这会消耗较多资源。因此,回答将分为两部分:1.详细说明Nginx访问日志记录的内容(列举常见变量)。2.说明如何修改日志配置,包括定义新的日志格式、更改日志文件路径、设置日志缓存等。注意:在修改配置后,需要重新加载Nginx配置(`nginx-sreload`)才能使更改生效。最后,生成相关问题。</think>### Nginx访问日志详解及配置修改指南 #### 一、Nginx访问日志记录内容 Nginx访问日志(access_log)记录了所有客户端请求的详细信息,主要包含以下核心字段(通过预定义变量实现): 1. **基础连接信息** - `$remote_addr`:客户端IP地址(如:`192.168.1.100`) - `$remote_user`:HTTP基础认证的用户名(如未认证则为空) - `$time_local`:请求时间(格式:`17/May/2024:10:30:22 +0800`) 2. **请求特征** - `$request`:完整的请求行(如:`GET /index.html HTTP/1.1`) - `$request_method`:HTTP方法(GET/POST等) - `$request_uri`:原始请求URI(含参数) - `$http_referer`:请求来源页(Referer) - `$http_user_agent`:客户端浏览器标识(如:`Mozilla/5.0...`) 3. **响应状态** - `$status`:HTTP状态码(如:`200`/`404`) - `$body_bytes_sent`:发送给客户端的字节数 - `$bytes_sent`:总发送字节数(含响应头) - `$request_time`:请求处理时间(秒,精确到毫秒) 4. **扩展字段(需特殊配置)** - 响应体内容(RespBody):需编译`lua-nginx-module`模块[^3] - 后端服务器IP:`$upstream_addr` - SSL协议:`$ssl_protocol` > 默认日志示例: > `192.168.1.100 - - [17/May/2024:10:30:22 +0800] "GET /test.php?id=1 HTTP/1.1" 200 34 "https://example.com" "Mozilla/5.0..."` #### 二、修改日志配置方法 通过修改Nginx配置文件(通常为`nginx.conf`或`/etc/nginx/nginx.conf`): 1. **自定义日志格式** 使用`log_format`指令定义新格式: ```nginx log_format custom '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" ' 'Upstream: $upstream_addr'; ``` 2. **应用日志格式** 在`server`或`http`块中指定日志路径和格式: ```nginx access_log /var/log/nginx/access.log custom; ``` 3. **高级配置技巧** - **按条件记录**:仅记录特定请求 ```nginx access_log /var/log/nginx/post.log custom if ($request_method = POST); ``` - **路径变量缓存**:当路径含变量时优化性能 ```nginx open_log_file_cache max=1000 inactive=60s; ``` - **记录响应体**(需Lua模块)[^3]: ```nginx log_format resp_body '$remote_addr - $request_body'; lua_need_request_body on; # 启用请求体捕获 ``` 4. **日志轮转管理** 使用`logrotate`工具定期切割日志(示例配置`/etc/logrotate.d/nginx`): ```conf /var/log/nginx/*.log { daily rotate 30 compress missingok notifempty sharedscripts postrotate /bin/kill -USR1 $(cat /run/nginx.pid 2>/dev/null) 2>/dev/null endscript } ``` #### 三、操作流程 1. 编辑配置文件:`sudo nano /etc/nginx/nginx.conf` 2. 修改`log_format`和`access_log`指令 3. 测试配置语法:`sudo nginx -t` 4. 重载配置:`sudo nginx -s reload` 5. 验证日志:`tail -f /var/log/nginx/access.log` > **安全建议**:敏感字段(如`$request_body`)记录需谨慎,避免泄露密码/PII数据[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值