Created
August 12, 2020 22:14
-
-
Save flyingdan/fd8ec3c2703b9ab514230391601054c4 to your computer and use it in GitHub Desktop.
nginx configuration modified to support SSL for the FreeNAS community Gitlab plugin
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## Original file is at https://gitlab.com/gitlab-org/gitlab/blob/master/lib/support/nginx/gitlab-ssl | |
## GitLab | |
## | |
## Modified from nginx http version | |
## Modified from http://blog.phusion.nl/2012/04/21/tutorial-setting-up-gitlab-on-debian-6/ | |
## Modified from https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html | |
## | |
## Lines starting with two hashes (##) are comments with information. | |
## Lines starting with one hash (#) are configuration parameters that can be uncommented. | |
## | |
################################## | |
## CONTRIBUTING ## | |
################################## | |
## | |
## If you change this file in a Merge Request, please also create | |
## a Merge Request on https://gitlab.com/gitlab-org/omnibus-gitlab/merge_requests | |
## | |
################################### | |
## configuration ## | |
################################### | |
## | |
## See installation.md#using-https for additional HTTPS configuration details. | |
upstream gitlab-workhorse { | |
# GitLab socket file, | |
# for Omnibus this would be: unix:/var/opt/gitlab/gitlab-workhorse/socket | |
#server unix:/home/git/gitlab/tmp/sockets/gitlab-workhorse.socket fail_timeout=0; # default | |
server unix:/usr/local/www/gitlab-ce/tmp/sockets/gitlab-workhorse.socket fail_timeout=0; # changed | |
} | |
map $http_upgrade $connection_upgrade_gitlab_ssl { | |
default upgrade; | |
'' close; | |
} | |
## NGINX 'combined' log format with filtered query strings | |
log_format gitlab_ssl_access $remote_addr - $remote_user [$time_local] "$request_method $gitlab_ssl_filtered_request_uri $server_protocol" $status $body_bytes_sent "$gitlab_ssl_filtered_http_referer" "$http_user_agent"; | |
## Remove private_token from the request URI | |
# In: /foo?private_token=unfiltered&authenticity_token=unfiltered&feed_token=unfiltered&... | |
# Out: /foo?private_token=[FILTERED]&authenticity_token=unfiltered&feed_token=unfiltered&... | |
map $request_uri $gitlab_ssl_temp_request_uri_1 { | |
default $request_uri; | |
~(?i)^(?<start>.*)(?<temp>[\?&]private[\-_]token)=[^&]*(?<rest>.*)$ "$start$temp=[FILTERED]$rest"; | |
} | |
## Remove authenticity_token from the request URI | |
# In: /foo?private_token=[FILTERED]&authenticity_token=unfiltered&feed_token=unfiltered&... | |
# Out: /foo?private_token=[FILTERED]&authenticity_token=[FILTERED]&feed_token=unfiltered&... | |
map $gitlab_ssl_temp_request_uri_1 $gitlab_ssl_temp_request_uri_2 { | |
default $gitlab_ssl_temp_request_uri_1; | |
~(?i)^(?<start>.*)(?<temp>[\?&]authenticity[\-_]token)=[^&]*(?<rest>.*)$ "$start$temp=[FILTERED]$rest"; | |
} | |
## Remove feed_token from the request URI | |
# In: /foo?private_token=[FILTERED]&authenticity_token=[FILTERED]&feed_token=unfiltered&... | |
# Out: /foo?private_token=[FILTERED]&authenticity_token=[FILTERED]&feed_token=[FILTERED]&... | |
map $gitlab_ssl_temp_request_uri_2 $gitlab_ssl_filtered_request_uri { | |
default $gitlab_ssl_temp_request_uri_2; | |
~(?i)^(?<start>.*)(?<temp>[\?&]feed[\-_]token)=[^&]*(?<rest>.*)$ "$start$temp=[FILTERED]$rest"; | |
} | |
## A version of the referer without the query string | |
map $http_referer $gitlab_ssl_filtered_http_referer { | |
default $http_referer; | |
~^(?<temp>.*)\? $temp; | |
} | |
## Redirects all HTTP traffic to the HTTPS 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/) | |
listen 0.0.0.0:80; | |
listen [::]:80 ipv6only=on default_server; | |
server_name YOUR_FQDN; ## Replace this with something like gitlab.example.com | |
server_tokens off; ## Don't show the nginx version number, a security best practice | |
return 301 https://$http_host$request_uri; | |
access_log /var/log/nginx/gitlab_access.log gitlab_ssl_access; | |
error_log /var/log/nginx/gitlab_error.log; | |
} | |
## HTTPS host | |
server { | |
listen 0.0.0.0:443 ssl; | |
listen [::]:443 ipv6only=on ssl default_server; | |
server_name YOUR_FQDN; ## Replace this with something like gitlab.example.com | |
server_tokens off; ## Don't show the nginx version number, a security best practice | |
## Strong SSL Security | |
## https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html & https://cipherli.st/ | |
ssl on; | |
ssl_certificate /usr/local/etc/nginx/ssl/gitlab.crt; | |
ssl_certificate_key /usr/local/etc/nginx/ssl/gitlab.key; | |
# GitLab needs backwards compatible ciphers to retain compatibility with Java IDEs | |
ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"; | |
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; | |
ssl_prefer_server_ciphers on; | |
ssl_session_cache shared:SSL:10m; | |
ssl_session_timeout 5m; | |
## See app/controllers/application_controller.rb for headers set | |
## [Optional] If your certficate has OCSP, enable OCSP stapling to reduce the overhead and latency of running SSL. | |
## Replace with your ssl_trusted_certificate. For more info see: | |
## - https://medium.com/devops-programming/4445f4862461 | |
## - https://www.ruby-forum.com/topic/4419319 | |
## - https://www.digitalocean.com/community/tutorials/how-to-configure-ocsp-stapling-on-apache-and-nginx | |
# ssl_stapling on; | |
# ssl_stapling_verify on; | |
# ssl_trusted_certificate /etc/nginx/ssl/stapling.trusted.crt; | |
# resolver 208.67.222.222 208.67.222.220 valid=300s; # Can change to your DNS resolver if desired | |
# resolver_timeout 5s; | |
## [Optional] Generate a stronger DHE parameter: | |
## sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096 | |
## | |
# ssl_dhparam /etc/ssl/certs/dhparam.pem; | |
## [Optional] Enable HTTP Strict Transport Security | |
# add_header Strict-Transport-Security "max-age=31536000; includeSubDomains"; | |
## Real IP Module Config | |
## http://nginx.org/en/docs/http/ngx_http_realip_module.html | |
real_ip_header X-Real-IP; ## X-Real-IP or X-Forwarded-For or proxy_protocol | |
real_ip_recursive off; ## If you enable 'on' | |
## If you have a trusted IP address, uncomment it and set it | |
# set_real_ip_from YOUR_TRUSTED_ADDRESS; ## Replace this with something like 192.168.1.0/24 | |
## Individual nginx logs for this GitLab vhost | |
access_log /var/log/nginx/gitlab_access.log gitlab_ssl_access; | |
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-Ssl on; | |
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
proxy_set_header X-Forwarded-Proto $scheme; | |
proxy_set_header Upgrade $http_upgrade; | |
proxy_set_header Connection $connection_upgrade_gitlab_ssl; | |
proxy_pass http://gitlab-workhorse; | |
} | |
error_page 404 /404.html; | |
error_page 422 /422.html; | |
error_page 500 /500.html; | |
error_page 502 /502.html; | |
error_page 503 /503.html; | |
location ~ ^/(404|422|500|502|503)\.html$ { | |
# Location to the GitLab's public directory, | |
# for Omnibus this would be: /opt/gitlab/embedded/service/gitlab-rails/public | |
root /usr/local/www/gitlab-ce/public; # changed | |
internal; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment