Docker-compose: как использовать обратный прокси-сервер Nginx с маршрутизацией

Я использую docker-compose с обратным прокси-сервером nginx, чтобы запустить его на сервере по разным путям:

  • server_ip/бэкенд
  • IP-адрес_сервера /интерфейс

должно работать на порту 80.

Я тестирую его с помощью docker-compose, используя nginx в качестве имени веб-контейнера и phpmyadmin в качестве имени контейнера 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

используя файл nginxdefault.conf для обратного прокси:

      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;
    }
}

но у меня не работает, когда я указываю ip сервера с его маршрутами, я не знаю, что делать.

0 ответов

Другие вопросы по тегам