# Mattermost Error in Self Hosted using Docker + Nginx + Cloudflare

**URL:** <https://forum.mattermost.com/t/mattermost-error-in-self-hosted-using-docker-nginx-cloudflare/17560>\
**Category:** Uncategorized\
**Created:** [December 21, 2023, 4:46pm UTC](https://forum.mattermost.com/t/mattermost-error-in-self-hosted-using-docker-nginx-cloudflare/17560 "2023-12-21T16:46:07Z")\
**Posts on this page:** 1\
**Showing post:** 2

<div class="post-metadata">

**Author:** ![mojimich2015](https://avatars.discourse-cdn.com/v4/letter/m/ce73a5/32.png) [@mojimich2015](https://forum.mattermost.com/u/mojimich2015)\
**Post date:** [December 22, 2023, 4:36pm UTC](https://forum.mattermost.com/t/mattermost-error-in-self-hosted-using-docker-nginx-cloudflare/17560/2 "2023-12-22T16:36:03Z")

</div>

After struggling with it, I’ve found the problem.

I had a nginx configuration like this:

```
upstream chatsystem {
    server mattermost:8065;
}

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off;

server {
    listen 80;
    server_name domain.com;

    location / {
        uwsgi_pass br-app:9000;
        include /etc/nginx/uwsgi_params;
        client_max_body_size 50M;
        proxy_read_timeout 300s;
    }

 location ~ /mattermost/api/v[0-9]+/(users/)?websocket$ {
       proxy_set_header Upgrade '$http_upgrade';
       proxy_set_header Connection "upgrade";
       client_max_body_size 50M;
       proxy_set_header Host '$http_host';
       proxy_set_header X-Real-IP '$remote_addr';
       proxy_set_header X-Forwarded-For '$proxy_add_x_forwarded_for';
       proxy_set_header X-Forwarded-Proto '$scheme';
       proxy_set_header X-Frame-Options SAMEORIGIN;
       proxy_buffers 256 16k;
       proxy_buffer_size 16k;
       client_body_timeout 60;
       send_timeout 300;
       lingering_timeout 5;
       proxy_connect_timeout 90;
       proxy_send_timeout 300;
       proxy_read_timeout 90s;
       proxy_http_version 1.1;
       proxy_pass http://chatsystem;
   }

   location /mattermost {
       client_max_body_size 50M;
       proxy_set_header Connection "";
       proxy_set_header Host '$http_host';
       proxy_set_header X-Real-IP '$remote_addr';
       proxy_set_header X-Forwarded-For '$proxy_add_x_forwarded_for';
       proxy_set_header X-Forwarded-Proto '$scheme';
       proxy_set_header X-Frame-Options SAMEORIGIN;
       proxy_buffers 256 16k;
       proxy_buffer_size 16k;
       proxy_read_timeout 600s;
       proxy_cache mattermost_cache;
       proxy_cache_revalidate on;
       proxy_cache_min_uses 2;
       proxy_cache_use_stale timeout;
       proxy_cache_lock on;
       proxy_http_version 1.1;
       proxy_pass http://chatsystem;
   }
}

```

This configuration was in a .tpl file “default.conf.tpl” and it was copying to container using this docker entrypoint:

```
#!/bin/sh

set -e

envsubst < /etc/nginx/default.conf.tpl > /etc/nginx/conf.d/default.conf
nginx -g 'daemon off;'

```

When It was parsing the default.conf.tpl it was ignoring the nginx variables like $host.

I’ve changed my nginx configuration file from default.conf.tpl to default.conf and Now it is working fine.

Here is the final nginx configuration file:

```
upstream chatsystem {
    server mattermost:8065;
}

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off;

server {
    listen 80;
    server_name domain.com;

    location / {
        uwsgi_pass br-app:9000;
        include /etc/nginx/uwsgi_params;
        client_max_body_size 50M;
        proxy_read_timeout 300s;
    }

 location ~ /mattermost/api/v[0-9]+/(users/)?websocket$ {
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
       client_max_body_size 50M;
       proxy_set_header Host $http_host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header X-Frame-Options SAMEORIGIN;
       proxy_buffers 256 16k;
       proxy_buffer_size 16k;
       client_body_timeout 60;
       send_timeout 300;
       lingering_timeout 5;
       proxy_connect_timeout 90;
       proxy_send_timeout 300;
       proxy_read_timeout 90s;
       proxy_http_version 1.1;
       proxy_pass http://chatsystem;
   }

   location /mattermost {
       client_max_body_size 50M;
       proxy_set_header Connection "";
       proxy_set_header Host $http_host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header X-Frame-Options SAMEORIGIN;
       proxy_buffers 256 16k;
       proxy_buffer_size 16k;
       proxy_read_timeout 600s;
       proxy_cache mattermost_cache;
       proxy_cache_revalidate on;
       proxy_cache_min_uses 2;
       proxy_cache_use_stale timeout;
       proxy_cache_lock on;
       proxy_http_version 1.1;
       proxy_pass http://chatsystem;
   }
}

```

And this is the final Dockerfile:

```
FROM nginxinc/nginx-unprivileged:1.25.3-alpine
LABEL maintainer="x@example.com"

COPY default.conf /etc/nginx/conf.d

COPY ./uwsgi_params /etc/nginx/uwsgi_params

COPY run.sh /run.sh

USER root

RUN chown nginx:nginx /etc/nginx/conf.d/default.conf

RUN chmod +x /run.sh

USER nginx

CMD ["/run.sh"]

```

And this is the entrypoint:

```
#!/bin/sh

set -e
nginx -g 'daemon off;'

```

Note: During my misconfiguration I was getting different kinds of errors from “malformed host header” or “missing host header” or “websocket errors”.

---

_[View the full topic](https://forum.mattermost.com/t/mattermost-error-in-self-hosted-using-docker-nginx-cloudflare/17560)._
