使用gitlab的nginx来提供另一个应用程序

时间:2014-06-06 21:07:00

标签: nginx gitlab gitlab-ci

您好我已经使用这个安装了Gitlab https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md#installation

现在我想使用nginx来提供除gitlab应用程序之外的其他内容 我怎么能这样做

  • 我需要修改的配置文件在哪里
  • 如何指定像/ var / www这样的目录,以便nginx知道这是另一个应用程序的根目录。

更新(忘了提到我在Red Hat 6.5,Debian / Ubuntu解决方案欢迎下运行这个)

5 个答案:

答案 0 :(得分:7)

vndr的上述解决方案可行,但在https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/nginx.md上,它说:

  

将自定义设置插入NGINX配置

     

例如,如果您需要将自定义设置添加到NGINX配置中   要包含现有服务器块,您可以使用以下设置。

     

示例:包含扫描其他配置文件的目录nginx ['custom_nginx_config'] =“include /etc/nginx/conf.d / * .conf;”

那么让我们检查你的/opt/gitlab/embedded/cookbooks/gitlab/templates/default/nginx.conf.erb,看看它是否包含:<%= @custom_nginx_config%> (看起来当前的gitlab-7.5.3_omnibus.5.2.1.ci-1.el6.x86_64.rpm不包含它)

如果没有,那么只需将其添加到 include<%= @gitlab_http_config%>; 之类的行上方:

<%= @custom_nginx_config %>
include <%= @gitlab_http_config %>;

然后打开/etc/gitlab/gitlab.rb添加: nginx ['custom_nginx_config'] =“include /etc/nginx/conf.d / * .conf;”

我们可以简单地添加: include /etc/nginx/conf.d / * .conf; 而不是&lt;%= @custom_nginx_config%&gt;

然后在/etc/nginx/conf.d/和gitlab-ctl重新配置中创建普通的nginx .conf文件

答案 1 :(得分:6)

我在这里使用

- gitlab.example.com to serve gitlab.example.com over https.
- example.com over http to serve another content other than gitlab application.

从deb软件包安装的Gitlab正在使用chef来配置ngnix,所以你必须修改厨师收件人并将新的vhost模板添加到chef cookbooks目录中

您可以在这里找到所有厨师食谱: 的/ opt / gitlab /嵌入/食谱/ gitlab /

开 /opt/gitlab/embedded/cookbooks/gitlab/recipes/nginx.rb

变化:

nginx_vars = node['gitlab']['nginx'].to_hash.merge({
  :gitlab_http_config => File.join(nginx_etc_dir, "gitlab-http.conf"),
})

为:

nginx_vars = node['gitlab']['nginx'].to_hash.merge({
  :gitlab_http_config => File.join(nginx_etc_dir, "gitlab-http.conf"),
  :examplecom_http_config => File.join(nginx_etc_dir, "examplecom-http.conf"),
})

将其添加到同一个文件中:

template nginx_vars[:examplecom_http_config] do
  source "nginx-examplecom-http.conf.erb"
  owner "root"
  group "root"
  mode "0644"
  variables(nginx_vars.merge(
    {
      :fqdn => "example.com",
      :port => 80,
    }
  ))
  notifies :restart, 'service[nginx]' if OmnibusHelper.should_notify?("nginx")
end

然后在模板目录(/ opt / gitlab / embedded / cookbooks / gitlab / templates / default)中,创建nginx vhost模板文件(nginx-examplecom-http.conf.erb)并在其中添加:

server {
  listen <%= @listen_address %>:<%= @port %>;
  server_name <%= @fqdn %>;
  root /var/www/example.com;

  access_log  <%= @log_directory %>/examplecom_access.log;
  error_log   <%= @log_directory %>/examplecom_error.log;

  location /var/www/example.com {
    # 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;
  }

  error_page 502 /502.html;
}

你必须在(/etc/gitlab/gitlab.rb)中设置 nginx [&#39; redirect_http_to_https&#39;] = false

external_url "https://gitlab.example.com"
gitlab_rails['gitlab_email_from'] = "info@example.com"
gitlab_rails['gitlab_support_email'] = "support@example.com"



nginx['redirect_http_to_https'] = false
nginx['ssl_certificate'] = "/etc/gitlab/ssl/ssl-unified.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/ssl.key"


gitlab_rails['gitlab_default_projects_limit'] = 10

include&lt;%= @examplecom_http_config%&gt ;; 添加到/opt/gitlab/embedded/cookbooks/gitlab/templates/default/nginx.conf.erb:

http {
  sendfile <%= @sendfile %>;
  tcp_nopush <%= @tcp_nopush %>;
  tcp_nodelay <%= @tcp_nodelay %>;

  keepalive_timeout <%= @keepalive_timeout %>;

  gzip <%= @gzip %>;
  gzip_http_version <%= @gzip_http_version %>;
  gzip_comp_level <%= @gzip_comp_level %>;
  gzip_proxied <%= @gzip_proxied %>;
  gzip_types <%= @gzip_types.join(' ') %>;

  include /opt/gitlab/embedded/conf/mime.types;

  include <%= @gitlab_http_config %>;
  include <%= @examplecom_http_config %>;
}

完成所有这些更改后:

gitlab-ctl reconfigure
gitlab-ctl restart

答案 2 :(得分:4)

由于我不想更改gitlab Nginx服务器的配置,也不想安装/配置另一个Nginx并确保gitlab能够在重大更新后继续存在,因此我在 Gitlab Omnibus软件包下面找到了解决方案

也按照

Gitlab:Ningx =>Inserting custom settings into the NGINX config

编辑你的gitlab的/etc/gitlab/gitlab.rb:

nano /etc/gitlab/gitlab.rb

并滚动到nginx [&#39; custom_nginx_config&#39;]并修改如下,确保取消注释

# Example: include a directory to scan for additional config files
nginx['custom_nginx_config'] = "include /etc/nginx/conf.d/*.conf;"

创建新的配置目录:

mkdir -p /etc/nginx/conf.d/
nano /etc/nginx/conf.d/new_app.conf

并将内容添加到新配置中:/etc/nginx/conf.d/new_app.conf

server {
  listen *:80;
  server_name new_app.mycompany.com;
  server_tokens off;
  access_log  /var/log/new_app_access.log;
  error_log   /var/log/new_app_error.log;

  root /var/www/html/new_app/;
  index index.html index.htm;

 }

并重新配置gitlab以插入新设置

gitlab-ctl reconfigure

在更改配置后重新启动nginx或在/etc/nginx/conf.d中添加更多配置:

gitlab-ctl restart nginx

检查nginx错误日志:

tail -f /var/log/gitlab/nginx/error.log

并查看https://stackoverflow.com/a/39695791/6821811以重定向到其他应用程序服务器。

答案 3 :(得分:3)

我尝试了两种方法,而对我有用的方法是将一个干净的NGINX放在gitlab内置的一个上面。从长远来看,它更容易/方便。

根据您的需要,这里有一些至关重要的事项必须先到位:

  • 您的网络/路由器/等的DNS设置。 (否则这将无效,因为此处的配置基于服务器名称,)
  • 我的设置是一个简单的服务器,多个站点托管在同一服务器IP中,我通过NGINX名称过滤器命名应用程序进行过滤。

以下是要遵循的主要步骤,请记住,根据您的需要,这可能意味着更多的调整,这也是 Ubuntu Server 14.04

  1. 首先停用主要的Nginx(与综合捆绑的那个)编辑 /etc/gitlab/gitlab.rb

    nginx['enable'] = false ci_nginx['enable'] = false

  2. 现在您可以自由安装 NGINX 的干净实例。
  3. 关于上一步:有时安装程序不会创建网站启用/ 网站可用/ 文件夹,创建它们并确保将它们包含在 /etc/nginx/nginx.conf 文件中

    include /etc/nginx/sites-enabled/*.conf;

  4. 在一般的nginx工作流程中,您将网站配置包含在 sites-available / 下,然后当您准备好/开心时,您可以链接到 sites-enabled / 文件夹,重新启动nginx以使更改生效
  5. 将您的Gitlab配置添加到Nginx site-available / 文件夹
  6. 这是我的conf:

    `upstream gitlab-workhorse {
      server unix:/var/opt/gitlab/gitlab-workhorse/socket;
    }
    
    ## Normal HTTP host
    server {
      ## Either remove "default_server" from the listen line below,
      ## or delete the /etc/nginx/sites-enabled/default file. This will cause gitlab
      ## to be served if you visit any address that your server responds to, eg.
      ## the ip address of the server (http://x.x.x.x/)n 0.0.0.0:80 default_server;
      #listen 0.0.0.0:80 default_server;
      listen 0.0.0.0:80 ;
    #  listen [::]:80 default_server;
      server_name gitlab.mycompany.com; ## Replace this with something like gitlab.example.com
      server_tokens off; ## Don't show the nginx version number, a security best practice
      root /opt/gitlab/embedded/service/gitlab-rails/public;
    
      ## See app/controllers/application_controller.rb for headers set
    
      ## Individual nginx logs for this GitLab vhost
      access_log  /var/log/nginx/gitlab.access.log;
      error_log   /var/log/nginx/gitlab.error.log;
    
      location / { 
        client_max_body_size 0;
        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_http_version 1.1;
    
        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_pass http://gitlab-workhorse;
          }
        } 
    

    您可以在more options

    中找到有关配置的更多详细信息
    1. 重新启动/重新加载nginx

      sudo service nginx restart

    2. 重新启动gitlab omnibus并检查您的Gitlab配置

      sudo gitlab-ctl reconfigure

      sudo gitlab-ctl tail (只是为了检查你的gitlab配置是否有问题)

    3. / etc / nginx / sites-available / 中添加额外的(根据需要)您需要的服务器配置,最后在happy / ready时添加指向的链接的/ etc / nginx的/网站启用/
      这是另一个应用程序的另一个例子

      upstream app_server {
          server 127.0.0.1:9080 fail_timeout=0;
      }
      server {
          listen 80; 
          server_name jenkins.mycompany.com;    
          access_log            /var/log/nginx/jenkins.access.log;
          location / { 
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header Host $http_host;
              proxy_redirect off;
              if (!-f $request_filename) {
                  proxy_pass http://app_server;
                  break;
              }
      
          }   
      }
      
    4. 请记住始终重启/重新加载nginx,以便您看到更改。

      sudo service nginx restart

    5. 检查日志以防出现问题 /var/log/nginx/anysites*.log

    6. 请注意,我们在这里使用上游有不同的端口和名称(它们存在/是真实的/在您公司的域中注册)都指向相同的IP地址,这意味着NIGNX会找到相同的IP地址,但由于上游的端口不同而不会中断,这非常重要

    7. 这就是我的配置现在如何工作我没有与Gitlab或任何其他应用程序有任何问题 所以希望这会帮助那里的任何人。

答案 4 :(得分:2)

这些“其他内容”在NGiNX中声明为“ Server Blocks ”。

GitLab一个位于/etc/nginx/sites-available/gitlab(根据documentation,并且在[/etc/nginx/sites-enabled][3]中包含在内)。
您可以在其中添加其他服务器块,类似于此(您可能必须选择不同的端口号),如图所示in this process(已更新here for Ubuntu 14.04

server {
        listen   80; ## listen for ipv4; this line is default and implied
        #listen   [::]:80 default ipv6only=on; ## listen for ipv6

        root /var/www/example.com/public_html;
        index index.html index.htm;

        # Make site accessible from http://localhost/
        server_name example.com;
}

root指令应引用您的webapp的根文件夹(/var/www或更可能是/var/www的子文件夹)。

该服务器块与任何GitLab配置完全分开。