我有一个简单的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
我正在运行在localhost:8000托pipe的hg -serve。 在这一点之后,我并不清楚水银是如何与资源相联系的。
我有我想要的入口点下面的Nginxconfiguration:
location /mercurial/ { auth_basic "Authentication"; auth_basic_user_file /opt/nginx/html/.hg/file.password; proxy_pass http://localhost:8000/; }
这可以正常工作,除了在validation之后完全加载Mercurial实例。 我得到了我期望看到的页面,但/静态引用都被打破,我点击的链接(如其中一个变更集)也被中断(找不到它们,或者带我回到破碎的主页面)。 它试图find这些文件在我的IP地址/静态/ …这是不正确的。
mercurial ui目录位于我的文档根目录/ opt / nginx / html之外。 where / static的path是/ usr / share / mercurial / templates这是问题吗? 那些文件在我的nginx文档根目录之外? 当mercurial运行在哪里/ rev,我如何确保mercurial正确运行正确的资源URL?
注意 :只要到我的IP地址:8000工作100%。 没有什么是坏的,没有CSS或JS丢失。 proxy_pass问题正在发生。
我怎样才能正确地链接这些文件? 是否需要重写?
问题是,默认情况下,使用hg serve
启动的Web服务器不会为其生成的URL添加任何前缀。 它没有办法知道你是对/ mercurial位置的NGinx代理通行证请求。
您必须设置与--prefix
选项一起使用的前缀。 hg help serve
告诉我们这个选项:
–prefix从前缀PREFIX前缀路径(默认:服务器根目录)
所以只需要这样运行服务器: hg serve --prefix mercurial
,一切都应该没问题! (不要忘记删除你的别名…)
如果您愿意,也可以在配置文件中设置前缀选项(如果有):
[web] prefix = mercurial
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;