How to use frontend app within virtual host proxypass?

I am using docker with three containers – backend/frontend/admin. I would like to use such proxy pass to navigate either to admin page or frontend –

<VirtualHost *:80>
    ServerName cookie.com
    ServerAlias www.cookie.com

    # Proxy requests to frontend
    ProxyPass / http://frontend:4200/
    ProxyPassReverse / http://frontend:4200/

    # Proxy requests to backend with the appropriate path
    ProxyPass /admin http://admin:8080
    ProxyPassReverse /admin  http://admin:8080

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

My frontend .ember-cli has proxy with this value – “proxy”: “http://backend/ratata/backend/public/index.php”

It was working perfectly fine, when I used backend container port 5004:80, but now when using 80:80 its not.

So when I navigate to localhost it loads all the stuff except some requests
and then i get in apache logs this and it hangs the request up to timeout of around 2 minutes. –

[mpm_prefork:error] [pid 347] AH00161: server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting

I also get this –

(20014)Internal error (specific information not available): [client 172.22.0.2:52218] AH01102: error reading status line from remote server frontend:4200, referer: http://localhost/
[Thu Feb 15 17:31:22.102014 2024] [proxy:error] [pid 516] [client 172.22.0.2:52218] AH00898: Error reading from remote server returned by /api/v1/settings, referer: http://localhost/

I am clueless what could be wrong here!

Thanks

ember-cli isn’t meant to run on servers, but
during deployment, projects can be “built” (via ember build --environment=production), and then some server (such as your backend, or nginx) serves those built assets.

here is an example of how to serve static assets in an nginx.conf

server {
    listen       ${NGINX_LISTENING_PORT};
    server_name  localhost;

    gzip on;
    gzip_disable "msie6";

    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd+api.json;

    location / {
        root   /emberclear;

        try_files $uri /index.html;
    }
}

in particular, you want to look at try_files‘s documentation for your own dockerfile + nginx config


in a docker environment, I bootstrapped nginx via this shell script:

#!/usr/bin/env sh

export NGINX_LISTENING_PORT=${PORT:-80}
export VARS_TO_REPLACE='$NGINX_LISTENING_PORT'

if [ "$NGINX_CONF_DIR" = "" ]
then
    NGINX_CONF_DIR=/etc/nginx/conf.d
fi

envsubst "$VARS_TO_REPLACE" < $NGINX_CONF_DIR/default.conf.template > $NGINX_CONF_DIR/default.conf
cat $NGINX_CONF_DIR/default.conf

echo "Starting emberclear..."
nginx -g 'daemon off;'

and this is the entire Dockerfile I had for an nginx-only docker container:

FROM nginx:alpine

COPY dist/ /emberclear
COPY scripts/docker/run-nginx.sh /usr/local/bin
COPY scripts/docker/nginx.conf etc/nginx/conf.d/default.conf.template

EXPOSE 4201
CMD ["/usr/local/bin/run-nginx.sh"]

Leave a Comment