Unable to run NGINX on any port other than 80 inspite of specifying it in manifest file

Why am I unable to run Nginx on any port other than the default 80, when I am specifically mentioning in the YAML file that i want it to run on port 1234 (and not on 80)?

nginx gets its default port out of a config file, found in /etc/nginx. The default nginx container actually loads the file /etc/nginx/conf.d/default.conf, which looks like this:

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

This is what’s preventing you from using a different port. The solution is to mount a different configuration into the container that the container will load, say, at /etc/nginx/conf.d/default.conf. This will allow you to change the port the program uses.

To serve static files, you can do something similar by mounting an html directory at /usr/share/nginx/html (unless you change that in the config, which you now see you can do).

1 Like

Oh i didn’t know this, thanks Rob. Is this only specific to nginx? If i run a flask/fastapi ML app with uvicorn serving it, will uvicorn also run on default 80 and will ignore the port we specify in YAML file (say 1234) and same with streamlit , as in streamlit will always run on port 5000 unless we do the changes to the config file for uvicorn and streamlit?

I think that python http servers like uvicorn (sp?) get their port from the command line that launches them, so you can set the port by using command and args. Some web servers look for an environment variable. But nginx is a legacy web server that was popular before :t_rex: Docker Ruled The World :sauropod: so it uses its original config file scheme; I’d guess that apache httpd does something similar, since it’s even more venerable than nginx.

1 Like