0

I'm trying to set up a docker container using Nginx default image and add a simple health route to it as proposed here.

My config is as follows, and I am placing it under /etc/nginx/conf.d/bacon.conf.

# bacon.conf

server {
    listen 80;

    location /health {
        access_log off;
        add_header 'Content-Type' 'application/json';
        return 200 '{"status":"Healthy"}';
    }
}

When I try to access this /health route I end up getting a 404.

I've noticed there is already a default conf file on etc/nginx/conf.d/ called default.conf.

# default.conf

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;
    #}
}

If I remove this default file from my container or if I merge both of them on a single file, my /health route starts working just fine.

I also checked nginx.conf under /etc/nginx which has this line:

#nginx.conf

...
include /etc/nginx/conf.d/*.conf;
...

From what I understand this should make NGinx mix all files ending in .conf into a single configuration file, shouldn't it?

For the sake of simplicity I would like to keep both files, how can I achieve this?

Jason Aller
  • 3,541
  • 28
  • 38
  • 38
Rogerio Schmitt
  • 1,055
  • 1
  • 15
  • 35
  • You have two `server` blocks, one with the name `localhost` and one with no name. See [how Nginx processes a request](http://nginx.org/en/docs/http/request_processing.html). – Richard Smith Jan 16 '23 at 10:51
  • @RichardSmith tried using `default_server` and multiple server names, didn't work – Rogerio Schmitt Jan 16 '23 at 13:27
  • What domain name do you use to access the server in `bacon.conf` and what domain name do you use to access the server in `default.conf`? (the domain name is the part of the URL following `http://` in your `curl` or browser address bar). Are you using IPv4 or IPv6 addresses - because only one of your `server` blocks respond to all IPv6 requests. – Richard Smith Jan 16 '23 at 14:57
  • @RichardSmith I'm running it locally, so it's always localhost – Rogerio Schmitt Jan 16 '23 at 18:36
  • As you know, Nginx chooses the `server` block by using the domain name and port. So, if you are always using `localhost`, Nginx will always choose `default.conf`. In this situation, keeping both files is not an option. – Richard Smith Jan 17 '23 at 08:06

0 Answers0