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”.