skip to Main Content

I have a website host on a server in Digital Ocean that is behaving weirdly.

The website is written in Flask which is deployed in Docker and using reverse proxy with a combination of Let’s Encrypt to host on the web.

The website’s domain is mes.th3pl4gu3.com.

If I go on mes.th3pl4gu3.com/web/ the website appears and works normal.

If I go on mes.th3pl4gu3.com/web it gives me http://localhost/web/ in the URl instead and conenction fails.

However, when I run it locally, it works fine.

I’ve checked my nginx logs, when i browse mes.th3pl4gu3.com/web/ the access_logs returns success but when i use mes.th3pl4gu3.com/web nothing comes to the log.

Does anyone have any idea what might be causing this ?

Below are some codes that might help in troubleshooting.

server {

server_name   mes.th3pl4gu3.com;

  location / {
    access_log  /var/log/nginx/mes/access_mes.log;
    error_log  /var/log/nginx/mes/error_mes.log;
    proxy_pass  http://localhost:9003; # The mes_pool nginx vip
  }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/..........
    ssl_certificate_key /etc/letsencrypt/........
    include /etc/letsencrypt/.........
    ssl_dhparam /etc/letsencrypt/......

}

server {
    if ($host = mes.th3pl4gu3.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot



  listen        80;
  server_name   mes.th3pl4gu3.com;
    return 404; # managed by Certbot


}

Docker Instances:

7121492ad994   docker.pkg.github.com/mervin16/mauritius-emergency-services-api/mes:1.2.5     "uwsgi 
app.ini"          4 weeks ago    Up 4 weeks   0.0.0.0:9002->5000/tcp   mes-instace-2
f4dc063e33b8   docker.pkg.github.com/mervin16/mauritius-emergency-services-api/mes:1.2.5     "uwsgi app.ini"          4 weeks ago    Up 4 weeks   0.0.0.0:9001->5000/tcp   mes-instace-1
fb269ed2229a   nginx                                                                         "/docker-entrypoint.…"   4 weeks ago    Up 4 weeks   0.0.0.0:9003->80/tcp     nginx_mes
2ad5afe0afd1   docker.pkg.github.com/mervin16/mauritius-emergency-services-api/mes:1.2.5     "uwsgi app.ini"          4 weeks ago    Up 4 weeks   0.0.0.0:9000->5000/tcp   mes-backup

docker-compose-instance.yml

version: "3.8"

# Contains all Production instances
# Should always stay up
# In case both instances fails, backup instance will takeover
services:
  mes-instace-1:
    container_name: mes-instace-1
    image: "docker.pkg.github.com/mervin16/mauritius-emergency-services-api/mes:${MES_VERSION}"
    networks:
      - mes_net
    volumes:
      - ./data:/app/data
    env_file:
      - secret.env
    ports:
      - "9001:5000"
    restart: always
    environment:
      - MES_VERSION=${MES_VERSION}

  mes-instace-2:
    container_name: mes-instace-2
    image: "docker.pkg.github.com/mervin16/mauritius-emergency-services-api/mes:${MES_VERSION}"
    networks:
      - mes_net
    volumes:
      - ./data:/app/data
    env_file:
      - secret.env
    ports:
      - "9002:5000"
    restart: always
    environment:
      - MES_VERSION=${MES_VERSION}

networks:
  mes_net:
    name: mes_network
    driver: bridge

docker-compose.yml

version: "3.8"

# Contains the backup instance and the nginx server
# This should ALWAYS stay up

services:
  mes-backup:
    container_name: mes-backup
    image: "docker.pkg.github.com/mervin16/mauritius-emergency-services-api/mes:${MES_VERSION}"
    networks:
      - mes_net
    volumes:
      - ./data:/app/data
    env_file:
      - secret.env
    ports:
      - "9000:5000"
    restart: always
    environment:
      - MES_VERSION=${MES_VERSION}

  nginx_mes:
    image: nginx
    container_name: nginx_mes
    ports:
      - "9003:80"
    networks:
      - mes_net
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
      - ./log/nginx:/var/log/nginx
    depends_on:
      - mes-backup
    restart: always

networks:
  mes_net:
    name: mes_network
    driver: bridge

I have multiple instances for load balancing across apps.

Can someone please help or if anyone has any clue why this might be happening ?

3

Answers


  1. My guess is it is related to your Flask SERVER_NAME

    As you said, locally your SERVER_NAME might be set to localhost:8000.

    However, on production, it would need to be something like

    SERVER_NAME = "th3pl4gu3.com"
    

    Your issue is that you are pulling the SERVER_NAME from the Flask SERVER_NAME variable, so it ends up as https://localhost/web instead of your desired URL.

    Login or Signup to reply.
  2. As long as I tested the page https://mes.th3pl4gu3.com/web with or without / trailing at the end it worked fine. (Firefox version 87 on Ubuntu)
    Maybe there is a bug / problem with your web browser or any kind of VPN / Proxy you are running. Make sure all of them are off.

    Plus on Nginx you can get rid of trailing / using rewrite rule

    e.g.

    location = /stream {
        rewrite ^/stream /stream/;
    }
    

    which tells Nginx parse stream as it is stream/

    and for making sure you are not facing any issue because of cached data, disable and clear all the cache. On your web browser hit F12 -> go to console tab , hit F1 and there disable cache. On Nginx set "no cache" for header, e.g.

    add_header Last-Modified $date_gmt;
    add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
    if_modified_since off;
    expires off;
    etag off;
    
    Login or Signup to reply.
  3. I tested your site with Chrome, Safari, and Curl, and I can’t see that issue.

    Try clear your cache.

    Method 1: Ctrl-Shift-R

    Method 2: DevTool -> Application/Storage -> Clear site data

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search