#  ============LICENSE_START===============================================
#  Copyright (C) 2024 Nordix Foundation. All rights reserved.
#  ========================================================================
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.
#  ============LICENSE_END=================================================

events { }

http {

    # Add more server entries here for scaling or load balancing
    upstream cps-and-ncmp {
        server cps-and-ncmp:8080;
    }

    server {
        listen 80;

        # Root location proxying
        location / {
            proxy_pass http://cps-and-ncmp;
            include /etc/nginx/proxy_params;    # Include common proxy parameters
        }

        location /swagger-ui/ {     # Swagger UI location
            proxy_pass http://cps-and-ncmp/swagger-ui/;
        }

        location /v3/api-docs/ {    # API docs location
            proxy_pass http://cps-and-ncmp/v3/api-docs/;
        }

        location /actuator/health { # Actuator health endpoint
            proxy_pass http://cps-and-ncmp/actuator/health;
        }

        location /actuator/health/readiness {    # Actuator readiness endpoint
            proxy_pass http://cps-and-ncmp/actuator/health/readiness;
        }

    }
}
