-
Notifications
You must be signed in to change notification settings - Fork 24
Полезно знать по конфигураии nginx
Статья на хабре про настройку nginx
server {
#...
#rewrite_log on;
rewrite ^/billing/ps/(.*)$ /pdb/billing/web/ps/$1 last;
#...
}
server
{
#...
set $project_root "D:/Work/projects/web/pdblimb";
root $project_root;
#...
}
Ветка про этот тут
Пример запроса:
http://server.com/media/video/13.mp4
данный файл лежит в каком-то из каталогов:
/raid9550/1/video/13.mp4
/raid9550/2/video/13.mp4
/raid9550/3/video/13.mp4
/raid9550/4/video/13.mp4
Решение:
location /media/video/
{
location ~ ^/media(.+)$
{
root /root9550;
try_files /1$1
/2$1
/3$1
/4$1
=404;
}
}
# Задаёт замену для указанного location'а. Например, при такой конфигурации
location /i/ {
alias /data/w3/images/;
}
# на запрос “/i/top.gif” будет отдан файл /data/w3/images/top.gif.
# В значении параметра путь можно использовать переменные, кроме $document_root и $realpath_root.
# Если alias используется внутри location'а, заданного регулярным выражением,
# то регулярное выражение должно содержать выделения, а сам alias — ссылки на
# эти выделения (0.7.40), например:
location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ {
alias /data/w3/images/$1;
}
# Если location и последняя часть значения директивы совпадают:
location /images/ {
alias /data/w3/images/;
}
# то лучше воспользоваться директивой root:
location /images/ {
root /data/w3;
}
Запрос: http://server.com/screen/pic.jpg
искать в /content/screen/pic.jpg
location /screen/
{
location ~ ^/screen(.+).jpg$
{
root /content/screen;
try_files $1.jpg =404;
}
}
либо так, если не обязательно .jpg
location /screen/
{
root /content;
break;
}
Допустим нам надо чтобы все запросы на server.com шли через домен other.biz (другой сервер)
server
{
server_name other.biz;
error_log off;
location /
{
proxy_pass http://server.com;
proxy_redirect http://server.com/ /;
proxy_set_header Host server.com;
# Если надо передавать реальный IP то:
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Front-Real-IP $remote_addr;
}
}
Самый простой пример - проверяем есть ли страница в кеше и, если есть, достаем из кеша, иначе - делаем запрос к бекенду.
server {
location / {
set $memcached_key $uri; # Ключ для проверки в memcached
memcached_pass 127.0.0.1:11211; # Параметры подключения
default_type text/html; # Заголовок по умолчанию
error_page 404 = @fallback; # 404 - данные в кеше не найдены
}
location @fallback {
proxy_pass backend; # Бекенд
}
}
Флаги вконце rewrite:
-
last
- завершает обработку текущего набора директив модуля ngx_http_rewrite_module, после чего ищется новый location, соответствующий изменённому URI; -
break
- завершает обработку текущего набора директив модуля ngx_http_rewrite_module;
Пример:
location /sid {
rewrite ^/sid/([0-9]+)/$ /index.php?sid=$1 last;
}
Если в строке замены указаны новые аргументы запроса, то предыдущие аргументы запроса добавляются после них. Если такое поведение нежелательно, можно отказаться от этого добавления, указав в конце строки замены знак вопроса, например:
rewrite ^/users/(.*)$ /show?user=$1? last;
location
ищутся последовательно, но location ~
- с регулярными выражениями ищутся после обычных локейшинов.