如何配置nginx在SubURI上提供gitlabhq

时间:2012-11-05 12:53:11

标签: ruby-on-rails nginx gitlab

gitlab的nginx配置是:

# GITLAB
# Maintainer: @randx
# App Version: 3.0

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

server {
  listen YOUR_SERVER_IP:80;         # e.g., listen 192.168.1.1:80;
  server_name YOUR_SERVER_FQDN;     # e.g., server_name source.example.com;
  root /home/gitlab/gitlab/public;

  # individual nginx logs for this gitlab vhost
  access_log  /var/log/nginx/gitlab_access.log;
  error_log   /var/log/nginx/gitlab_error.log;

  location / {
    # serve static files from defined root folder;.
    # @gitlab is a named location for the upstream fallback, see below
    try_files $uri $uri/index.html $uri.html @gitlab;
  }

  # if a file, which is not found in the root folder is requested,
  # then the proxy pass the request to the upsteam (gitlab unicorn)
  location @gitlab {
    proxy_read_timeout 300; # https://github.com/gitlabhq/gitlabhq/issues/694
    proxy_connect_timeout 300; # https://github.com/gitlabhq/gitlabhq/issues/694
    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;
  }
}

我应该改变什么才能将gitlab作为surURI服务,www.mysuperserver.com / gitlab

我尝试了很多不同的东西,但没有任何效果 感谢

5 个答案:

答案 0 :(得分:3)

我已经成功地在子网址下工作了。

  • 按照源代码中的说明操作,例如/home/git/gitlab/config/gitlab.yml
    # Uncomment and customize the last line to run in a non-root path
    # WARNING: We recommend creating a FQDN to host GitLab in a root path instead of this.
    # Note that four settings need to be changed for this to work.
    # 1) In your application.rb file: config.relative_url_root = "/gitlab"
    # 2) In your gitlab.yml file: relative_url_root: /gitlab
    # 3) In your unicorn.rb: ENV['RAILS_RELATIVE_URL_ROOT'] = "/gitlab"
    # 4) In ../gitlab-shell/config.yml: gitlab_url: "http://127.0.0.1/gitlab"
    # To update the path, run: sudo -u git -H bundle exec rake assets:precompile RAILS_ENV=production
    #
    relative_url_root: /gitlab
  • 更改nginx配置以提供suburi,请参阅下面的示例:

关键点是root下的serveralias下的location。 Plz参考nginx pitfallsnginx root note了解更多详情。

# default.conf for nginx
upstream gitlab {
  server unix:/home/git/gitlab/tmp/sockets/gitlab.socket;
}
server {
    listen       80;
    server_name  $YOUR_DOMAIN;
    # other settings, especially root settings, like below
    # root /usr/local/nginx/html;
    location /gitlab {
        # serve static files from defined root folder;
        alias /home/git/gitlab/public;

        # individual nginx logs for this gitlab vhost
        access_log  /var/log/nginx/gitlab_access.log;
        error_log   /var/log/nginx/gitlab_error.log;

        # @gitlab is a named location for the upstream fallback, see below
        try_files $uri $uri/index.html $uri.html @gitlab;
    }

    location @gitlab {
        proxy_read_timeout 300; # https://github.com/gitlabhq/gitlabhq/issues/694
        proxy_connect_timeout 300; # https://github.com/gitlabhq/gitlabhq/issues/694
        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_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;

        proxy_pass http://gitlab;
    }
    # other locations' settings...
}

答案 1 :(得分:2)

从Gitlab 5.3开始,您可以使用官方安装文档将其配置为在开箱即用的suburi中运行。

取消注释config / puma.rb的第8行: ENV ['RAILS_RELATIVE_URL_ROOT'] =“/”

同样适用于config / gitlab.yml中的第23行: relative_url_root:/

我没有必要修改我的nginx配置才能使用它。

答案 2 :(得分:2)

对于旧版本,例如gitlab 7.4.5,没有gitlab-git-http-server(gitlab-workhorse)。但是gitlab 7.4.5有一些解决方案可以在doc中使用suburi。

config/application.rb

# Relative url support
# Uncomment and customize the last line to run in a non-root path
# WARNING: We recommend creating a FQDN to host GitLab in a root path instead of this.
# Note that following settings need to be changed for this to work.
# 1) In your application.rb file: config.relative_url_root = "/gitlab"
# 2) In your gitlab.yml file: relative_url_root: /gitlab
# 3) In your unicorn.rb: ENV['RAILS_RELATIVE_URL_ROOT'] = "/gitlab"
# 4) In ../gitlab-shell/config.yml: gitlab_url: "http://127.0.0.1/gitlab"
# 5) In lib/support/nginx/gitlab : do not use asset gzipping, remove block starting with "location ~ ^/(assets)/"
#
# To update the path, run: sudo -u git -H bundle exec rake assets:precompile RAILS_ENV=production
#
# config.relative_url_root = "/gitlab"

config/gitlab.yml

# WARNING: See config/application.rb under "Relative url support" for the list of
# other files that need to be changed for relative url support
# relative_url_root: /gitlab

在nginx配置或apache配置文件中使用相同端口和相同域名的其他网站配置gitlab 7.4.5似乎仍然是一个挑战。我没有得到这个。我可以访问gitlab作为www.mydomain.com/gitlab,但我没有将我的另一个网站放在www.mydomain.com的另一个根目录中。它应该通过配置nginx或apache来解决。希望熟悉nginx或apache的人能够提供解决方案。

其他参考资料。Support installing GitLab in a relative URL path or sub directory #1950

修改
现在有效。

stackoverflow建议在这里使用www.example.com作为示例。

www.example.com/gitlab访问gitlab。

www.example.com访问另一个网站,比如我的博客。

步骤:

  1. config / application.rb文件:config.relative_url_root =“/ gitlab”
  2. config / gitlab.yml文件:relative_url_root:/ gitlab
  3. config / unicorn.rb:ENV ['RAILS_RELATIVE_URL_ROOT'] =“/ gitlab”
  4. ../ gitlab-shell / config.yml:gitlab_url:"http://www.example.com/gitlab"
  5. 将lib / support / nginx / gitlab复制到gitlab.conf以获取nginx,不要使用asset gzipping,删除以"location ~^/(assets)/"开头的块
  6. run:sudo -u git -H bundle exec rake assets:precompile RAILS_ENV =生产
  7. 的url:

    1. config / gitlab.yml file:host:example.com port:80
    2. config / unicorn.rb:listen“127.0.0.1:9095”
    3. ../ gitlab-shell / config.yml:gitlab_url:         http://www.example.com/gitlab
    4. gitlab将为git提供两种访问方式:

      1. git@example.com:样品project.git
      2. http://example.com/gitlab/sample-project.git
      3. 我没有使用https。

        如果你有:

        您可以将config/gitlab.yml配置为host: example.com/gitlab。只需删除/gitlab

        即可

        nginx配置文件:

        ###################################
        ##         configuration         ##
        ###################################
        ##
        
        upstream gitlab {
          server unix:/home/git/gitlab/tmp/sockets/gitlab.socket fail_timeout=0;
        }
        
        ## Normal HTTP host
        server {
          #listen *:80 default_server;
          listen *:80 default_server;
          server_name www.example.com; ## Replace this with something like gitlab.example.com
          server_tokens off; ## Don't show the nginx version number, a security best practice
          #root /home/git/gitlab/public;
          root html;
          location /{
            #root html;
            index index.html index.htm;
          }
          ## Increase this if you want to upload large attachments
          ## Or if you want to accept large git objects over http
          client_max_body_size 20m;
        
          ## Individual nginx logs for this GitLab vhost
          access_log  logs/example.gitlab_access.log;
          error_log   logs/example.gitlab_error.log;
        
          location /gitlab {
            alias /home/git/gitlab/public;
        
            ## Serve static files from defined root folder.
            ## @gitlab is a named location for the upstream fallback, see below.
            try_files $uri $uri/index.html $uri.html @gitlab;
          }
        
          ## If a file, which is not found in the root folder is requested,
          ## then the proxy passes the request to the upsteam (gitlab unicorn).
          location @gitlab {
            ## If you use HTTPS make sure you disable gzip compression
            ## to be safe against BREACH attack.
            # gzip off;
        
            ## https://github.com/gitlabhq/gitlabhq/issues/694
            ## Some requests take more than 30 seconds.
            proxy_read_timeout      300;
            proxy_connect_timeout   300;
            proxy_redirect          off;
        
            proxy_set_header    Host                $http_host;
            proxy_set_header    X-Real-IP           $remote_addr;
            proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
            proxy_set_header    X-Forwarded-Proto   $scheme;
            proxy_set_header    X-Frame-Options     SAMEORIGIN;
        
            proxy_pass http://gitlab;
          }
        
          ## Enable gzip compression as per rails guide:
          ## http://guides.rubyonrails.org/asset_pipeline.html#gzip-compression
          ## WARNING: If you are using relative urls remove the block below
          ## See config/application.rb under "Relative url support" for the list of
          ## other files that need to be changed for relative url support
          #location ~ ^/(assets)/ {
          #  root /home/git/gitlab/public;
          #  #gzip_static on; # to serve pre-gzipped version
          #  expires max;
          #  add_header Cache-Control public;
          #}
        
          error_page 502 /502.html;
        }
        

        Apache(2.2.9)配置文件:gitlab 6.0.6的引用gitlab.conf和apache 2.2上的gitlab 8.0.0的gitlab-8.0-apache2.2.conf

        #  Module dependencies
        #  mod_rewrite
        #  mod_proxy
        #  mod_proxy_http
        <VirtualHost *:80>
        
        
          ServerAdmin admin@example.com
          DocumentRoot "/data/webapp/www/wordpress"
        
          ServerName www.example.com
          ServerAlias example.com
        
          #ErrorLog "logs/wordpress-error_log"
          #CustomLog "logs/wordpress-access_log" common
        
            #SetEnv ZF2_PATH "/data/webapp/www/ZendFramework-2.3.3/library"
          SetEnv APPLICATION_ENV "development"
          <Directory /data/webapp/www/wordpress>
            DirectoryIndex index.php
            AllowOverride All
            Order allow,deny
            Allow from all
          </Directory>
        
          #ServerName www.example.com
          ServerSignature Off
        
          ProxyPreserveHost On
        
          # Ensure that encoded slashes are not decoded but left in their encoded state.
          # http://doc.gitlab.com/ce/api/projects.html#get-single-project
          AllowEncodedSlashes NoDecode
        
          <Location /gitlab>
            Order deny,allow
            Allow from all
        
            ProxyPassReverse http://127.0.0.1:9095
            ProxyPassReverse http://www.example.com//
        
            RewriteEngine on
            #RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
            RewriteRule .* http://127.0.0.1:9095%{REQUEST_URI} [P,QSA,NE]
          </Location>
        
          #apache equivalent of nginx try files
          # http://serverfault.com/questions/290784/what-is-apaches-equivalent-of-nginxs-try-files
          # http://stackoverflow.com/questions/10954516/apache2-proxypass-for-rails-app-gitlab
          #  RewriteEngine on
          #  RewriteCond /code/gitlab/{REQUEST_FILENAME} !-f
          #  RewriteRule .* http://127.0.0.1:9095%{REQUEST_URI} [P,QSA,NE]
        
          # needed for downloading attachments
          #DocumentRoot /home/git/gitlab/public
          Alias /gitlab /home/git/gitlab/public
          #Set up apache error documents, if back end goes down (i.e. 503 error) then a maintenance/deploy page is thrown up.
          ErrorDocument 404 /404.html
          ErrorDocument 422 /422.html
          ErrorDocument 500 /500.html
          ErrorDocument 503 /deploy.html
        
          LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common_forwarded
          ErrorLog  logs/example.com_error.log
          CustomLog logs/example.com_forwarded.log common_forwarded
          CustomLog logs/example.com_access.log combined env=!dontlog
          CustomLog logs/example.com.log combined
        
        </VirtualHost>
        

答案 3 :(得分:1)

你有没有解决这个问题?

如果没有,请尝试将location /指令更新为:

location /gitlab {
  # serve static files from defined root folder;.
  root /home/gitlab/gitlab/public;
  # @gitlab is a named location for the upstream fallback, see below
  try_files $uri $uri/index.html $uri.html @gitlab;
}

如果不起作用,请粘贴/var/log/nginx/gitlab_error.log的最后几行。

答案 4 :(得分:-1)

此配置有效

# GITLAB
# Maintainer: @randx
# App Version: 3.0

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

server {
  listen 80;         # e.g., listen 192.168.1.1:80; 37.59.125.28:
  server_name gitlab.<YOUR_DOMAIN>.com;     # e.g., server_name source.example.com;
  root /home/gitlab/gitlab/public;

  # individual nginx logs for this gitlab vhost
  access_log  /var/log/nginx/gitlab_access.log;
  error_log   /var/log/nginx/gitlab_error.log;

  location / {
    # serve static files from defined root folder;.
    # @gitlab is a named location for the upstream fallback, see below
    try_files $uri $uri/index.html $uri.html @gitlab;
  }

  # if a file, which is not found in the root folder is requested,
  # then the proxy pass the request to the upsteam (gitlab unicorn)
  location @gitlab {
    proxy_read_timeout 300; # https://github.com/gitlabhq/gitlabhq/issues/694
    proxy_connect_timeout 300; # https://github.com/gitlabhq/gitlabhq/issues/694
    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;
  }
}

我在nginx可用配置和启用配置之间存在错误的符号链接。