Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Отдача картинок не через nginx на определенных URL  (Прочитано 8560 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Lemberg

  • Автор темы
  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Сервер настроен таким образом что статические документы отдаются через nginx, все остальные запросы передаются Apache.
Проблемма в том что есть капатча, которая генерируеться динамично, есть ссылки в настройках apache (допустим тот-же phpmyadmin), nginx логично не может их выдавать если вся статика проходит только через него.

Вопрос: как задать исключения на определенный URI в конфиге nginx?

Пример: есть установленный phpmyadmin на который можно попасть по адресу http://la-la-fa.loc/phpmyadmin/
/phpmyadmin/ - это ссылка
Alias /phpmyadmin /usr/share/phpmyadminnginx успешно передает обработку Apache, но статику он пытаеться отправить сам, т.к. физически директории /phpmyadmin/ нет то все статические файлы просто не выдаються.

Настройки nginx:
server {
    listen   80;
    server_name www.userver.loc userver.loc;

    access_log /var/log/nginx/userv.loc/nginx_access.log;
    error_log  /var/log/nginx/userv.loc/nginx_error.log;

    # Перенаправление на back-end
    location / {
        proxy_pass  http://127.0.0.1:8080/;
        include     /etc/nginx/proxy.conf;
    }

    # Статическиое наполнение отдает сам nginx
    # back-end этим заниматься не должен
    location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ {
        root /var/www/;
    }
}

Оффлайн Ve0

  • Активист
  • *
  • Сообщений: 262
    • Просмотр профиля
    • bUbuntu.spb.ru
+1 к вопросу. такая же проблема. так и не смог найти решения.

Пользователь решил продолжить мысль 08 Мая 2010, 22:56:22:
Если закоментить:
    location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ {
        root /var/www/;
    }

то все работает. Но тогда статикой будет заниматься бэкэнд. И тогда теряется смысл всей конструкции.
« Последнее редактирование: 08 Мая 2010, 22:56:22 от Ve0 »
bUbuntu - In a world without walls who needs Windows?..

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Думаю, что такой конфиг nginx поможет в решенни этих вопросов:

server {
listen 80;
server_name www.userver.loc userver.loc;
include /etc/nginx/proxy.conf;

location / {
root /var/www/;
index index.php index.html index.htm;
}

error_page 404 /404.php;

# redirect server error pages to the static page /50x.html
error_page 500 502 503 504  /50x.html;
location = /50x.html {
root /var/www/nginx-default;
}

location ~ ^/phpmyadmin/ {
proxy_pass http://127.0.0.1:8080;
}

location ~ .php$ {
proxy_pass http://127.0.0.1:8080;
}

location ~ /$ {
proxy_pass http://127.0.0.1:8080;
}

        # deny access to .htaccess files
location ~ /.ht {
deny all;
}
}

Пользователь решил продолжить мысль 09 Мая 2010, 00:42:10:
Данная настройка не подразумевает доступ по https (443 порт).
« Последнее редактирование: 09 Мая 2010, 00:42:10 от unimix »

Оффлайн Ve0

  • Активист
  • *
  • Сообщений: 262
    • Просмотр профиля
    • bUbuntu.spb.ru
При таком конфиге статикой кто занимается? nginx?
bUbuntu - In a world without walls who needs Windows?..

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Nginx занимается всем, кроме заканчивающихся на ".php", заканчивающихся на "/" и начинающихся с "/phpmyadmin/". То есть, nginx не занимается обработкой файлов php и индексных файлов, а также всех ресурсов, находящихся в "/phpmyadmin/". Если запрос начинается с "/.ht", то доступ запрещается. В конце концов, всё можно посмотреть в логах.

Оффлайн Ve0

  • Активист
  • *
  • Сообщений: 262
    • Просмотр профиля
    • bUbuntu.spb.ru
Тогда встречный вопрос:
    location ~* .(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ {
        root /var/www/;
    }
вот эта строчка для чего? и нужна ли она вообще?

Заранее спасибо за ответ! )

Пользователь решил продолжить мысль 09 Мая 2010, 15:56:43:
и еще, у меня несколько виртуальных хостов. данные параметры нужно выставлять каждому хосту?
и такой вопрос, статикой, которая находится при выводе php страницы тоже занимается nginx?
« Последнее редактирование: 10 Мая 2010, 02:42:23 от Ve0 »
bUbuntu - In a world without walls who needs Windows?..

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Тогда встречный вопрос:
    location ~* .(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ {
        root /var/www/;
    }
вот эта строчка для чего? и нужна ли она вообще?

Здесь описано, откуда брать файлы, оканчивающиеся на .jpg или .jpeg и т.д.

Данный блок нужен, если в конфигурации сервера написано, что все (location /) брать с апача, а файлы с этими расширениями (location ~* .(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$) брать из директории. Та конфигурация, что я показал постом выше, работает по-другому: что все (location /) брать из директории, а php файлы (location ~ .php$) и т.д. брать с апача. На самом деле не обязательно должны существовать php файлы физически, просто должны запрашиваться такие ресурсы, а апач сам выдаст то, что надо.


и еще, у меня несколько виртуальных хостов. данные параметры нужно выставлять каждому хосту?

Да, желательно. Это позволяет настраивать каждый хост по-своему. Но можно прописать общие настройки в каком-нибудь файле и инклудить для нужных хостов. Например, так инклудится файл с общими настройками проксирования:

include /etc/nginx/proxy.conf;

Пользователь решил продолжить мысль 10 Мая 2010, 02:43:12:
Забыл написать, что для редкоизменяемых файлов (location ~* .(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$) можно указать expires, т.е. время, в течении которого эти файлы не будут изменены. В основном браузеры их кэшируют и повторных запросов на них не делают.

    location ~* .(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ {
        root /var/www/;
        expires 30d;
    }
« Последнее редактирование: 10 Мая 2010, 02:43:12 от unimix »

Оффлайн Ve0

  • Активист
  • *
  • Сообщений: 262
    • Просмотр профиля
    • bUbuntu.spb.ru
с этим разобрался) спасибо огромное.
но все еще не понятно, при Вашей конфигурации nginx когда отправляет запрос на апач на обработку php и получает статику, то картинки и стили он тащит через апачу или всетаки сам обрабатывает?

И тогда вопрос еще возник. Что более эффективно для сайта с нагрузкой? когда он фильтрует (location ~* .(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$) или Ваша схема, когда сам все делает, но php обрабатывает апач?
bUbuntu - In a world without walls who needs Windows?..

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
с этим разобрался) спасибо огромное.
но все еще не понятно, при Вашей конфигурации nginx когда отправляет запрос на апач на обработку php и получает статику, то картинки и стили он тащит через апачу или всетаки сам обрабатывает?

Ваш вопрос демонстрирует полное непонимание вами протокола HTTP... Это печально.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн Ve0

  • Активист
  • *
  • Сообщений: 262
    • Просмотр профиля
    • bUbuntu.spb.ru
Ваш вопрос демонстрирует полное непонимание вами протокола HTTP... Это печально.

Не отрицаю что я многое не знаю. Поэтому и задаю вопросы. И если бы мне объяснили или сказали куда рыть, то был бы благодарен.
И мне не до конца понятно как работает эта связка (nginx + apache).
« Последнее редактирование: 10 Мая 2010, 06:21:26 от Ve0 »
bUbuntu - In a world without walls who needs Windows?..

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Но вы задаёте вопрос, который не имеет смысла...
Поставьте любой прокси-сервер и разберитесь для начала, что вообще запрашивается от сервера при запросе странички.
Я думаю, это ответит на многие вопросы. Подсказка - HTTP сервер работает с каждым запросом по отдельности, ничего не зная о предыдущих или последующих.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

 

Страница сгенерирована за 0.054 секунд. Запросов: 23.