Comments 14
А вы отправляйте не нгинксом напрямую а чем то другим, что умеет логи читать, преобразовывать их и знает urlencode.
Proxy-pass здесь по-мойму лишний, хотя сходу красиво смотрится.
Proxy-pass здесь по-мойму лишний, хотя сходу красиво смотрится.
Вся соль в использовании опции post_action — она дергает указанный путь по окончании обработки запроса.
wiki.nginx.org/HttpCoreModule#post_action (почему-то её нет на обычной страничке с директивами в документации)
wiki.nginx.org/HttpCoreModule#post_action (почему-то её нет на обычной страничке с директивами в документации)
А почему бы не воспользоваться Lua?
Некоторое назад писал уже про пример использования: habrahabr.ru/post/215295
Некоторое назад писал уже про пример использования: habrahabr.ru/post/215295
Как раз хотел предложить автору использовать Lua-модуль или встроенный перл, котрые бы как раз помогли бы решить 146% описанных в конце статьи проблем :)
В стате есть упомянание про lua. Но хотелось использовать только стандартные модули Nginx. Этот конфиг можно использовать даже на shared-хостингах.
Если кто-то возьмётся за доработку конфига на lua, то будет здорово!
Если кто-то возьмётся за доработку конфига на lua, то будет здорово!
Ну, как я заметил, «встроенный Perl» таки является стандартным модулем который можно использовать везде :) Правда, Perl я знаю несколько хуже, чем Lua, увы ;)
Тогда я голосую за Perl-реализацию :))
А на lua уже есть пример, мне его прислал Николай Шардин (сотрудник Nginx в кремниевой долине):
А на lua уже есть пример, мне его прислал Николай Шардин (сотрудник Nginx в кремниевой долине):
location / {
set_by_lua $urlencode '
local str = ngx.var.uri
str = string.gsub (str, "([^%w ])",
function © return string.format ("%%%02X", string.byte©) end)
str = string.gsub (str, " ", "+")
return str';
return 200 «your URI is $uri
encoded to $urlencode»;
}
# curl -v 10.2.2.65/привет
* Hostname was NOT found in DNS cache
* Trying 10.2.2.65…
* Connected to 10.2.2.65 (10.2.2.65) port 80 (#0)
> GET /привет HTTP/1.1
> User-Agent: curl/7.35.0
> Host: 10.2.2.65
> Accept: */*
>
< HTTP/1.1 200 OK
* Server nginx/1.7.11 is not blacklisted
< Server: nginx/1.7.11
< Date: Fri, 05 Jun 2015 08:40:21 GMT
< Content-Type: text/html
< Content-Length: 82
< Connection: keep-alive
<
* Connection #0 to host 10.2.2.65 left intact
your URI is /привет
encoded to %2F%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82
А на lua уже есть пример, мне его прислал Николай Шардин (сотрудник Nginx в кремниевой долине):
* Сори, опечатка: Николай Шадрин
nginx поддерживает urlencode — с помощью модуля set_misc, github.com/openresty/set-misc-nginx-module#set_escape_uri
кстати добавить свою функцию к nginx намного проще, чем многие думают.
кстати добавить свою функцию к nginx намного проще, чем многие думают.
По-моему с post_action есть определенного рода проблемы — nginx не закрывает соединение с клиентом до завершения подзапроса, и были еще какие-то нюансы с кодом ответа. Механизм неплох, позволяет очень многое, но недокументирован он, как мне кажется, не зря.
Верно. Поэтому его не следует использовать для других решений кроме как для скачиваний, где коннект рвется сразу после окончания. Если у тебя keep-alive, то процесс nginx при этом будет блокироваться.
Хотя это и не сильно большая проблема, так как GA очень быстро отвечает на запросы, хоть и не мгновенно.
Хотя это и не сильно большая проблема, так как GA очень быстро отвечает на запросы, хоть и не мгновенно.
Смотрю на скриншот с юзер-агентами.
А почему в целых 86.73% случаев значение (not set)? Данные где-то теряются?
А почему в целых 86.73% случаев значение (not set)? Данные где-то теряются?
Sign up to leave a comment.
Отправка Nginx-логов в Google Analytics