title: NGINX redirect to docker containers
body: <p>I have a CentOS server running docker with 3 containers and NGINX. The open ports are 80, 443, and 22. The containers have ports like so:</p>
  
  <ul>
  <li>container A: 9000</li>
  <li>container B: 4201</li>
  <li>container C: 5443</li>
  </ul>
  
  <p>Each of the NGINX configuration files are nearly identical:</p>
  
  <pre><code>/etc/nginx/conf.d/A.conf
  
  server {
      listen 80;
  
      server_name A.local;
      return 301 https://A.local$request_uri;
  }
  server {
      listen 443 ssl;
  
      server_name A.local;
  
      ssl_certificate ...;
      ssl_certificate_key ...;
  
      location / {
          proxy_pass http://127.0.0.1:9000;
      }
  }
  </code></pre>
  
  <p>The only things that change between the files is A to B, A to C, and port number after 127.0.0.1.</p>
  
  <p>Now when I browse to A.local (this is in /etc/hosts on my local machine) I get a self signed ssl, I accept, I get the correct website! A works!</p>
  
  <p>Browse to B.local, I get a self signed ssl, I accept, I get 502 bad gateway...</p>
  
  <p>Browse to C.local, I get a self signed ssl, I accept, I get 502 bad gateway...</p>
  
  <p>When I go to 192.168.1.247:4201 I get the correct website, the container is running correctly, I am able to access it directly, nginx is not passing me through properly.</p>
  
  <p><strong>EDIT</strong> Additional info:</p>
  
  <p><em>docker ps</em></p>
  
  <pre><code>CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                  PORTS                                                 NAMES
  047f31019eb9        gitlab/gitlab-ce      "/assets/wrapper"        6 hours ago         Up 6 hours (healthy)    80/tcp, 0.0.0.0:5522-&gt;22/tcp, 0.0.0.0:5443-&gt;80/tcp    gitlab
  7ffe8b06b16b        crate                 "/docker-entrypoin..."   26 hours ago        Up 26 hours (healthy)   4300/tcp, 5432/tcp, 0.0.0.0:4201-&gt;4200/tcp            crate-01
  f82437f328de        portainer/portainer   "/portainer"             2 days ago          Up 2 days               0.0.0.0:9000-&gt;9000/tcp                                portainer
  </code></pre>
  
  <p><em>sudo nginx -T</em></p>
  
  <pre><code>nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
  nginx: configuration file /etc/nginx/nginx.conf test is successful
  # configuration file /etc/nginx/nginx.conf:
  # For more information on configuration, see:
  #   * Official English Documentation: http://nginx.org/en/docs/
  #   * Official Russian Documentation: http://nginx.org/ru/docs/
  
  user nginx;
  worker_processes auto;
  error_log /var/log/nginx/error.log;
  pid /run/nginx.pid;
  
  # Load dynamic modules. See /usr/share/nginx/README.dynamic.
  include /usr/share/nginx/modules/*.conf;
  
  events {
      worker_connections 1024;
  }
  
  http {
      log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                        '$status $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" "$http_x_forwarded_for"';
  
      access_log  /var/log/nginx/access.log  main;
  
      sendfile            on;
      tcp_nopush          on;
      tcp_nodelay         on;
      keepalive_timeout   65;
      types_hash_max_size 2048;
  
      include             /etc/nginx/mime.types;
      default_type        application/octet-stream;
  
      # Load modular configuration files from the /etc/nginx/conf.d directory.
      # See http://nginx.org/en/docs/ngx_core_module.html#include
      # for more information.
      include /etc/nginx/conf.d/*.conf;
  
      server {
          listen       80 default_server;
          listen       [::]:80 default_server;
          server_name  _;
          root         /usr/share/nginx/html;
  
          # Load configuration files for the default server block.
          include /etc/nginx/default.d/*.conf;
  
          location / {
          }
  
          error_page 404 /404.html;
              location = /40x.html {
          }
  
          error_page 500 502 503 504 /50x.html;
              location = /50x.html {
          }
      }
  
  # Settings for a TLS enabled server.
  #
  #    server {
  #        listen       443 ssl http2 default_server;
  #        listen       [::]:443 ssl http2 default_server;
  #        server_name  _;
  #        root         /usr/share/nginx/html;
  #
  #        ssl_certificate "/etc/pki/nginx/server.crt";
  #        ssl_certificate_key "/etc/pki/nginx/private/server.key";
  #        ssl_session_cache shared:SSL:1m;
  #        ssl_session_timeout  10m;
  #        ssl_ciphers HIGH:!aNULL:!MD5;
  #        ssl_prefer_server_ciphers on;
  #
  #        # Load configuration files for the default server block.
  #        include /etc/nginx/default.d/*.conf;
  #
  #        location / {
  #        }
  #
  #        error_page 404 /404.html;
  #            location = /40x.html {
  #        }
  #
  #        error_page 500 502 503 504 /50x.html;
  #            location = /50x.html {
  #        }
  #    }
  
  }
  
  
  # configuration file /usr/share/nginx/modules/mod-http-geoip.conf:
  load_module "/usr/lib64/nginx/modules/ngx_http_geoip_module.so";
  
  # configuration file /usr/share/nginx/modules/mod-http-image-filter.conf:
  load_module "/usr/lib64/nginx/modules/ngx_http_image_filter_module.so";
  
  # configuration file /usr/share/nginx/modules/mod-http-perl.conf:
  load_module "/usr/lib64/nginx/modules/ngx_http_perl_module.so";
  
  # configuration file /usr/share/nginx/modules/mod-http-xslt-filter.conf:
  load_module "/usr/lib64/nginx/modules/ngx_http_xslt_filter_module.so";
  
  # configuration file /usr/share/nginx/modules/mod-mail.conf:
  load_module "/usr/lib64/nginx/modules/ngx_mail_module.so";
  
  # configuration file /usr/share/nginx/modules/mod-stream.conf:
  load_module "/usr/lib64/nginx/modules/ngx_stream_module.so";
  
  # configuration file /etc/nginx/mime.types:
  
  types {
      text/html                             html htm shtml;
      text/css                              css;
      text/xml                              xml;
      image/gif                             gif;
      image/jpeg                            jpeg jpg;
      application/javascript                js;
      application/atom+xml                  atom;
      application/rss+xml                   rss;
  
      text/mathml                           mml;
      text/plain                            txt;
      text/vnd.sun.j2me.app-descriptor      jad;
      text/vnd.wap.wml                      wml;
      text/x-component                      htc;
  
      image/png                             png;
      image/tiff                            tif tiff;
      image/vnd.wap.wbmp                    wbmp;
      image/x-icon                          ico;
      image/x-jng                           jng;
      image/x-ms-bmp                        bmp;
      image/svg+xml                         svg svgz;
      image/webp                            webp;
  
      application/font-woff                 woff;
      application/java-archive              jar war ear;
      application/json                      json;
      application/mac-binhex40              hqx;
      application/msword                    doc;
      application/pdf                       pdf;
      application/postscript                ps eps ai;
      application/rtf                       rtf;
      application/vnd.apple.mpegurl         m3u8;
      application/vnd.ms-excel              xls;
      application/vnd.ms-fontobject         eot;
      application/vnd.ms-powerpoint         ppt;
      application/vnd.wap.wmlc              wmlc;
      application/vnd.google-earth.kml+xml  kml;
      application/vnd.google-earth.kmz      kmz;
      application/x-7z-compressed           7z;
      application/x-cocoa                   cco;
      application/x-java-archive-diff       jardiff;
      application/x-java-jnlp-file          jnlp;
      application/x-makeself                run;
      application/x-perl                    pl pm;
      application/x-pilot                   prc pdb;
      application/x-rar-compressed          rar;
      application/x-redhat-package-manager  rpm;
      application/x-sea                     sea;
      application/x-shockwave-flash         swf;
      application/x-stuffit                 sit;
      application/x-tcl                     tcl tk;
      application/x-x509-ca-cert            der pem crt;
      application/x-xpinstall               xpi;
      application/xhtml+xml                 xhtml;
      application/xspf+xml                  xspf;
      application/zip                       zip;
  
      application/octet-stream              bin exe dll;
      application/octet-stream              deb;
      application/octet-stream              dmg;
      application/octet-stream              iso img;
      application/octet-stream              msi msp msm;
  
      application/vnd.openxmlformats-officedocument.wordprocessingml.document    docx;
      application/vnd.openxmlformats-officedocument.spreadsheetml.sheet          xlsx;
      application/vnd.openxmlformats-officedocument.presentationml.presentation  pptx;
  
      audio/midi                            mid midi kar;
      audio/mpeg                            mp3;
      audio/ogg                             ogg;
      audio/x-m4a                           m4a;
      audio/x-realaudio                     ra;
  
      video/3gpp                            3gpp 3gp;
      video/mp2t                            ts;
      video/mp4                             mp4;
      video/mpeg                            mpeg mpg;
      video/quicktime                       mov;
      video/webm                            webm;
      video/x-flv                           flv;
      video/x-m4v                           m4v;
      video/x-mng                           mng;
      video/x-ms-asf                        asx asf;
      video/x-ms-wmv                        wmv;
      video/x-msvideo                       avi;
  }
  
  # configuration file /etc/nginx/conf.d/A.local.conf:
  server {
      listen 80;
  
      server_name A.local;
      return 301 https://A.local$request_uri;
  }
  server {
      listen 443 ssl;
  
      server_name A.local;
  
      ssl_certificate /etc/ssl/certs/www/A.local/A.local.crt;
      ssl_certificate_key /etc/ssl/certs/www/A.local/A.local.key;
  
      location / {
          proxy_pass http://127.0.0.1:9000;
      }
  }
  
  # configuration file /etc/nginx/conf.d/B.local.conf:
  server {
      listen 80;
  
      server_name B.local;
      return 301 https://B.local$request_uri;
  }
  server {
      listen 443 ssl;
  
      server_name B.local;
  
      ssl_certificate /etc/ssl/certs/www/B.local/B.local.crt;
      ssl_certificate_key /etc/ssl/certs/www/B.local/B.local.key;
  
      location / {
          proxy_pass http://127.0.0.1:5443;
      }
  }
  
  # configuration file /etc/nginx/conf.d/C.local.conf:
  server {
      listen 80;
  
      server_name C.local;
      return 301 https://C.local$request_uri;
  }
  server {
      listen 443 ssl;
  
      server_name C.local;
  
      ssl_certificate /etc/ssl/certs/www/C.local/C.local.crt;
      ssl_certificate_key /etc/ssl/certs/www/C.local/C.local.key;
  
      location / {
          proxy_pass http://127.0.0.1:4201;
      }
  }
  </code></pre>