LINUX.ORG.RU

nginx + uwsgi - перенаправление запросов.


0

1

Задача: требуется развернуть систему контроля версий и систему управления проектом на основе mercurial и trac.

Решение

Связка trac/mercurial + uwsgi + nginx. Все установлено и работает, но доступ организован не так, как хотелось бы (конфиг nginx):

server {
    listen  server_ip:80;
    location / {
        include  uwsgi_params;
        uwsgi_pass  127.0.0.1:5544; # trac-сокет
    }
}

server {
    listen  server_ip:88;
    location / {
        include  uwsgi_params;
        uwsgi_pass  127.0.0.1:5545; # mercurial-сокет
    }
}
То есть на http://server_ip:80/ мы видим trac, а через http://server_ip:88/ - работаем с репозиторием меркуриал.

Проблема

Не удается разнести trac и mercurial по разным url, а не по разным портам. Т.е. нужно, чтобы trac был доступен по адресу: http://server_ip/trac/projecname, а mercurial - репозиторий: http://server_ip/hg/projecname.

Решение аналогичной задачи силами apache и mod_python

<Location /trac>
      SetHandler mod_python
      PythonInterpreter main_interpreter
      PythonHandler trac.web.modpython_frontend
      # path to trac projects
      PythonOption TracEnvParentDir /var/trac/
      PythonOption TracUriRoot /trac/
</Location>

Аналогов такого функционала в nginx не нашел.

P.S. Прошу не бить тапкой и не советовать перейти на apache, passenger, redmine, git, ... .



Последнее исправление: XSerjo (всего исправлений: 1)

ты все правильно делаешь, только прокси-пассы нужно делать на правильные пути

location /hg { hg... location /track { track...

и со-но корни проектов тоже будут такими (прописать в настройках реальные а не те что за проксей)

trashymichael ★★★
()
Последнее исправление: trashymichael (всего исправлений: 1)
Ответ на: комментарий от trashymichael

Спасибо. Разобрался наконец-то.

Правильный конфиг nginx:

server {
    listen  server_ip:80;
    location /trac {
        uwsgi_pass  127.0.0.1:5544; # trac-сокет
        include  uwsgi_params;
        uwsgi_param SCRIPT_NAME /trac;
        uwsgi_modifier1 30;
    }
}

Казалось-бы, все логично, задаем имя скрипта, которое будем добавлять-вычитать из запросов, но...

uwsgi_modifier1 30;
Вот этот мутный параметр с мутным значением и делает ВСЕ. Вот что пишут в документации к uwsgi:

The uwsgi_modifier1 30 option sets the uWSGI modifier UWSGI_MODIFIER_MANAGE_PATH_INFO. This per-request modifier instructs the uWSGI server to rewrite the PATH_INFO value removing the SCRIPT_NAME from it.

Вот как-то так.

XSerjo
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.