Задача – настроить rewrite
на NGINX, и включить запись логов для отладки.
Содержание
Rewrite
rewrite
в NGINX реализован с помощью модуля ngx_http_rewrite_module.
Пример правил, используемый у нас:
location ~ ^/$ { rewrite ^(.*)$ /cloudlibrary/ui/ redirect; } if ($request_uri ~ ^/cloudlibrary) { rewrite ^/.*cloudlibrary/uiold/(.*) /cloudlibrary/uiold/$1 break; rewrite ^/.*cloudlibrary/ui/(.*!(.css|.png|.js|.html|.jpg|.svg|.gif|.ico|.woff|.ttf|.eot)) /cloudlibrary/$1; rewrite ^/.*cloudlibrary/ui(.*) /build$1; rewrite ^/.*cloudlibrary/$ /build/index.html break; } location /build { if (!-f $request_filename) { rewrite ^(.*)$ /build/index.html; } }
Наиболее интересными параметрами тут являются break
, redirect
и т.д.:
last
– проверяет правила в текущемlocation
, если правило с флагомlast
применяется – то NGINX переходит к следующемуlocation
;break
– если условие с этим флагом совпадает с заданным URI (не путать с URL)- то NGINX возвращается к первому правилу в списке;redirect
– возвращает временное перенаправление с кодом 302; используется, если заменяющая строка не начинается с “http://” или “https://”;permanent
– возвращает постоянное перенаправление с кодом 301.
В условиях if {}
можно проверять любое значение, например – проверка cookie:
if ($http_cookie ~* !"accept_cookie" ) { passenger_enabled on; rack_env production; break; }
Полный список переменных можно найти тут>>>.
Логгирование
Создаём новый шаблон лога в файле nginx.conf
, в блоке http {}
:
log_format proxy '[$time_local] $remote_addr - $server_name to: ' '$upstream_addr: $request upstream_response_time ' '$upstream_response_time msec $msec request_time $request_time';
В фaйле конфигурации хоста – добавляем его:
rewrite_log on; ... access_log /var/log/nginx/dev.domain.com_access.log proxy; error_log /var/log/nginx/dev.domain.com_error.log notice;
Проверяем:
2015/09/01 09:06:51 [notice] 20079#0: *853 "^/.*cloudlibrary/uiold/(.*)" does not match "/cloudlibrary/access/permissions/outgoing", client: 194.105.145.69, server: www.dev.domain.com, request: "GET /cloudlibrary/access/permissions/outgoing?subject=8cba2317-24ad-418a-b6d7-8a3821f04d22 HTTP/1.1", host: "www.dev.domain.com", referrer: "https://www.dev.domain.com/cloudlibrary/ui/projects/8cba2317-24ad-418a-b6d7-8a3821f04d22" ... 2015/09/01 09:21:54 [notice] 20079#0: *1581 "^/.*cloudlibrary/ui(.*)" matches "/cloudlibrary/ui/imgs/img-placeholder.png", client: 194.105.144.244, server: www.dev.domain.com, request: "GET /cloudlibrary/ui/imgs/img-placeholder.png HTTP/1.1", host: "www.dev.domain.com", referrer: "https://www.dev.domain.com/cloudlibrary/ui/css/main.css" 2015/09/01 09:21:54 [notice] 20079#0: *1581 rewritten data: "/build/imgs/img-placeholder.png", args: "", client: 194.105.144.244, server: www.dev.domain.com, request: "GET /cloudlibrary/ui/imgs/img-placeholder.png HTTP/1.1", host: "www.dev.domain.com", referrer: "https://www.dev.domain.com/cloudlibrary/ui/css/main.css"
Готово.