Использование nginx gitlab для обслуживания другого приложения

Привет, я установил Gitlab, используя this
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md#installation

теперь я хочу использовать nginx для обслуживания другого контента, кроме приложения gitlab как я могу это сделать!--4-->

  • где файлы конфигурации, которые мне нужно изменить
  • как я могу указать каталог, как /var / www, чтобы nginx знал, что это корень для другого приложения.

обновление(забыл чтобы упомянуть, что я запускаю это под Red Hat 6.5, Debian / Ubuntu solution welcome)

6 ответов


решение vndr выше будет работать, но на https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/nginx.md, он сказал:

вставка пользовательских настроек в конфигурацию NGINX

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

пример: включите каталог для сканирования дополнительных файлов конфигурации nginx ['custom_nginx_config'] = "включить /etc/nginx/conf.д.*/conf;"

Итак, давайте проверим ваши /опт/гитлаб/встроенные/кулинарные книги/гитлаб/шаблоны/по умолчанию/с nginx.conf.erb, чтобы увидеть, содержит ли он: (похоже на текущий gitlab-7.5.3_омнибус.5.2.1.СИ-1.el6.x86_64.rpm не включает его)

если нет, то просто добавьте его над строкой добавить ; как:

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

затем откройте файл /etc/gitlab / gitlab.РБ добавить: nginx ['custom_nginx_config'] = "включить /etc/nginx/conf.д.*/conf;"

мы можем сделать это, просто просто добавить: включить /etc/nginx / conf.д.*/conf; вместо

затем создайте нормальный nginx .файлы conf в /etc/nginx / conf.D / и GitLab-ctl реконфигурировать


здесь я использую

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

GitLab, установленный из пакета deb, использует chef для предоставления ngnix, поэтому вам нужно изменить рецепты шеф-повара и добавить новый шаблон vhost в каталог кулинарных книг шеф-повара

здесь вы можете найти все книги рецептов шеф-повара : / opt/gitlab / встроенные / кулинарные книги/gitlab/

открыть /опт/гитлаб/встроенные/кулинарные книги/гитлаб/рецепты/с 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

затем в папку с шаблоном(/опт/гитлаб/встроенные/кулинарные книги/гитлаб/шаблоны/по умолчанию), создать файл шаблона с nginx виртуального хоста( сервера 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;
}

вы должны установить nginx ['redirect_http_to_https'] = false в (в/etc/гитлаб/гитлаб.rb):

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

добавить добавить ; into/opt/gitlab/embedded/cookbooks/GitLab/шаблоны/по умолчанию / nginx.conf.Эрб :

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

даже если вы действительно можете это сделать, лучше использовать отдельный сервер nginx верхнего уровня для обслуживания nginx gitlab и другого пользовательского контента. Nginx Gitlab может изменить его конфигурацию в любое время, и он может сломать ваш пользовательский контент. Кроме того, отдельный nginx полностью Ваш для настройки.

просто установите эти два экземпляра на разные порты и прокси-сервер GitLab nginx с верхним. Причина, это будет накладные расходы, но совершенно незначительные один.


Я пробовал оба подхода, и тот, который работал для меня, должен был поставить чистый NGINX поверх встроенного gitlab. его более легко / удобно в долгосрочной перспективе.

в зависимости от ваших потребностей, вот некоторые важно вещей, которые должны быть на месте:

  • настройки DNS вашей сети / маршрутизатора / etc. (иначе это не сработает, так как конфигурации здесь основаны на именах серверов,)
  • моя настройка тривиальна один сервер, несколько сайтов, размещенных на одном IP-сервере, и я фильтрую, называя приложения через фильтр имен NGINX.

вот основные шаги, чтобы следовать, имейте в виду, что в зависимости от ваших потребностей это может означать более тонкая вокруг, и это Ubuntu Server 14.04 .

  1. сначала деактивируйте основной Nginx (в комплекте с omnibus) edit / etc/gitlab / gitlab.rb

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

  2. теперь вы можете бесплатно установить чистый экземпляр nginx и.
  3. Что касается предыдущего шага: иногда установщик не создает сайты с поддержкой/ и сайты-доступны/ папки, создайте их и обязательно включите их в /и т. д./nginx/nginx в.conf

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

  4. в общем nginx workflow-процесс вы включаете свои конфигурации сайта всайты-доступны/ а затем, когда вы готовы / счастливы, вы делаете ссылку на сайты с поддержкой/ папка и перезагрузите nginx, чтобы изменения были эффективными
  5. добавьте конфигурацию Gitlab в Nginx сайт-доступен/ папку

вот мой 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;
      }
    } 

вы можете найти более подробную информацию о конфигурации здесь больше опции

  1. перезагрузка / перезагрузка nginx

    sudo service nginx restart

  2. перезапустите GitLab omnibus и проверьте конфигурацию Gitlab

    sudo gitlab-ctl reconfigure

    sudo gitlab-ctl tail (просто чтобы проверить, что-то не так в вашей конфигурации gitlab)

  3. добавить дополнительные (столько, сколько вам нравится) конфигурации сервера, которые вам нужны в / etc/nginx/сайты-доступно/ и в конечном итоге, когда счастлив / готов добавить ссылку на / etc/nginx/sites-включено/
    вот еще один пример другого приложения

    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-адрес, но он не сломается из-за разных портов в потоках это действительно важно

вот как работает моя конфигурация прямо сейчас у меня не было никаких проблем с Gitlab или любыми другими приложениями.
Так что, надеюсь, это поможет кому-нибудь там.


поскольку я не хотел менять конфигурацию для сервера gitlab Nginx или устанавливать / настраивать другой Nginx и убедиться, что gitlab переживет крупное обновление, я пришел к решению ниже для пакет омнибусов Gitlab.

также согласно

Gitlab:Ningx = > вставка пользовательских настроек в конфигурацию nginx

отредактируйте /etc/gitlab / gitlab.rb вашего gitlab:

nano /etc/gitlab/gitlab.rb

и sroll в с nginx['custom_nginx_config'] и изменить как ниже не забудьте раскомментировать

# 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.д:

gitlab-ctl restart nginx

для проверки ошибки nginx log:

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

и Смотри https://stackoverflow.com/a/39695791/6821811 для перенаправления на другой сервер приложений.


эти " другие материалы "объявляются в NGiNX с"Сервер Блоки".

в Гитлаб в /etc/nginx/sites-available/gitlab (по документация, и symlined в [/etc/nginx/sites-enabled][3]).
Вы можете добавить в него другие серверные блоки, похожие на этот (Возможно, вам придется выбрать другой номер порта), как показано в этом процессе (обновляется!--18-->здесь для 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 директива должна ссылаться на корневую папку вашего веб-приложения (/var/www или, скорее, вложенной /var/www).

этот серверный блок совершенно отделен от любой конфигурации GitLab.