server {

    listen 80 ;
    listen [::]:80 ;

    server_name gitlist.patrikx3.com;

    error_log /var/log/nginx/gitlist.patrikx3.com-error.log;
    access_log /var/log/nginx/gitlist.patrikx3.com-access.log combined;
    root /var/www/gitlist.patrikx3.com/public;
    location ~ /.well-known {
        auth_basic off;
        auth_pam off;
        allow all;
        root /var/www/acme-challenge;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    return 301 https://$host$request_uri;
}


server {

    ssl on;
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name gitlist.patrikx3.com;

    error_log /var/log/nginx/gitlist.patrikx3.com-error.log;
    access_log /var/log/nginx/gitlist.patrikx3.com-access.log combined;
    root /var/www/gitlist.patrikx3.com/public;

    ssl_certificate /root/acme/ssl/patrikx3.com/fullchain.cer;
    ssl_certificate_key /root/acme/ssl/patrikx3.com/patrikx3.com.key;

    # it uses the built in Linux security called PAM,
    # but you could use a
    # auth_basic on;
    # auth_basic_user_file /etc/nginx/.htpasswd;

    auth_pam "Restricted";
    auth_pam_service_name "nginx";

    limit_req zone=default_limit burst=1000;
    limit_conn default_limit_conn 100;

    location ~ /.well-known {
        auth_basic off;
        auth_pam off;
        allow all;
        root /var/www/acme-challenge;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    set $x_frame_options_policy 'self';
    add_header Strict-Transport-Security "max-age=31536000; " always;
    add_header X-Frame-Options "ALLOW-FROM gitlist.patrikx3.com";
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header Content-Security-Policy "frame-ancestors $x_frame_options_policy";


    index index.php;

    location / {
        autoindex on;
        set $redirect_url $uri;
        try_files $uri $uri/ /index.php$is_args$query_string;
    }

    location = /index.php {
        include snippets/fastcgi-php.conf;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_pass unix:/var/run/php/php8.0-fpm-git.sock;
    }

    # static repo files for cloning over https
    location ~ ^.*\.git/objects/([0-9a-f]+/[0-9a-f]+|pack/pack-[0-9a-f]+.(pack|idx))$ {
        root /my/git/repos;
    }

    # requests that need to go to git-http-backend
    location ~ ^.*\.git/(HEAD|info/refs|objects/info/.*|git-(upload|receive)-pack)$ {
        proxy_read_timeout 900;
        fastcgi_read_timeout 900;
        uwsgi_read_timeout 900;

        client_max_body_size 20G;
        root /my/git/repos;
        fastcgi_pass unix:/var/run/fcgiwrap-git.socket;
        fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend;
        fastcgi_param PATH_INFO $uri;
        fastcgi_param GIT_PROJECT_ROOT $document_root;
        fastcgi_param GIT_HTTP_EXPORT_ALL "";
        fastcgi_param REMOTE_USER $remote_user;
        include fastcgi_params;
    }
}
