diff --git a/doc/settings/nginx.md b/doc/settings/nginx.md index eaed06bca85c08c7714c3f5e23c5bb8b17794252_ZG9jL3NldHRpbmdzL25naW54Lm1k..0b639ae95f332a6cadc75f2947b0d6f7875956c8_ZG9jL3NldHRpbmdzL25naW54Lm1k 100644 --- a/doc/settings/nginx.md +++ b/doc/settings/nginx.md @@ -15,10 +15,15 @@ ## Service-specific NGINX settings -Users can configure NGINX settings differently for different services via -`gitlab.rb`. Settings for the GitLab Rails application can be configured using the -`nginx['<some setting>']` keys. There are similar keys for other services like -`pages_nginx`, `mattermost_nginx` and `registry_nginx`. All the configurations -available for `nginx` are also available for these `<service_nginx>` settings and +To configure NGINX settings for different services, edit the `gitlab.rb` file. + +WARNING: +Incorrect or incompatible configuration +might cause the service to become unavailable. + +Use `nginx['<setting>']` keys to configure settings for the GitLab Rails application. +GitLab provides similar keys for other services like +`pages_nginx`, `mattermost_nginx`, and `registry_nginx`. +Configurations for `nginx` are also available for these `<service_nginx>` settings, and share the same default values as GitLab NGINX. @@ -23,5 +28,5 @@ share the same default values as GitLab NGINX. -To operate NGINX for isolated services like Mattermost, you should use `gitlab_rails['enable'] = false` instead of `nginx['enable'] = false`. +To operate NGINX for isolated services like Mattermost, use `gitlab_rails['enable'] = false` instead of `nginx['enable'] = false`. For more information, see [Running GitLab Mattermost on its own server](https://docs.gitlab.com/ee/integration/mattermost/#running-gitlab-mattermost-on-its-own-server). @@ -26,11 +31,13 @@ For more information, see [Running GitLab Mattermost on its own server](https://docs.gitlab.com/ee/integration/mattermost/#running-gitlab-mattermost-on-its-own-server). -If modifying via `gitlab.rb`, users have to configure NGINX setting for each -service separately. Settings given via `nginx['foo']` WILL NOT be replicated to -service specific NGINX configuration (as `registry_nginx['foo']` or -`mattermost_nginx['foo']`, etc.). For example, to configure HTTP to HTTPS -redirection for GitLab, Mattermost and Registry, the following settings should -be added to `gitlab.rb`: +When you modify the `gitlab.rb` file, configure NGINX settings for each +service separately. +Settings specified using `nginx['foo']` are not replicated to +service-specific NGINX configurations (such as `registry_nginx['foo']` or +`mattermost_nginx['foo']`). +For example, to configure HTTP to HTTPS +redirection for GitLab, Mattermost and Registry, add the following settings +to `gitlab.rb`: ```ruby nginx['redirect_http_to_https'] = true @@ -38,9 +45,5 @@ mattermost_nginx['redirect_http_to_https'] = true ``` -NOTE: -Modifying NGINX configuration should be done with care as incorrect -or incompatible configuration may yield to unavailability of service. - ## Enable HTTPS @@ -45,8 +48,8 @@ ## Enable HTTPS -By default, Linux package installations do not use HTTPS. If you want to enable HTTPS for -`gitlab.example.com`, you can: +By default, Linux package installations do not use HTTPS. To enable HTTPS for +`gitlab.example.com`: - [Use Let's Encrypt for free, automated HTTPS](ssl/index.md#enable-the-lets-encrypt-integration). - [Manually configure HTTPS with your own certificates](ssl/index.md#configure-https-manually). @@ -49,10 +52,9 @@ - [Use Let's Encrypt for free, automated HTTPS](ssl/index.md#enable-the-lets-encrypt-integration). - [Manually configure HTTPS with your own certificates](ssl/index.md#configure-https-manually). -NOTE: -If you use a proxy, load balancer or some other external device to terminate SSL for the GitLab host name, +If you use a proxy, load balancer, or other external device to terminate SSL for the GitLab host name, see [External, proxy, and load balancer SSL termination](ssl/index.md#configure-a-reverse-proxy-or-load-balancer-ssl-termination). ## Change the default proxy headers @@ -55,7 +57,7 @@ see [External, proxy, and load balancer SSL termination](ssl/index.md#configure-a-reverse-proxy-or-load-balancer-ssl-termination). ## Change the default proxy headers -By default, when you specify `external_url`, a Linux package installation sets a few -NGINX proxy headers that are assumed to be sane in most environments. +By default, when you specify `external_url`, a Linux package installation sets NGINX proxy headers +that are suitable for most environments. @@ -61,4 +63,4 @@ -For example, a Linux package installation sets: +For example, if you specify the `https` schema in the `external_url`, a Linux package installation sets: ```plaintext @@ -63,6 +65,6 @@ ```plaintext - "X-Forwarded-Proto" => "https", - "X-Forwarded-Ssl" => "on" +"X-Forwarded-Proto" => "https", +"X-Forwarded-Ssl" => "on" ``` @@ -67,4 +69,5 @@ ``` -if you have specified `https` schema in the `external_url`. +If your GitLab instance is in a more complex setup, such as behind a reverse proxy, you might need +to adjust the proxy headers to avoid errors like: @@ -70,6 +73,4 @@ -However, if you have a situation where your GitLab is in a more complex setup -like behind a reverse proxy, you will need to tweak the proxy headers in order -to avoid errors like `The change you wanted was rejected` or -`Can't verify CSRF token authenticity Completed 422 Unprocessable`. +- `The change you wanted was rejected` +- `Can't verify CSRF token authenticity Completed 422 Unprocessable` @@ -75,4 +76,5 @@ -This can be achieved by overriding the default headers, eg. specify -in `/etc/gitlab/gitlab.rb`: +To override the default headers: + +1. Edit `/etc/gitlab/gitlab.rb`: @@ -78,8 +80,8 @@ -```ruby - nginx['proxy_set_headers'] = { - "X-Forwarded-Proto" => "http", - "CUSTOM_HEADER" => "VALUE" - } -``` + ```ruby + nginx['proxy_set_headers'] = { + "X-Forwarded-Proto" => "http", + "CUSTOM_HEADER" => "VALUE" + } + ``` @@ -85,4 +87,4 @@ -Save the file and [reconfigure GitLab](https://docs.gitlab.com/ee/administration/restart_gitlab.html#omnibus-gitlab-reconfigure) -for the changes to take effect. +1. Save the file and [reconfigure GitLab](https://docs.gitlab.com/ee/administration/restart_gitlab.html#linux-package-installations) + for the changes to take effect. @@ -88,5 +90,5 @@ -This way you can specify any header supported by NGINX you require. +You can specify any header supported by NGINX. ## Configure GitLab trusted proxies and NGINX `real_ip` module @@ -90,5 +92,5 @@ ## Configure GitLab trusted proxies and NGINX `real_ip` module -By default, NGINX and GitLab will log the IP address of the connected client. +By default, NGINX and GitLab log the IP address of the connected client. @@ -94,4 +96,4 @@ -If your GitLab is behind a reverse proxy, you may not want the IP address of -the proxy to show up as the client address. +If GitLab is behind a reverse proxy, you might not want the IP address of +the proxy to show as the client address. @@ -97,5 +99,5 @@ -You can have NGINX look for a different address to use by adding your reverse +To configure NGINX to use a different address, add your reverse proxy to the `real_ip_trusted_addresses` list: ```ruby @@ -99,5 +101,5 @@ proxy to the `real_ip_trusted_addresses` list: ```ruby -# Each address is added to the the NGINX config as 'set_real_ip_from <address>;' +# Each address is added to the NGINX config as 'set_real_ip_from <address>;' nginx['real_ip_trusted_addresses'] = [ '192.168.1.0/24', '192.168.2.1', '2001:0db8::/32' ] @@ -103,6 +105,6 @@ nginx['real_ip_trusted_addresses'] = [ '192.168.1.0/24', '192.168.2.1', '2001:0db8::/32' ] -# other real_ip config options +# Other real_ip config options nginx['real_ip_header'] = 'X-Forwarded-For' nginx['real_ip_recursive'] = 'on' ``` @@ -105,9 +107,8 @@ nginx['real_ip_header'] = 'X-Forwarded-For' nginx['real_ip_recursive'] = 'on' ``` -Description of the options: - -- <http://nginx.org/en/docs/http/ngx_http_realip_module.html> +For a description of these options, see the +[NGINX `realip` module documentation](http://nginx.org/en/docs/http/ngx_http_realip_module.html). By default, Linux package installations use the IP addresses in `real_ip_trusted_addresses` @@ -112,5 +113,5 @@ By default, Linux package installations use the IP addresses in `real_ip_trusted_addresses` -as GitLab trusted proxies, which will keep users from being listed as signed -in from those IPs. +as GitLab trusted proxies. +The trusted proxy configuration prevents users from being listed as signed in from those IP addresses. @@ -116,6 +117,6 @@ -Save the file and [reconfigure GitLab](https://docs.gitlab.com/ee/administration/restart_gitlab.html#omnibus-gitlab-reconfigure) +Save the file and [reconfigure GitLab](https://docs.gitlab.com/ee/administration/restart_gitlab.html#linux-package-installations) for the changes to take effect. ## Configure the PROXY protocol @@ -118,9 +119,9 @@ for the changes to take effect. ## Configure the PROXY protocol -If you want to use a proxy like HAProxy in front of GitLab using the [PROXY protocol](https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt), -you need to enable this setting. Do not forget to set the `real_ip_trusted_addresses` also as needed: +To use a proxy like HAProxy in front of GitLab with the +[PROXY protocol](https://www.haproxy.org/download/3.1/doc/proxy-protocol.txt): 1. Edit `/etc/gitlab/gitlab.rb`: @@ -131,7 +132,6 @@ nginx['real_ip_trusted_addresses'] = [ "127.0.0.0/8", "IP_OF_THE_PROXY/32"] ``` -1. Save the file and - [reconfigure GitLab](https://docs.gitlab.com/ee/administration/restart_gitlab.html#omnibus-gitlab-reconfigure) +1. Save the file and [reconfigure GitLab](https://docs.gitlab.com/ee/administration/restart_gitlab.html#linux-package-installations) for the changes to take effect. @@ -136,8 +136,8 @@ for the changes to take effect. -Once enabled, NGINX only accepts PROXY protocol traffic on these listeners. -Ensure to also adjust any other environments you might have, like monitoring checks. +After you enable this setting, NGINX only accepts PROXY protocol traffic on these listeners. +Adjust any other environments you might have, such as monitoring checks. ## Use a non-bundled web server By default, the Linux package installs GitLab with bundled NGINX. @@ -140,8 +140,8 @@ ## Use a non-bundled web server By default, the Linux package installs GitLab with bundled NGINX. -Linux package installations allow webserver access through the `gitlab-www` user, which resides -in the group with the same name. To allow an external webserver access to -GitLab, the external webserver user needs to be added to the `gitlab-www` group. +Linux package installations allow web server access through the `gitlab-www` user, which resides +in the group with the same name. To allow an external web server access to +GitLab, add the external web server user to the `gitlab-www` group. @@ -147,4 +147,3 @@ -To use another web server like Apache or an existing NGINX installation you -will have to perform the following steps: +To use another web server like Apache or an existing NGINX installation: @@ -150,5 +149,5 @@ -1. **Disable bundled NGINX** +1. Disable bundled NGINX: In `/etc/gitlab/gitlab.rb` set: @@ -156,5 +155,8 @@ nginx['enable'] = false ``` -1. **Set the username of the non-bundled web-server user** +1. Set the username of the non-bundled web server user: + + Linux package installations have no default setting for the external web server + user. You must specify it in the configuration. For example: @@ -160,6 +162,4 @@ - By default, Linux package installations have no default setting for the external webserver - user, you have to specify it in the configuration. For Debian/Ubuntu the - default user is `www-data` for both Apache/NGINX whereas for RHEL/CentOS - the NGINX user is `nginx`. + - Debian/Ubuntu: The default user is `www-data` for both Apache and NGINX. + - RHEL/CentOS: The NGINX user is `nginx`. @@ -165,4 +165,4 @@ - Make sure you have first installed Apache/NGINX so the webserver user is created, otherwise a Linux package installation - fails while reconfiguring. + Install Apache or NGINX before continuing, so the web server user is created. + Otherwise, the Linux package installation fails during reconfiguration. @@ -168,8 +168,7 @@ - Let's say for example that the webserver user is `www-data`. - In `/etc/gitlab/gitlab.rb` set: + If the web server user is `www-data`, in `/etc/gitlab/gitlab.rb` set: ```ruby web_server['external_users'] = ['www-data'] ``` @@ -171,9 +170,9 @@ ```ruby web_server['external_users'] = ['www-data'] ``` - This setting is an array so you can specify more than one user to be added to `gitlab-www` group. + This setting is an array, so you can specify multiple users to add to the `gitlab-www` group. Run `sudo gitlab-ctl reconfigure` for the change to take effect. @@ -177,5 +176,6 @@ Run `sudo gitlab-ctl reconfigure` for the change to take effect. - If you are using SELinux and your web server runs under a restricted SELinux profile you may have to [loosen the restrictions on your web server](https://gitlab.com/gitlab-org/gitlab-recipes/tree/master/web-server/apache#selinux-modifications). + If you use SELinux and your web server runs under a restricted SELinux profile, you might need to + [loosen the restrictions on your web server](https://gitlab.com/gitlab-org/gitlab-recipes/tree/master/web-server/apache#selinux-modifications). @@ -181,5 +181,4 @@ - Make sure that the webserver user has the correct permissions on all directories used by external web-server, otherwise you will receive `failed (XX: Permission denied) while reading upstream` errors. - -1. **Add the non-bundled web-server to the list of trusted proxies** + Ensure the web server user has the correct permissions on all directories used by the external web server. + Otherwise, you might receive `failed (XX: Permission denied) while reading upstream` errors. @@ -185,4 +184,3 @@ - Normally, Linux package installations default the list of trusted proxies to what was - configured in the `real_ip` module for the bundled NGINX. +1. Add the non-bundled web server to the list of trusted proxies: @@ -188,9 +186,12 @@ - For non-bundled web-servers the list needs to be configured directly, and should - include the IP address of your web-server if it is not on the same machine as GitLab. - Otherwise, users will be shown as being signed in from your web-server's IP address. + Linux package installations usually default the list of trusted proxies to the + configuration in the `real_ip` module for the bundled NGINX. + + For non-bundled web servers, configure the list directly. Include the IP address of your web server + if it is not on the same machine as GitLab. + Otherwise, users appear to be signed in from your web server's IP address. ```ruby gitlab_rails['trusted_proxies'] = [ '192.168.1.0/24', '192.168.2.1', '2001:0db8::/32' ] ``` @@ -192,7 +193,7 @@ ```ruby gitlab_rails['trusted_proxies'] = [ '192.168.1.0/24', '192.168.2.1', '2001:0db8::/32' ] ``` -1. **(Optional) Set the right GitLab Workhorse settings if using Apache** +1. Optional. If you use Apache, set GitLab Workhorse settings: @@ -198,6 +199,6 @@ - Apache cannot connect to a UNIX socket but instead needs to connect to a - TCP Port. To allow GitLab Workhorse to listen on TCP (by default port 8181) + Apache cannot connect to a UNIX socket and must connect to a + TCP port. To allow GitLab Workhorse to listen on TCP (by default port 8181), edit `/etc/gitlab/gitlab.rb`: ```ruby @@ -207,5 +208,5 @@ Run `sudo gitlab-ctl reconfigure` for the change to take effect. -1. **Download the correct web server configuration** +1. Download the correct web server configuration: @@ -211,5 +212,6 @@ - Go to [GitLab repository](https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/support/nginx) and download - the required configuration. Select the correct configuration file depending whether you are serving GitLab with - SSL or not. You might need to make some changes, such as: + Go to the [GitLab repository](https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/support/nginx) and download + the required configuration. + Select the correct configuration file for serving GitLab with or without SSL. + You might need to change: @@ -215,5 +217,5 @@ - - The value of `YOUR_SERVER_FQDN` set to your FQDN. + - The value of `YOUR_SERVER_FQDN` to your FQDN. - If you use SSL, the location of your SSL keys. - The location of your log files. @@ -222,5 +224,7 @@ GitLab provides various configuration options to customize NGINX behavior for your specific needs. Use these reference items to fine-tune your NGINX setup and optimize GitLab performance and security. -### Setting the NGINX listen addresses +### Set the NGINX listen addresses + +By default, NGINX accepts incoming connections on all local IPv4 addresses. @@ -226,4 +230,5 @@ -By default NGINX will accept incoming connections on all local IPv4 addresses. -You can change the list of addresses in `/etc/gitlab/gitlab.rb`. +To change the list of addresses: + +1. Edit `/etc/gitlab/gitlab.rb`: @@ -229,9 +234,9 @@ -```ruby - # Listen on all IPv4 and IPv6 addresses -nginx['listen_addresses'] = ["0.0.0.0", "[::]"] -registry_nginx['listen_addresses'] = ['*', '[::]'] -mattermost_nginx['listen_addresses'] = ['*', '[::]'] -pages_nginx['listen_addresses'] = ['*', '[::]'] -``` + ```ruby + # Listen on all IPv4 and IPv6 addresses + nginx['listen_addresses'] = ["0.0.0.0", "[::]"] + registry_nginx['listen_addresses'] = ['*', '[::]'] + mattermost_nginx['listen_addresses'] = ['*', '[::]'] + pages_nginx['listen_addresses'] = ['*', '[::]'] + ``` @@ -237,3 +242,12 @@ -### Setting the NGINX listen port +1. Save the file and [reconfigure GitLab](https://docs.gitlab.com/ee/administration/restart_gitlab.html#linux-package-installations) + for the changes to take effect. + +### Set the NGINX listen port + +By default, NGINX listens on the port specified in `external_url` or +uses the standard port (80 for HTTP, 443 for HTTPS). If you run +GitLab behind a reverse proxy, you might want to override the listen port. + +To change the listen port: @@ -239,6 +253,8 @@ -By default NGINX will listen on the port specified in `external_url` or -implicitly use the right port (80 for HTTP, 443 for HTTPS). If you are running -GitLab behind a reverse proxy, you may want to override the listen port to -something else. For example, to use port 8081: +1. Edit `/etc/gitlab/gitlab.rb`. + For example, to use port 8081: + + ```ruby + nginx['listen_port'] = 8081 + ``` @@ -244,5 +260,4 @@ -```ruby -nginx['listen_port'] = 8081 -``` +1. Save the file and [reconfigure GitLab](https://docs.gitlab.com/ee/administration/restart_gitlab.html#linux-package-installations) + for the changes to take effect. @@ -248,3 +263,5 @@ -### Verbosity level of NGINX logs +### Change the verbosity level of NGINX logs + +By default, NGINX logs at the `error` verbosity level. @@ -250,4 +267,5 @@ -By default NGINX will log at the `error` verbosity level. You may log at a different level -by changing the log level. For example, to enable `debug` logging: +To change the log level: + +1. Edit `/etc/gitlab/gitlab.rb`: @@ -253,5 +271,5 @@ -```ruby -nginx['error_log_level'] = "debug" -``` + ```ruby + nginx['error_log_level'] = "debug" + ``` @@ -257,3 +275,4 @@ -Valid values can be found from the [NGINX documentation](https://nginx.org/en/docs/ngx_core_module.html#error_log). +1. Save the file and [reconfigure GitLab](https://docs.gitlab.com/ee/administration/restart_gitlab.html#linux-package-installations) + for the changes to take effect. @@ -259,4 +278,6 @@ -### Setting the Referrer-Policy header +For valid log level values, see the [NGINX documentation](https://nginx.org/en/docs/ngx_core_module.html#error_log). + +### Set the Referrer-Policy header By default, GitLab sets the `Referrer-Policy` header to `strict-origin-when-cross-origin` on all responses. @@ -261,3 +282,4 @@ By default, GitLab sets the `Referrer-Policy` header to `strict-origin-when-cross-origin` on all responses. +This setting makes the client: @@ -263,4 +285,4 @@ -This makes the client send the full URL as referrer when making a same-origin request but only send the -origin when making cross-origin requests. +- Send the full URL as referrer for same-origin requests. +- Send only the origin for cross-origin requests. @@ -266,3 +288,5 @@ -To set this header to a different value: +To change this header: + +1. Edit `/etc/gitlab/gitlab.rb`: @@ -268,5 +292,5 @@ -```ruby -nginx['referrer_policy'] = 'same-origin' -``` + ```ruby + nginx['referrer_policy'] = 'same-origin' + ``` @@ -272,3 +296,7 @@ -You can also disable this header to make the client use its default setting: + To disable this header and use the client's default setting: + + ```ruby + nginx['referrer_policy'] = false + ``` @@ -274,5 +302,4 @@ -```ruby -nginx['referrer_policy'] = false -``` +1. Save the file and [reconfigure GitLab](https://docs.gitlab.com/ee/administration/restart_gitlab.html#linux-package-installations) + for the changes to take effect. @@ -278,3 +305,4 @@ -Note that setting this to `origin` or `no-referrer` would break some features in GitLab that require the full referrer URL. +WARNING: +Setting this to `origin` or `no-referrer` breaks GitLab features that require the full referrer URL. @@ -280,3 +308,5 @@ -- <https://www.w3.org/TR/referrer-policy/> +For more information, see the [Referrer Policy specification](https://www.w3.org/TR/referrer-policy/). + +### Disable Gzip compression @@ -282,3 +312,5 @@ -### Disabling Gzip compression +By default, GitLab enables Gzip compression for text data over 10240 bytes. To disable Gzip compression: + +1. Edit `/etc/gitlab/gitlab.rb`: @@ -284,4 +316,5 @@ -By default, GitLab enables Gzip compression for text data over 10240 bytes. To -disable this behavior: + ```ruby + nginx['gzip_enabled'] = false + ``` @@ -287,6 +320,5 @@ -```ruby -nginx['gzip_enabled'] = false -``` +1. Save the file and [reconfigure GitLab](https://docs.gitlab.com/ee/administration/restart_gitlab.html#linux-package-installations) + for the changes to take effect. NOTE: @@ -291,4 +323,4 @@ NOTE: -The `gzip` setting only works for the main GitLab application and not for the other services. +The `gzip` setting applies only to the main GitLab application, not to other services. @@ -294,3 +326,3 @@ -### Disabling proxy request buffering +### Disable proxy request buffering @@ -296,5 +328,5 @@ -Request buffering can be disabled selectively on specific locations by changing `request_buffering_off_path_regex`. +To disable request buffering for specific locations: 1. Edit `/etc/gitlab/gitlab.rb`: @@ -302,7 +334,8 @@ nginx['request_buffering_off_path_regex'] = "/api/v\\d/jobs/\\d+/artifacts$|/import/gitlab_project$|\\.git/git-receive-pack$|\\.git/ssh-receive-pack$|\\.git/ssh-upload-pack$|\\.git/gitlab-lfs/objects|\\.git/info/lfs/objects/batch$" ``` -1. Reconfigure GitLab, and [HUP](https://nginx.org/en/docs/control.html) - NGINX to cause it to reload with the updated configuration gracefully: +1. Save the file and [reconfigure GitLab](https://docs.gitlab.com/ee/administration/restart_gitlab.html#linux-package-installations) + for the changes to take effect. +1. Reload NGINX configuration gracefully: ```shell @@ -307,6 +340,5 @@ ```shell - sudo gitlab-ctl reconfigure sudo gitlab-ctl hup nginx ``` @@ -310,5 +342,8 @@ sudo gitlab-ctl hup nginx ``` +For more information about the `hup` command, see the +[NGINX documentation](https://nginx.org/en/docs/control.html). + ### Configure `robots.txt` @@ -313,6 +348,8 @@ ### Configure `robots.txt` -To configure [`robots.txt`](https://www.robotstxt.org/robotstxt.html) for your instance, specify a custom `robots.txt` file by adding a [custom NGINX configuration](#inserting-custom-nginx-settings-into-the-gitlab-server-block): +To configure a custom [`robots.txt`](https://www.robotstxt.org/robotstxt.html) file for your instance: + +1. Create your custom `robots.txt` file and note its path. 1. Edit `/etc/gitlab/gitlab.rb`: @@ -320,5 +357,11 @@ nginx['custom_gitlab_server_config'] = "\nlocation =/robots.txt { alias /path/to/custom/robots.txt; }\n" ``` -1. Reconfigure GitLab: + Replace `/path/to/custom/robots.txt` with the actual path to your custom `robots.txt` file. + +1. Save the file and [reconfigure GitLab](https://docs.gitlab.com/ee/administration/restart_gitlab.html#linux-package-installations) + for the changes to take effect. + +This configuration adds a [custom NGINX setting](#insert-custom-nginx-settings-into-the-gitlab-server-block) +to serve your custom `robots.txt` file. @@ -324,5 +367,12 @@ - ```shell - sudo gitlab-ctl reconfigure +### Insert custom NGINX settings into the GitLab server block + +To add custom settings to the NGINX `server` block for GitLab: + +1. Edit `/etc/gitlab/gitlab.rb`: + + ```ruby + # Example: block raw file downloads from a specific repository + nginx['custom_gitlab_server_config'] = "location ^~ /foo-namespace/bar-project/raw/ {\n deny all;\n}\n" ``` @@ -327,10 +377,5 @@ ``` -### Inserting custom NGINX settings into the GitLab server block - -Please keep in mind that these custom settings may create conflicts if the -same settings are defined in your `gitlab.rb` file. - -If you need to add custom settings into the NGINX `server` block for GitLab for -some reason you can use the following setting. +1. Save the file and [reconfigure GitLab](https://docs.gitlab.com/ee/administration/restart_gitlab.html#linux-package-installations) + for the changes to take effect. @@ -336,6 +381,4 @@ -```ruby -# Example: block raw file downloads from a specific repository -nginx['custom_gitlab_server_config'] = "location ^~ /foo-namespace/bar-project/raw/ {\n deny all;\n}\n" -``` +This inserts the defined string at the end of the `server` block in +`/var/opt/gitlab/nginx/conf/gitlab-http.conf`. @@ -341,9 +384,6 @@ -Run `gitlab-ctl reconfigure` to rewrite the NGINX configuration and restart -NGINX. - -This inserts the defined string into the end of the `server` block of -`/var/opt/gitlab/nginx/conf/gitlab-http.conf`. +WARNING: +Custom settings might conflict with settings defined elsewhere in your `gitlab.rb` file. #### Notes @@ -347,7 +387,7 @@ #### Notes -- If you're adding a new location, you might need to include +- If you're adding a new location, you might need to include: ```conf proxy_cache off; @@ -355,9 +395,8 @@ proxy_pass http://gitlab-workhorse; ``` - in the string or in the included NGINX configuration. Without these, any sub-location - will return a 404. See - [GitLab CE Issue #30619](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/30619). -- You cannot add the root `/` location or the `/assets` location as those already + Without these, any sub-location might return a 404 error. + +- You cannot add the root `/` location or the `/assets` location, as they already exist in `gitlab-http.conf`. @@ -362,4 +401,6 @@ exist in `gitlab-http.conf`. -### Inserting custom settings into the NGINX configuration +### Insert custom settings into the NGINX configuration + +To add custom settings to the NGINX configuration: @@ -365,4 +406,8 @@ -If you need to add custom settings into the NGINX configuration, for example to include -existing server blocks, you can use the following setting. +1. Edit `/etc/gitlab/gitlab.rb`: + + ```ruby + # Example: include a directory to scan for additional config files + nginx['custom_nginx_config'] = "include /etc/gitlab/nginx/sites-enabled/*.conf;" + ``` @@ -368,6 +413,7 @@ -```ruby -# Example: include a directory to scan for additional config files -nginx['custom_nginx_config'] = "include /etc/gitlab/nginx/sites-enabled/*.conf;" -``` +1. Save the file and [reconfigure GitLab](https://docs.gitlab.com/ee/administration/restart_gitlab.html#linux-package-installations) + for the changes to take effect. + +This inserts the defined string at the end of the `http` block in +`/var/opt/gitlab/nginx/conf/nginx.conf`. @@ -373,4 +419,3 @@ -You should create custom server blocks in the `/etc/gitlab/nginx/sites-available` directory. To enable them, symlink them into the -`/etc/gitlab/nginx/sites-enabled` directory: +For example, to create and enable custom server blocks: @@ -376,8 +421,9 @@ -1. Create the `/etc/gitlab/nginx/sites-enabled` directory. -1. Run the following command: +1. Create custom server blocks in the `/etc/gitlab/nginx/sites-available` directory. +1. Create the `/etc/gitlab/nginx/sites-enabled` directory if it doesn't exist. +1. To enable a custom server block, create a symlink: ```shell sudo ln -s /etc/gitlab/nginx/sites-available/example.conf /etc/gitlab/nginx/sites-enabled/example.conf ``` @@ -379,8 +425,20 @@ ```shell sudo ln -s /etc/gitlab/nginx/sites-available/example.conf /etc/gitlab/nginx/sites-enabled/example.conf ``` +1. Reload NGINX configuration: + + ```shell + sudo gitlab-ctl hup nginx + ``` + + Alternatively, you can restart NGINX: + + ```shell + sudo gitlab-ctl restart nginx + ``` + You can add domains for server blocks [as an alternative name](ssl/index.md#add-alternative-domains-to-the-certificate) to the generated Let's Encrypt SSL certificate. @@ -384,12 +442,6 @@ You can add domains for server blocks [as an alternative name](ssl/index.md#add-alternative-domains-to-the-certificate) to the generated Let's Encrypt SSL certificate. -Run `gitlab-ctl reconfigure` to rewrite the NGINX configuration and restart -NGINX. You must reload NGINX (`gitlab-ctl hup nginx`) or restart NGINX (`gitlab-ctl restart nginx`) whenever you make changes to the custom server blocks. - -This inserts the defined string into the end of the `http` block of -`/var/opt/gitlab/nginx/conf/nginx.conf`. - Custom NGINX settings inside the `/etc/gitlab/` directory are backed up to `/etc/gitlab/config_backup/` during an upgrade and when `sudo gitlab-ctl backup-etc` is manually executed. @@ -393,5 +445,5 @@ Custom NGINX settings inside the `/etc/gitlab/` directory are backed up to `/etc/gitlab/config_backup/` during an upgrade and when `sudo gitlab-ctl backup-etc` is manually executed. -### Custom error pages +### Configure custom error pages @@ -397,4 +449,3 @@ -You can use `custom_error_pages` to modify text on the default GitLab error page. -This can be used for any valid HTTP error code; e.g 404, 502. +To modify text on the default GitLab error pages: @@ -400,3 +451,3 @@ -As an example the following would modify the default 404 error page. +1. Edit `/etc/gitlab/gitlab.rb`: @@ -402,11 +453,11 @@ -```ruby -nginx['custom_error_pages'] = { - '404' => { - 'title' => 'Example title', - 'header' => 'Example header', - 'message' => 'Example message' - } -} -``` + ```ruby + nginx['custom_error_pages'] = { + '404' => { + 'title' => 'Example title', + 'header' => 'Example header', + 'message' => 'Example message' + } + } + ``` @@ -412,5 +463,10 @@ -This would result in the 404 error page below. + This example modifies the default 404 error page. You can use this format for any valid HTTP error code, such as 404 or 502. + +1. Save the file and [reconfigure GitLab](https://docs.gitlab.com/ee/administration/restart_gitlab.html#linux-package-installations) + for the changes to take effect. + +The result for the 404 error page would look like this:  @@ -414,8 +470,5 @@  -Run `gitlab-ctl reconfigure` to rewrite the NGINX configuration and restart -NGINX. - -### Using an existing Passenger and NGINX installation +### Use an existing Passenger and NGINX installation @@ -421,5 +474,3 @@ -In some cases you may want to host GitLab using an existing Passenger and NGINX -installation but still have the convenience of updating and installing using -the Linux packages. +You can host GitLab with an existing Passenger and NGINX installation and still use Linux packages for updates and installation. @@ -425,7 +476,6 @@ -NOTE: -When disabling NGINX, you won't be able to access other services included in a Linux package installation such as -Mattermost unless you manually add them in `nginx.conf`. +If you disable NGINX, you can't access other services included in a Linux package installation, such as +Mattermost, unless you manually add them to `nginx.conf`. #### Configuration @@ -429,6 +479,7 @@ #### Configuration -First, you'll need to set up your `/etc/gitlab/gitlab.rb` to disable the built-in -NGINX and Puma: +To set up GitLab with an existing Passenger and NGINX installation: + +1. Edit `/etc/gitlab/gitlab.rb`: @@ -434,5 +485,5 @@ -```ruby -# Define the external url -external_url 'http://git.example.com' + ```ruby + # Define the external url + external_url 'http://git.example.com' @@ -438,4 +489,4 @@ -# Disable the built-in nginx -nginx['enable'] = false + # Disable the built-in NGINX + nginx['enable'] = false @@ -441,4 +492,4 @@ -# Disable the built-in puma -puma['enable'] = false + # Disable the built-in Puma + puma['enable'] = false @@ -444,4 +495,4 @@ -# Set the internal API URL -gitlab_rails['internal_api_url'] = 'http://git.example.com' + # Set the internal API URL + gitlab_rails['internal_api_url'] = 'http://git.example.com' @@ -447,5 +498,5 @@ -# Define the web server process user (ubuntu/nginx) -web_server['external_users'] = ['www-data'] -``` + # Define the web server process user (ubuntu/nginx) + web_server['external_users'] = ['www-data'] + ``` @@ -451,3 +502,4 @@ -Make sure you run `sudo gitlab-ctl reconfigure` for the changes to take effect. +1. Save the file and [reconfigure GitLab](https://docs.gitlab.com/ee/administration/restart_gitlab.html#linux-package-installations) + for the changes to take effect. @@ -453,5 +505,3 @@ -#### Vhost (server block) - -In your custom Passenger/NGINX installation, create the following site configuration file: +#### Configure the virtual host (server block) @@ -457,6 +507,5 @@ -```plaintext -upstream gitlab-workhorse { - server unix://var/opt/gitlab/gitlab-workhorse/sockets/socket fail_timeout=0; -} +In your custom Passenger/NGINX installation: + +1. Create a new site configuration file with the following content: @@ -462,9 +511,6 @@ -server { - listen *:80; - server_name git.example.com; - server_tokens off; - root /opt/gitlab/embedded/service/gitlab-rails/public; - - client_max_body_size 250m; + ```plaintext + upstream gitlab-workhorse { + server unix://var/opt/gitlab/gitlab-workhorse/sockets/socket fail_timeout=0; + } @@ -470,4 +516,7 @@ - access_log /var/log/gitlab/nginx/gitlab_access.log; - error_log /var/log/gitlab/nginx/gitlab_error.log; + server { + listen *:80; + server_name git.example.com; + server_tokens off; + root /opt/gitlab/embedded/service/gitlab-rails/public; @@ -473,7 +522,3 @@ - # Ensure Passenger uses the bundled Ruby version - passenger_ruby /opt/gitlab/embedded/bin/ruby; - - # Correct the $PATH variable to included packaged executables - passenger_env_var PATH "/opt/gitlab/bin:/opt/gitlab/embedded/bin:/usr/local/bin:/usr/bin:/bin"; + client_max_body_size 250m; @@ -479,6 +524,4 @@ - # Make sure Passenger runs as the correct user and group to - # prevent permission issues - passenger_user git; - passenger_group git; + access_log /var/log/gitlab/nginx/gitlab_access.log; + error_log /var/log/gitlab/nginx/gitlab_error.log; @@ -484,5 +527,7 @@ - # Enable Passenger & keep at least one instance running at all times - passenger_enabled on; - passenger_min_instances 1; + # Ensure Passenger uses the bundled Ruby version + passenger_ruby /opt/gitlab/embedded/bin/ruby; + + # Correct the $PATH variable to included packaged executables + passenger_env_var PATH "/opt/gitlab/bin:/opt/gitlab/embedded/bin:/usr/local/bin:/usr/bin:/bin"; @@ -488,7 +533,10 @@ - location ~ ^/[\w\.-]+/[\w\.-]+/(info/refs|git-upload-pack|git-receive-pack)$ { - # 'Error' 418 is a hack to re-use the @gitlab-workhorse block - error_page 418 = @gitlab-workhorse; - return 418; - } + # Make sure Passenger runs as the correct user and group to + # prevent permission issues + passenger_user git; + passenger_group git; + + # Enable Passenger & keep at least one instance running at all times + passenger_enabled on; + passenger_min_instances 1; @@ -494,7 +542,7 @@ - location ~ ^/[\w\.-]+/[\w\.-]+/repository/archive { - # 'Error' 418 is a hack to re-use the @gitlab-workhorse block - error_page 418 = @gitlab-workhorse; - return 418; - } + location ~ ^/[\w\.-]+/[\w\.-]+/(info/refs|git-upload-pack|git-receive-pack)$ { + # 'Error' 418 is a hack to re-use the @gitlab-workhorse block + error_page 418 = @gitlab-workhorse; + return 418; + } @@ -500,7 +548,7 @@ - location ~ ^/api/v3/projects/.*/repository/archive { - # 'Error' 418 is a hack to re-use the @gitlab-workhorse block - error_page 418 = @gitlab-workhorse; - return 418; - } + location ~ ^/[\w\.-]+/[\w\.-]+/repository/archive { + # 'Error' 418 is a hack to re-use the @gitlab-workhorse block + error_page 418 = @gitlab-workhorse; + return 418; + } @@ -506,7 +554,5 @@ - # Build artifacts should be submitted to this location - location ~ ^/[\w\.-]+/[\w\.-]+/builds/download { - client_max_body_size 0; + location ~ ^/api/v3/projects/.*/repository/archive { # 'Error' 418 is a hack to re-use the @gitlab-workhorse block error_page 418 = @gitlab-workhorse; return 418; @@ -510,5 +556,13 @@ # 'Error' 418 is a hack to re-use the @gitlab-workhorse block error_page 418 = @gitlab-workhorse; return 418; - } + } + + # Build artifacts should be submitted to this location + location ~ ^/[\w\.-]+/[\w\.-]+/builds/download { + client_max_body_size 0; + # 'Error' 418 is a hack to re-use the @gitlab-workhorse block + error_page 418 = @gitlab-workhorse; + return 418; + } @@ -514,9 +568,9 @@ - # Build artifacts should be submitted to this location - location ~ /ci/api/v1/builds/[0-9]+/artifacts { - client_max_body_size 0; - # 'Error' 418 is a hack to re-use the @gitlab-workhorse block - error_page 418 = @gitlab-workhorse; - return 418; - } + # Build artifacts should be submitted to this location + location ~ /ci/api/v1/builds/[0-9]+/artifacts { + client_max_body_size 0; + # 'Error' 418 is a hack to re-use the @gitlab-workhorse block + error_page 418 = @gitlab-workhorse; + return 418; + } @@ -522,10 +576,10 @@ - # Build artifacts should be submitted to this location - location ~ /api/v4/jobs/[0-9]+/artifacts { - client_max_body_size 0; - # 'Error' 418 is a hack to re-use the @gitlab-workhorse block - error_page 418 = @gitlab-workhorse; - return 418; - } + # Build artifacts should be submitted to this location + location ~ /api/v4/jobs/[0-9]+/artifacts { + client_max_body_size 0; + # 'Error' 418 is a hack to re-use the @gitlab-workhorse block + error_page 418 = @gitlab-workhorse; + return 418; + } @@ -530,8 +584,8 @@ - # For protocol upgrades from HTTP/1.0 to HTTP/1.1 we need to provide Host header if its missing - if ($http_host = "") { - # use one of values defined in server_name - set $http_host_with_default "git.example.com"; - } + # For protocol upgrades from HTTP/1.0 to HTTP/1.1 we need to provide Host header if its missing + if ($http_host = "") { + # use one of values defined in server_name + set $http_host_with_default "git.example.com"; + } @@ -537,5 +591,7 @@ - if ($http_host != "") { - set $http_host_with_default $http_host; - } + if ($http_host != "") { + set $http_host_with_default $http_host; + } + + location @gitlab-workhorse { @@ -541,3 +597,7 @@ - location @gitlab-workhorse { + ## https://github.com/gitlabhq/gitlabhq/issues/694 + ## Some requests take more than 30 seconds. + proxy_read_timeout 3600; + proxy_connect_timeout 300; + proxy_redirect off; @@ -543,7 +603,9 @@ - ## https://github.com/gitlabhq/gitlabhq/issues/694 - ## Some requests take more than 30 seconds. - proxy_read_timeout 3600; - proxy_connect_timeout 300; - proxy_redirect off; + # Do not buffer Git HTTP responses + proxy_buffering off; + + proxy_set_header Host $http_host_with_default; + 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; @@ -549,4 +611,4 @@ - # Do not buffer Git HTTP responses - proxy_buffering off; + proxy_http_version 1.1; + proxy_pass http://gitlab-workhorse; @@ -552,9 +614,8 @@ - proxy_set_header Host $http_host_with_default; - 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_http_version 1.1; - proxy_pass http://gitlab-workhorse; + ## The following settings only work with NGINX 1.7.11 or newer + # + ## Pass chunked request bodies to gitlab-workhorse as-is + # proxy_request_buffering off; + # proxy_http_version 1.1; + } @@ -560,8 +621,13 @@ - ## The following settings only work with NGINX 1.7.11 or newer - # - ## Pass chunked request bodies to gitlab-workhorse as-is - # proxy_request_buffering off; - # proxy_http_version 1.1; - } + ## 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 /opt/gitlab/embedded/service/gitlab-rails/public; + gzip_static on; # to serve pre-gzipped version + expires max; + add_header Cache-Control public; + } @@ -567,13 +633,7 @@ - ## 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 /opt/gitlab/embedded/service/gitlab-rails/public; - gzip_static on; # to serve pre-gzipped version - expires max; - add_header Cache-Control public; - } + error_page 502 /502.html; + } + ``` + + Replace `git.example.com` with your server URL. @@ -579,5 +639,5 @@ - error_page 502 /502.html; -} -``` +If you receive a 403 Forbidden error, ensure Passenger is enabled in `/etc/nginx/nginx.conf`: + +1. Uncomment this line: @@ -583,3 +643,5 @@ -Don't forget to update `git.example.com` in the above example to be your server URL. + ```plaintext + # include /etc/nginx/passenger.conf; + ``` @@ -585,4 +647,3 @@ -If you wind up with a 403 forbidden, it's possible that you haven't enabled passenger in `/etc/nginx/nginx.conf`, -to do so simply uncomment: +1. Reload the NGINX configuration: @@ -588,7 +649,5 @@ -```plaintext -# include /etc/nginx/passenger.conf; -``` - -Then run `sudo service nginx reload`. + ```shell + sudo service nginx reload + ``` @@ -594,3 +653,3 @@ -### Enabling and disabling `nginx_status` +### Configure NGINX status monitoring @@ -596,3 +655,4 @@ -By default you will have an NGINX health-check endpoint configured at `127.0.0.1:8060/nginx_status` to monitor your NGINX server status. +By default, GitLab configures an NGINX health-check endpoint at `127.0.0.1:8060/nginx_status` to +monitor your NGINX server status. @@ -598,6 +658,6 @@ -The following information is displayed: +The endpoint displays the following information: ```plaintext Active connections: 1 server accepts handled requests @@ -600,8 +660,8 @@ ```plaintext Active connections: 1 server accepts handled requests - 18 18 36 +18 18 36 Reading: 0 Writing: 1 Waiting: 0 ``` @@ -605,8 +665,8 @@ Reading: 0 Writing: 1 Waiting: 0 ``` -- Active connections – Open connections in total. -- 3 figures are shown. +- Active connections: Open connections in total. +- Three figures showing: - All accepted connections. - All handled connections. - Total number of handled requests. @@ -610,7 +670,7 @@ - All accepted connections. - All handled connections. - Total number of handled requests. -- Reading: NGINX reads request headers -- Writing: NGINX reads request bodies, processes requests, or writes responses to a client -- Waiting: Keep-alive connections. This number depends on the keepalive-timeout. +- Reading: NGINX reads request headers. +- Writing: NGINX reads request bodies, processes requests, or writes responses to a client. +- Waiting: Keep-alive connections. This number depends on the `keepalive_timeout` directive. @@ -616,3 +676,3 @@ -#### Configuration options +#### Configure NGINX status options @@ -618,3 +678,5 @@ -Edit `/etc/gitlab/gitlab.rb`: +To configure NGINX status options: + +1. Edit `/etc/gitlab/gitlab.rb`: @@ -620,14 +682,14 @@ -```ruby -nginx['status'] = { - "listen_addresses" => ["127.0.0.1"], - "fqdn" => "dev.example.com", - "port" => 9999, - "options" => { - "access_log" => "on", # Disable logs for stats - "allow" => "127.0.0.1", # Only allow access from localhost - "deny" => "all" # Deny access to anyone else - } -} -``` + ```ruby + nginx['status'] = { + "listen_addresses" => ["127.0.0.1"], + "fqdn" => "dev.example.com", + "port" => 9999, + "options" => { + "access_log" => "on", # Disable logs for stats + "allow" => "127.0.0.1", # Only allow access from localhost + "deny" => "all" # Deny access to anyone else + } + } + ``` @@ -633,3 +695,9 @@ -If you don't find this service useful for your current infrastructure you can disable it with: + To disable the NGINX status endpoint: + + ```ruby + nginx['status'] = { + 'enable' => false + } + ``` @@ -635,7 +703,4 @@ -```ruby -nginx['status'] = { - 'enable' => false -} -``` +1. Save the file and [reconfigure GitLab](https://docs.gitlab.com/ee/administration/restart_gitlab.html#linux-package-installations) + for the changes to take effect. @@ -641,3 +706,3 @@ -Make sure you run `sudo gitlab-ctl reconfigure` for the changes to take effect. +#### Configure user permissions for uploads @@ -643,8 +708,6 @@ -##### Configuring user permissions for uploads - -To ensure that user uploads are accessible your NGINX user (usually `www-data`) -should be added to the `gitlab-www` group. This can be done using the following command: +To ensure user uploads are accessible, add your NGINX user (usually `www-data`) to the `gitlab-www` +group: ```shell sudo usermod -aG gitlab-www www-data @@ -652,6 +715,10 @@ ### Templates -Other than the Passenger configuration in place of Puma and the lack of HTTPS -(although this could be enabled) these files are mostly identical to: +The configuration files are similar to the [bundled GitLab NGINX configuration](https://gitlab.com/gitlab-org/omnibus-gitlab/-/blob/master/files/gitlab-cookbooks/gitlab/templates/default/nginx-gitlab-http.conf.erb), with these differences: + +- Passenger configuration is used instead of Puma. +- HTTPS is not enabled by default, but you can enable it. + +After making changes to the NGINX configuration: @@ -657,3 +724,3 @@ -- [Bundled GitLab NGINX configuration](https://gitlab.com/gitlab-org/omnibus-gitlab/-/blob/master/files/gitlab-cookbooks/gitlab/templates/default/nginx-gitlab-http.conf.erb) +- For Debian-based systems, restart NGINX: @@ -659,3 +726,6 @@ -Don't forget to restart NGINX to load the new configuration (on Debian-based -systems `sudo service nginx restart`). + ```shell + sudo service nginx restart + ``` + +- For other systems, refer to your operating system's documentation for the correct command to restart NGINX. diff --git a/doc/settings/ssl/index.md b/doc/settings/ssl/index.md index eaed06bca85c08c7714c3f5e23c5bb8b17794252_ZG9jL3NldHRpbmdzL3NzbC9pbmRleC5tZA==..0b639ae95f332a6cadc75f2947b0d6f7875956c8_ZG9jL3NldHRpbmdzL3NzbC9pbmRleC5tZA== 100644 --- a/doc/settings/ssl/index.md +++ b/doc/settings/ssl/index.md @@ -191,7 +191,7 @@ You can add alternative domains (or subject alternative names) to the Let's Encrypt certificate. This can be helpful if you would like to use the [bundled NGINX](../nginx.md) as a -[reverse proxy for other backend applications](../nginx.md#inserting-custom-settings-into-the-nginx-configuration). +[reverse proxy for other backend applications](../nginx.md#insert-custom-settings-into-the-nginx-configuration). The DNS records for the alternative domains must point to the GitLab instance. diff --git a/doc/troubleshooting.md b/doc/troubleshooting.md index eaed06bca85c08c7714c3f5e23c5bb8b17794252_ZG9jL3Ryb3VibGVzaG9vdGluZy5tZA==..0b639ae95f332a6cadc75f2947b0d6f7875956c8_ZG9jL3Ryb3VibGVzaG9vdGluZy5tZA== 100644 --- a/doc/troubleshooting.md +++ b/doc/troubleshooting.md @@ -155,7 +155,7 @@ puma['port'] = 3456 ``` -For NGINX port changes please see [Setting the NGINX listen port](settings/nginx.md#setting-the-nginx-listen-port). +For NGINX port changes please see [Setting the NGINX listen port](settings/nginx.md#set-the-nginx-listen-port). ## Git user does not have SSH access