woothee: Implémentation Woothee Lua-nginx-module-lua
Installation
Si vous n'avez pas configuré l'abonnement au dépôt RPM, inscrivez-vous. Ensuite, vous pouvez procéder avec les étapes suivantes.
CentOS/RHEL 7 ou Amazon Linux 2
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-woothee
CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-woothee
Pour utiliser cette bibliothèque Lua avec NGINX, assurez-vous que nginx-module-lua est installé.
Ce document décrit lua-resty-woothee v1.12.0 publié le 13 octobre 2021.
Woothee lua resty
L'implémentation Lua-Openresty du projet Woothee, qui est un parseur de chaînes d'agent utilisateur multilingue.
https://github.com/woothee/woothee
Synopsis
Utilisation de base
server {
location /test {
content_by_lua_block {
local woothee = require "resty.woothee"
-- parse
local r = woothee.parse(ngx.var.http_user_agent)
-- => {"name": "xxx", "category": "xxx", "os": "xxx", "version": "xxx", "vendor": "xxx"}
-- crawler ?
local crawler = woothee.is_crawler(ngx.var.http_user_agent)
-- => true
ngx.header.content_type = "text/plain"
ngx.say(r.name)
}
}
}
Inclure le journal Nginx
log_format woothee_format
'$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$x_wt_name" "$x_wt_category" "$x_wt_os" "$x_wt_version" "$x_wt_vendor" "$x_wt_os_version"'
;
server {
access_log /var/log/nginx/nginx-access-woothee.log woothee_format;
# définir les variables nginx
set $x_wt_name '-';
set $x_wt_category '-';
set $x_wt_os '-';
set $x_wt_version '-';
set $x_wt_vendor '-';
set $x_wt_os_version '-';
location /test {
content_by_lua_block {
local woothee = require "resty.woothee"
local r = woothee.parse(ngx.var.http_user_agent)
-- définir les variables nginx
ngx.var.x_wt_name = r.name
ngx.var.x_wt_category = r.category
ngx.var.x_wt_os = r.os
ngx.var.x_wt_version = r.version
ngx.var.x_wt_vendor = r.vendor
ngx.var.x_wt_os_version = r.os_version
ngx.header.content_type = "text/plain"
ngx.say(r.name)
}
}
}
Transmettre au serveur backend
server {
# définir les variables nginx
set $x_wt_name '-';
set $x_wt_category '-';
set $x_wt_os '-';
set $x_wt_version '-';
set $x_wt_vendor '-';
set $x_wt_os_version '-';
location /test {
rewrite_by_lua_block {
local woothee = require "resty.woothee"
local r = woothee.parse(ngx.var.http_user_agent)
-- définir les variables nginx
ngx.var.x_wt_name = r.name
ngx.var.x_wt_category = r.category
ngx.var.x_wt_os = r.os
ngx.var.x_wt_version = r.version
ngx.var.x_wt_vendor = r.vendor
ngx.var.x_wt_os_version = r.os_version
}
proxy_pass http://backend-server/;
# proxy définir l'en-tête
proxy_set_header X-WT-NAME $x_wt_name;
proxy_set_header X-WT-CATEGORY $x_wt_category;
proxy_set_header X-WT-OS $x_wt_os;
proxy_set_header X-WT-VERSION $x_wt_version;
proxy_set_header X-WT-VENDOR $x_wt_vendor;
proxy_set_header X-WT-OS-VERSION $x_wt_os_version;
}
}
Pour les développeurs (sur Docker)
docker run & exécuter le test
make local-all
GitHub
Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-woothee.