How to configure a reverse proxy for Artifactory Docker repository when using AWS-ELB load balancer?

How to configure a reverse proxy for Artifactory Docker repository when using AWS-ELB load balancer?

AuthorFullName__c
JFrog Support
articleNumber
000002818
ft:sourceType
Salesforce
FirstPublishedDate
2016-11-21T15:16:04Z
lastModifiedDate
2024-03-10T07:48:55Z
VersionNumber
7

Here is a basic example of the configuration file for a NGINX reverse proxy.

Port 80 is used only as a reference in this example. It is the port the AWS-ELB set for Artifactory.

This configuration uses LUA module (the section with it is marked in bold). It is recommended to use it, although it is not mandatory.

server {

    listen 80;

    server_tokens off;

    ####Server name #####

    server_name <my.artifactory.com>;

    client_max_body_size 0;

   ## Application specific logs

   ## access_log /var/log/nginx/my.artifactory.com-access.log;

   ## error_log /var/log/nginx/my.artifactory.com-error.log;



    location ~* ^/(402\.htm|500\.htm|502\.htm|503\.htm|503-migrate\.htm)$ {

        root /usr/share/nginx/html;

    }



    if ($http_x_forwarded_proto != "https") {

        rewrite ^/artifactory/webapp/(.*) https://$host/artifactory/webapp/$1 redirect;

        rewrite ^/$ $scheme://$host/artifactory/webapp/#/home redirect;

    }

    if ($http_x_forwarded_proto = "https") {

        rewrite ^/$ https://$host/artifactory/webapp/#/home redirect;

    }

   #### docker repository name #####

    rewrite ^/(v1|v2)/(.*) /artifactory/api/docker/<docker-repo-name>/$1/$2;



header_filter_by_lua '

    local myProto = ngx.var["http_x_forwarded_proto"]

    if myProto == "https" then

        local locHeader = ngx.header["Location"]

        if locHeader then

            if type(locHeader) == "string" then

                local location = ngx.re.match(locHeader, "http[s]?://(.*)", "io")

                if location then

                    ngx.header["Location"] = "https://" .. location[1]

                end

            end

        end

    end

';



location /artifactory {

        proxy_http_version 1.1;

        proxy_pass http://localhost:8081;

        proxy_intercept_errors on;

        proxy_pass_header Server;

        proxy_connect_timeout 75s;

        proxy_send_timeout 2400s;

        proxy_read_timeout 2400s;

        proxy_set_header Host $host;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Artifactory-Override-Base-Url $http_x_forwarded_proto://$host/artifactory;

    }

}