Комментарии 14
А вы отправляйте не нгинксом напрямую а чем то другим, что умеет логи читать, преобразовывать их и знает urlencode.
Proxy-pass здесь по-мойму лишний, хотя сходу красиво смотрится.
Proxy-pass здесь по-мойму лишний, хотя сходу красиво смотрится.
+1
Вся соль в использовании опции post_action — она дергает указанный путь по окончании обработки запроса.
wiki.nginx.org/HttpCoreModule#post_action (почему-то её нет на обычной страничке с директивами в документации)
wiki.nginx.org/HttpCoreModule#post_action (почему-то её нет на обычной страничке с директивами в документации)
+3
А почему бы не воспользоваться Lua?
Некоторое назад писал уже про пример использования: habrahabr.ru/post/215295
Некоторое назад писал уже про пример использования: habrahabr.ru/post/215295
+5
Как раз хотел предложить автору использовать Lua-модуль или встроенный перл, котрые бы как раз помогли бы решить 146% описанных в конце статьи проблем :)
+1
В стате есть упомянание про lua. Но хотелось использовать только стандартные модули Nginx. Этот конфиг можно использовать даже на shared-хостингах.
Если кто-то возьмётся за доработку конфига на lua, то будет здорово!
Если кто-то возьмётся за доработку конфига на lua, то будет здорово!
+1
Ну, как я заметил, «встроенный Perl» таки является стандартным модулем который можно использовать везде :) Правда, Perl я знаю несколько хуже, чем Lua, увы ;)
+1
Тогда я голосую за 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
+1
А на lua уже есть пример, мне его прислал Николай Шардин (сотрудник Nginx в кремниевой долине):
* Сори, опечатка: Николай Шадрин
+1
nginx поддерживает urlencode — с помощью модуля set_misc, github.com/openresty/set-misc-nginx-module#set_escape_uri
кстати добавить свою функцию к nginx намного проще, чем многие думают.
кстати добавить свою функцию к nginx намного проще, чем многие думают.
+5
По-моему с post_action есть определенного рода проблемы — nginx не закрывает соединение с клиентом до завершения подзапроса, и были еще какие-то нюансы с кодом ответа. Механизм неплох, позволяет очень многое, но недокументирован он, как мне кажется, не зря.
+3
Верно. Поэтому его не следует использовать для других решений кроме как для скачиваний, где коннект рвется сразу после окончания. Если у тебя keep-alive, то процесс nginx при этом будет блокироваться.
Хотя это и не сильно большая проблема, так как GA очень быстро отвечает на запросы, хоть и не мгновенно.
Хотя это и не сильно большая проблема, так как GA очень быстро отвечает на запросы, хоть и не мгновенно.
0
Смотрю на скриншот с юзер-агентами.
А почему в целых 86.73% случаев значение (not set)? Данные где-то теряются?
А почему в целых 86.73% случаев значение (not set)? Данные где-то теряются?
+1
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Отправка Nginx-логов в Google Analytics