0

I am using docker-compose with nginx reverse proxy to run it on server with different paths:

  • server_ip/backend
  • server_ip /frontend

should work on port 80.

I'm testing it with a docker-compose using nginx as the web container name and phpmyadmin as the container name myadmin (mysql):

services:
    web:
        image: nginx:alpine
        networks:
            docker-network:
               aliases:
                   - frontend-name
        container_name: web
        volumes:
            - "./etc/nginx/default.conf:/etc/nginx/conf.d/default.conf"
            - "./etc/ssl:/etc/ssl"
            - "./web:/var/www/html"
            - "./etc/nginx/default.template.conf:/etc/nginx/conf.d/default.template"
        ports:
            - "${HTTP_PORT}:80"
            - "${HTTPS_PORT}:443"
        environment:
            - NGINX_HOST=${NGINX_HOST}
            #- VIRTUAL_HOST= a.com
        command: /bin/sh -c "envsubst '$$NGINX_HOST' < /etc/nginx/conf.d/default.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
        restart: always
        depends_on:
            - php
            - mysqldb

    php:
        image: nanoninja/php-fpm:latest
        networks:
            docker-network:
               aliases:
                   - php-name  
        container_name: php-fpm
        restart: always
        volumes:
            - "./etc/php/php.ini:/usr/local/etc/php/conf.d/php.ini"
            - "./web:/var/www/html"

    myadmin:
        image: phpmyadmin/phpmyadmin
        networks:
            docker-network:
               aliases:
                   - backend-name  
        container_name: myadmin
        ports:
            - "${PHPMYADMIN_PORT}:80"
        environment:
            - PMA_ARBITRARY=1
            - PMA_HOST=${MYSQL_HOST}
           # - PMA_ABSOLUTE_URI: https://localhost/pma/
        restart: always
        depends_on:
            - mysqldb

    mysqldb:
        build:
            context: .
            dockerfile: Dockerfile-mariadb
            args:
                MARIADB_VERSION: ${MARIADB_VERSION}
        networks:
            docker-network:
               aliases:
                   - mysql-name
        container_name: ${MYSQL_HOST}
        restart: always
        env_file:
            - ".env"
        environment:
            - MYSQL_DATABASE=${MYSQL_DATABASE}
            - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
            - MYSQL_USER=${MYSQL_USER}
            - MYSQL_PASSWORD=${MYSQL_PASSWORD}
        ports:
            - "127.0.0.1:${MYSQL_PORT}:3306"
        volumes:
            - "./mysql-bbdd:/var/lib/mysql"

networks:
    docker-network:
       # driver: bridge

using the nginx default.conf file to do the reverse proxy:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name localhost;

    index index.php index.html;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/html/public;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

    location / {
          
        proxy_pass http://web;
         
    }

    location /api {
  
        proxy_pass http://myadmin:8080/;
    }

    location = /404.html {
 
        internal;
    }
}

but it doesn't work for me when I put the server ip with its routes, I don't know what to do.

0 Answers0