nginx–基础–3.14–案例–只允许指定的客户端访问
1、环境准备
1.1、html界面
# 创建index.html
cat > /usr/local/nginx/html/index.html << EOF
<!DOCTYPE html>
<html>
<body>
<h1>test to nginx!</h1>
</body>
</html>
EOF
1.2、配置文件
user root;
# 允许生成worker process数等。
worker_processes auto;
# 错误日志存放路径
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
# 错误日志存放路径
pid logs/nginx.pid;
# 一个nginx进程最多可以打开文件数,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。
worker_rlimit_nofile 65535;
events {
# 选取哪种事件驱动模型处理连接请求
use epoll;
# 每个进程的最大连接数
worker_connections 65535;
}
http {
# 文件扩展名与文件类型映射表
include mime.types;
# 默认文件类型,默认为text/plain
default_type application/octet-stream;
# 定义日志格式,main是日志格式名称
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" $upstream_addr $request_time $upstream_response_time $upstream_connect_time $upstream_header_time';
# 定义日志路径,使用日志的格式
access_log logs/access.log main;
# 允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
# on:可以减少内核和用户空间之间的数据拷贝次数,从而显著提高文件传输的效率,特别是在处理大文件或高并发的文件传输时。
sendfile on;
# 必须在sendfile开启模式才有效,防止网路阻塞,积极的减少网络报文段的数量(将响应头和正文的开始部分一起发送,而不一个接一个的发送。)
tcp_nopush on;
# 连接超时时间,默认为75s,可以在http,server,location块。
keepalive_timeout 65;
# 将要传输的数据压缩。降低数据传输的时间。
gzip on;
server {
listen 80;
server_name localhost;
root html;
location / {
root html;
index index.html;
}
}
}
1.3、效果
2、只允许指定的客户端访问
2.1、修改配置
# 重点
location / {
# user-agent:如果不包含Worklink_p/deviceName,就返回403
if ($http_user_agent !~* "Worklink_p/deviceName") {
# user-agent:如果不包含Mozilla/5.0,就返回403
#if ($http_user_agent !~* ".*Mozilla/5.0.*") {
return 403;
}
root html;
index index.html;
}
2.2、测试
2.2.1、user-agent:如果不包含Worklink_p/deviceName,就返回403
2.2.2、user-agent:如果不包含Mozilla/5.0,就返回403
我这里是包含Mozilla/5.0
3、配置优化
3.1、将禁用浏览器配置提取到全局。
server {
listen 80;
server_name localhost;
root html;
# 禁用浏览器配置
include disable-browser.conf;
location / {
root html;
index index.html;
}
}
disable-browser.conf内容
# user-agent:如果不包含Peace或者Waltz,就返回403
if ($http_user_agent !~* (Peace|Waltz)) {
return 403;
}