Неработающие ссылки в hg служат за nginx через proxy_pass - PullRequest
2 голосов
/ 09 декабря 2011

У меня есть простой стек Ubuntu 10.10, Nginx, Mercurial, PHP и MySQL.

Текущая структура файла:

/opt/nginx/html - document root for nginx (where my website files are)
/opt/nginx/html/.hg - repository data
/usr/share/mercurial/ - where the templates/static folder is

Я использую hg -serve, которая находится на локальном хосте: 8000. У меня нет четкого понимания того, как mercurial связан с его ресурсами после этого момента.

У меня есть следующая конфигурация Nginx для моей желаемой точки входа:

location /mercurial/ {
    auth_basic    "Authentication";
    auth_basic_user_file    /opt/nginx/html/.hg/file.password;
    proxy_pass    http://localhost:8000/;
}

Это работает нормально, за исключением полной загрузки Mercurial Instance после аутентификации. Я получаю страницу, которую ожидаю увидеть, но ссылки / static не работают, и ссылки, на которые я нажимаю, например, один из наборов изменений, также не работают (они не найдены или возвращают меня на сломанную главную страницу). Он пытается найти эти файлы по адресу my-ip-address / static / ..., что неверно.

Каталог пользовательского интерфейса mercurial находится за пределами моего документа root / opt / nginx / html. Путь, где / static на самом деле: / usr / share / mercurial / templates Это проблема? Что файлы находятся вне моего корня документа nginx? Когда работает Mercurial, где находится / rev и как я могу убедиться, что Mercurial работает правильно с правильными URL ресурсов?

Примечание : Просто перейдите по my-ip-адресу: 8000 работает на 100%. Ничего не сломано и нет CSS или JS отсутствует. Проблема происходит в отношении proxy_pass.

Как правильно связать эти файлы? Требуется ли перезапись?

Ответы [ 2 ]

2 голосов
/ 09 декабря 2011

Проблема в том, что по умолчанию веб-сервер, запущенный с hg serve, не добавляет префикса к генерируемым URL-адресам. Он не может знать, что вы - запрос на пропуск прокси-сервера NGinx для / mercurial.

Вы должны установить префикс для использования с опцией --prefix. hg help serve говорит нам об этой опции:

- префикс пути префикса PREFIX для обслуживания (по умолчанию: корневой каталог сервера)

Так что просто запустите сервер так: hg serve --prefix mercurial и все должно быть хорошо! (не забудьте удалить свой псевдоним ...)

Если вы предпочитаете, параметр префикса также может быть установлен в файле конфигурации, если он у вас есть:

[web]
prefix = mercurial
1 голос
/ 11 декабря 2011

Soultion: мне нужно было добавить следующее в мой конфигурационный файл NGINX:

proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
...