Multiple duplicates of "https:" in CPS causing nginx errors
<!---
Please read this!
Before opening a new issue, make sure to search for keywords in the issues
filtered by the "regression" or "type::bug" label:
- https://gitlab.com/gitlab-org/gitlab/issues?label_name%5B%5D=regression
- https://gitlab.com/gitlab-org/gitlab/issues?label_name%5B%5D=type::bug
and verify the issue you're about to submit isn't a duplicate.
--->
### Summary
CSP header in Omnibus includes multiple repeats of `https:` part. There are so many of them that in our setup sometimes default `proxy_buffer_size` in nginx - the one used for headers, 4kB by default - is reached and request fails with HTTP 502.
### Steps to reproduce
* Enable CSP in Omnibus Gitlab (`gitlab_rails['content_security_policy'] = {'enabled' => true}`)
* Try opening the log in page.
* Check headers.
### What is the current *bug* behavior?
In our case the CSP header ends with multiple repeats of `https:` - there are 143 unnecessary repeats at the end.
This causes nginx to _sometimes_ return 502 (depending on other headers added).
By default, nginx uses a single memory page size for `proxy_buffer_size` which is 4kB in our case. I've seen total headers size from ~3,2kB up to ~4,2kB. There is nearly a 1kB just in those repeated `https:` entries.
It seems that error occurs when the following header appears (I don't know when does Gitlab add it) - exact content likely depends on Gitlab version:
```
link: </assets/application_utilities-2531e4e6ef42e4af0a1b836590e0b362055984d2fa233ae3c5b07d7c4a2761fd.css>; rel=preload; as=style; type=text/css,</assets/application-f79ed5a6b0dfecf39281aeefcdd5b15d7cc6d871a3ae20e60c40d6a718377704.css>; rel=preload; as=style; type=text/css,</assets/highlight/themes/white-0163ec1ff3033e0ebaf2e7700680941596e39d73535518445a42947430b7d452.css>; rel=preload; as=style; type=text/css
```
### What is the expected *correct* behavior?
* CSP header doesn't include repeats.
* Troubleshooting of this case improved:
* As it may be possible to hit this limit with long enough domains used in rules, it would be nice to have an error/warning reported somewhere if there is a risk of hitting the limit.
* Maybe default values used by nginx should be increased? Although they're likely set to single page for performance reasons.
* Add this case to troubleshooting docs and mention it in the [CSP documentation](https://docs.gitlab.com/omnibus/settings/configuration.html#set-a-content-security-policy).
### Relevant logs and/or screenshots
CSP header value (anonymized):
```
base-uri 'self'; child-src https://www.google.com/recaptcha/ https://www.recaptcha.net/ https://content.googleapis.com https://content-compute.googleapis.com https://content-cloudbilling.googleapis.com https://content-cloudresourcemanager.googleapis.com https://www.googletagmanager.com/ns.html https://example.com/assets/ https://example.com/-/speedscope/index.html https://example.com/-/sandbox/ https://example.com/assets/ blob: data:; connect-src 'self' wss://example.com https://example.net https://cdn.cookielaw.org https://*.onetrust.com *.google-analytics.com *.analytics.google.com *.googletagmanager.com; default-src 'self'; font-src 'self'; frame-ancestors 'self'; frame-src https://www.google.com/recaptcha/ https://www.recaptcha.net/ https://content.googleapis.com https://content-compute.googleapis.com https://content-cloudbilling.googleapis.com https://content-cloudresourcemanager.googleapis.com https://www.googletagmanager.com/ns.html https://example.com/admin/ https://example.com/assets/ https://example.com/-/speedscope/index.html https://example.com/-/sandbox/; img-src 'self' data: blob: http: https: *.google-analytics.com *.googletagmanager.com; manifest-src 'self'; media-src 'self' data: blob: http: https:; object-src 'none'; report-uri https://example.net/api/project_id/security/?sentry_key=key&sentry_environment=production&sentry_release=gitlab-16.4.1-ee.0; script-src 'strict-dynamic' 'self' 'unsafe-inline' 'unsafe-eval' https://www.google.com/recaptcha/ https://www.recaptcha.net https://apis.google.com https://cdn.cookielaw.org https://*.onetrust.com https://cdn.bizible.com/scripts/bizible.js *.googletagmanager.com 'nonce-ppmUKI5kfPfzP8iJHjuUOA=='; style-src 'self' 'unsafe-inline'; worker-src https://example.com/assets/ blob: data:; form-action 'self' https: http: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https: https:
```
Nginx logs the following error when issue occurs:
```
upstream sent too big header while reading response header from upstream
```
### Output of checks
<!-- If you are reporting a bug on GitLab.com, uncomment below -->
<!-- This bug happens on GitLab.com -->
<!-- /label ~"reproduced on GitLab.com" -->
#### Results of GitLab environment info
<!-- Input any relevant GitLab environment information if needed. -->
Domains anonymized.
Omnibus with the following CSP configuration:
<details>
<summary>CSP config</summary>
```ruby
gitlab_rails['content_security_policy'] = {
'enabled' => true,
'report_only' => false,
'directives' => {
'report_uri' => 'https://example.net/api/project_id/security/?sentry_key=key&sentry_environment=production&sentry_release=gitlab-16.4.1-ee.0',
}
}
```
</details>
<details>
<summary>Expand for output related to GitLab environment info</summary>
<pre>
System information
System: Debian 10
Proxy: no
Current User: git
Using RVM: no
Ruby Version: 3.0.6p216
Gem Version: 3.4.19
Bundler Version:2.4.19
Rake Version: 13.0.6
Redis Version: 7.0.13
Sidekiq Version:6.5.7
Go Version: unknown
GitLab information
Version: 16.4.1-ee
Revision: 229bc5f5985
Directory: /opt/gitlab/embedded/service/gitlab-rails
DB Adapter: PostgreSQL
DB Version: 13.11
URL: https://example.com
HTTP Clone URL: https://example.com/some-group/some-project.git
SSH Clone URL: git@example.com:some-group/some-project.git
Elasticsearch: yes
Geo: yes
Geo node: Primary
Using LDAP: yes
Using Omniauth: yes
Omniauth Providers:
GitLab Shell
Version: 14.28.0
Repository storages:
- default: unix:/var/opt/gitlab/gitaly/gitaly.socket
GitLab Shell path: /opt/gitlab/embedded/service/gitlab-shell
Gitaly
- default Address: unix:/var/opt/gitlab/gitaly/gitaly.socket
- default Version: 16.4.1
- default Git Version: 2.42.0
</pre>
</details>
#### Results of GitLab application Check
<!-- Input any relevant GitLab application check information if needed. -->
Not relevant.
### Possible fixes
<!-- If you can, link to the line of code that might be responsible for the problem. -->
Increase proxy buffers in the nginx config, e.g.
```
proxy_busy_buffers_size 512k;
proxy_buffers 8 512k;
proxy_buffer_size 256k;
```
issue