Несколько сайтов nginx с одним контейнером - PullRequest
0 голосов
/ 23 января 2019

Итак, сначала позвольте мне объяснить, что я пытаюсь сделать.У меня есть 2 веб-сайта, веб-интерфейс и бэкэнд, веб-интерфейс - это просто HTML и vue, который использует бэкэнд для хранения информации (API)

Веб-сайты: - erp.test (веб-интерфейс) - api.erp.test (backend; php, api)

docker-compose.yml

version: '3'

services:
    #web
    frontend:
        build:
            context: .
            dockerfile: ./environment/nginx/Dockerfile
        container_name: frontend
        restart: always
        ports:
            - 80:80
            - 442:442
        volumes:
            - ./environment/nginx/sites-enabled:/etc/nginx/sites-enabled
            - ./frontend/public:/usr/share/nginx/html/frontend
            - ./api:/usr/share/nginx/html/api
        links:
            - php
    php:
        build:
            context: .
            args:
                version: 7.3.0-fpm
            dockerfile: ./environment/php/Dockerfile
        container_name: php_backend
        restart: always
        depends_on:
            - mysql
    mysql:
        build:
            context: .
            args:
                version: 5.7
            dockerfile: ./environment/mysql/Dockerfile
        restart: always
        volumes:
            - ./environment/mysql/data:/var/lib/mysql
        environment:
            MYSQL_ROOT_PASSWORD: laravel
            MYSQL_DATABASE: laravel
        ports:
            - 13306:3306
    command:
        build:
            context: .
            dockerfile: ./environment/command/Dockerfile
        container_name: command
        restart: always
        command: "tail -f /dev/null"
        volumes:
            - ./frontend:/frontend

При этом используются следующие файлы для включенных сайтов.

Мой dockerfile для среды nginx выглядит следующим образом:

FROM nginx

Файлы конфигурации для веб-сайтов:

etc / nginx / sites-enabled / api.erp.test

server {
    listen 80;
    listen [::]:80;
    server_name api.erp.test;
    root /usr/share/nginx/html/backend/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.3.0-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

и т.д. / nginx / sites-enabled / erp.test

server {

    listen 80;
    listen [::]:80;
    server_name erp.test;
    root /usr/share/nginx/html/frontend/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    charset utf-8;
}

Оба эти файла должны (я предполагаю) быть активными и работать.Я проверил контейнер и файлы находятся в правильном положении, и я даже добавил IP-адрес контейнера в мой файл hosts на моей машине, например:

172.18.0.3 erp.test172.18.0.3 api.erp.test

Каждый раз, когда я посещаю их URL-адреса, они просто переходят на URL-адрес nginx по умолчанию, а не на определенные веб-сайты.Есть идеи, что я делаю не так?

1 Ответ

0 голосов
/ 24 января 2019

Я полагаю, что для nginx в docker файлы виртуального хоста должны входить в /etc/nginx/conf.d, а не /etc/nginx/sites-enabled

Итак, в вашем docker-compose.yml изменении

./environment/nginx/sites-enabled:/etc/nginx/sites-enabled

до

./environment/nginx/sites-enabled:/etc/nginx/conf.d

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...