nginx 的 GitLab 别名

nginx 的 GitLab 别名

我已经在一台全新的 Ubuntu 13.04 服务器上安装了 GitLab 6.1,我希望从类似以下位置启动 GitLab

http://192.168.1.5/gitlab

我的 /etc/nginx/sites-available/default 文件:

upstream gitlab {
    server unix:/home/git/gitlab/tmp/sockets/gitlab.socket;
}

server {
    listen 80;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.html index.htm;

    server_name localhost 192.168.1.5;
    server_tokens off;

    location /gitlab {
        alias /home/git/gitlab/public;
        try_files $uri $uri/index.html $uri.html @gitlab;
    }

    location @gitlab {
        proxy_read_timeout 300; 
        proxy_connect_timeout 300; 
        proxy_redirect     off;

        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   Host              $http_host;
        proxy_set_header   X-Real-IP         $remote_addr;

        proxy_pass http://gitlab;
    }

    location / {
        try_files $uri $uri/ /index.html;
   }
}

我是 nginx 新手,但据我所知,别名指令应该类似于 Apache 中的别名。此配置在导航到时只会出现 404

http://192.168.1.5/gitlab

如果我将 /gitlab 位置更改为 / 并注释掉其他 / 位置,我可以导航到

http://192.168.1.5/ 

并访问 GitLab 实例。

编辑

看起来 GitLab 没有正式的子目录,开发人员建议改用子域名。有一些关于子目录的非官方支持和文档。以下是 GitLab 配置文件和此线程中的评论 (https://github.com/gitlabhq/gitlabhq/pull/4670)我能够让它工作:

1)在评论config.relative_url_root = "/myproject"config/application.rb

2)config.assets.version = '1.0.1'更新config/application.rb

relative_url_root: /gitlab3 )评论config/gitlab.yml

4)添加ENV['RAILS_RELATIVE_URL_ROOT'] = "/gitlab"到顶部config/unicorn.rb

5)运行sudo -u git -H RAILS_ENV=production bundle exec rake assets:precompile

6)运行sudo service gitlab restart

7)运行sudo service nginx restart

现在,上面的 nginx 配置在导航到 时会提供 GitLab http:\\192.168.1.5\gitlab。这可能不是生产环境的理想选择,因为它不受 GitLab 官方支持,但它似乎确实有效。

答案1

alias当为目录添加别名时,请确保其对应的路径末尾location都有斜杠/字符。

答案2

对于你关于别名的问题:这有点“棘手”;从文档

此指令指定一个路径,用作处理指定位置请求的基础。请注意,乍一看,它可能与 root 指令相似,但文档根目录不会改变,只是用于请求的文件系统路径会改变。请求的位置部分在 Nginx 发出的请求中被删除。让我们看看实际效果。请考虑以下示例。

location  /i/ {
  alias  /spool/w3/images/;
}

对“/i/top.gif”的请求将指示 Nginx 提供文件“/spool/w3/images/top.gif”。如您所见,只附加了位置后面的 URI 部分。位置本身(在本例中为“/i/”)被删除。使用 root 指令会附加完整路径,即在上面的示例中,它应该是“/spool/w3/images/i/top.gif” — 因此也包括位置“/i/”。

别名也可以在正则表达式指定的位置使用。

例如:

location ~ ^/download/(.*)$ {
  alias /home/website/files/$1;
}

如果可以,请避免使用别名并使用根指令,即使在位置上下文中也是如此。

相关内容