Michal Takáč
Michal Takáč

Reputation: 1055

Docker-compose + Nginx SSL Reverse proxy

Im trying to setup the reverse proxy using Nginx that will also provide https for the backend service.

I have 3 containers, one for mongodb, one for my .NET core backend app and one for reverse proxy.

Docker containers seems to work well and until ive set up the HTTPS it was working well.

The problem is that the requests from https://localhost:8080 are not translated properly to the .NET core app running on http port.

Problem is in my Nginx conf file, but im not sure how to fix it.

    worker_processes 1;

events { worker_connections 1024; }

http {

    sendfile on;

    upstream web {
        server web:443;
    }

    server {
        listen 8080;

        location /upstream {
            proxy_pass         https://web;
            proxy_ssl_certificate     /etc/nginx/cert.pem;
            proxy_ssl_certificate_key /etc/nginx/privkey.pem;
            proxy_ssl_session_reuse on;
            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
        }
    }

    server {
        listen 443 ssl;

        ssl_certificate_key    /etc/nginx/privkey.pem;
        ssl_client_certificate /etc/nginx/cert.pem;
        ssl_verify_client      off;

        location / {
            proxy_pass http://web;
        }
    }
}

When i do HTTP request, ill get back 502 Bad gateway error, when using https://localhost:8080 it will return ERR_SSL_PROTOCOL_ERROR.

In the terminal, nginx container returns

enter image description here

Any ideas?

Upvotes: 2

Views: 4643

Answers (1)

Michal Takáč
Michal Takáč

Reputation: 1055

After reading a bit trought the docs Ive been able to find the solution.

    worker_processes 1;

events { worker_connections 1024; }

http {

    sendfile on;

    upstream web {
        server web:80;
    }

    server {
        listen 8080 ssl;

        ssl_certificate         /etc/nginx/cert.pem;
        ssl_certificate_key     /etc/nginx/privkey.pem;

        location / {
            proxy_pass         http://web;
            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
            proxy_set_header   X-NginX-Proxy true;
        }
    }
}

Upvotes: 2

Related Questions