Всем привет. Собрал на Windows 10 через WSL Docker контейнеры для работы с Laravel. Внезапно возникла необходимость в нескольких сайтах с разными доменами на одной копии запущенных контейнеров. В данный момент работает 1 сайт со всеми указанными поддоменами, остальные домены выводят ошибку 404 из первого сайта (там дизайн Laravel). Необходимо настроить все домены и разбить по папкам. Конфигурацию собирал своими силами, т.к. крайне сложно было найти нормальный рабочий вариант с поддержкой https и самоподписанных SSL сертификатов (необходимо для локальной разработки).
На данный момент моя конфигурация
docker-compose.yml выглядит так:
version: "3"
#Docker Networks
networks:
laravel:
#Volumes
volumes:
dbdata:
driver: local
services:
nginx:
image: nginx:alpine
container_name: nginx
extra_hosts:
host.docker.internal: host-gateway
volumes:
- ./www:/var/www/html
- ./config/nginx/nginx-cache-control-headers.conf:/etc/nginx/nginx-cache-control-headers.conf:ro
- ./config/nginx/nginx-security-headers.conf:/etc/nginx/nginx-security-headers.conf:ro
- ./config/nginx/nginx-ssl-options.conf:/etc/nginx/nginx-ssl-options.conf:ro
- ./config/nginx/nginx-deny-invisible-file-access.conf:/etc/nginx/nginx-deny-invisible-file-access.conf:ro
- ./config/nginx/nginx-proxy-to-local.conf:/etc/nginx/nginx-proxy-to-local.conf:ro
- ./config/nginx/certs/youhit.top.loc/cert.crt:/etc/nginx/certs/youhit.top.loc/cert.crt:ro
- ./config/nginx/certs/youhit.top.loc/cert.key:/etc/nginx/certs/youhit.top.loc/cert.key:ro
- ./config/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
ports:
- 80:80
- 443:443
command: [nginx-debug, '-g', 'daemon off;']
networks:
- laravel
php:
build:
context: .
dockerfile: php.dockerfile
container_name: php
volumes:
- ./www:/var/www/html:delegated
networks:
- laravel
mysql:
image: mysql:5.7.29
container_name: mysql
restart: unless-stopped
tty: true
ports:
- 3306:3306
environment:
MYSQL_DATABASE: homestead
MYSQL_USER: homestead
MYSQL_PASSWORD: secret
MYSQL_ROOT_PASSWORD: secret
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- ./config/mysql/dbdata:/var/lib/mysql/
- ./config/mysql/my.cnf:/etc/mysql/my.cnf
networks:
- laravel
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
links:
- mysql
depends_on:
- mysql
environment:
PMA_HOST: mysql
PHP_UPLOAD_MAX_FILESIZE: 1G
PHP_MAX_INPUT_VARS: 1G
ports:
- 8081:80
- 8082:443
networks:
- laravel
redis:
image: redis:alpine
container_name: redis
restart: unless-stopped
ports:
- 6379:6379
networks:
- laravel
composer:
build:
context: .
dockerfile: composer.dockerfile
container_name: composer
volumes:
- ./www:/var/www/html
working_dir: /var/www/html
depends_on:
- php
user: laravel
entrypoint: ['composer', '--ignore-platform-reqs']
networks:
- laravel
npm:
image: node:13.7
container_name: npm
volumes:
- ./www:/var/www/html
ports:
- 3000:3000
- 3001:3001
working_dir: /var/www/html
entrypoint: ['npm']
networks:
- laravel
artisan:
build:
context: .
dockerfile: php.dockerfile
container_name: artisan
volumes:
- ./www:/var/www/html:delegated
depends_on:
- mysql
working_dir: /var/www/html
user: laravel
entrypoint: ['php', '/var/www/html/artisan']
networks:
- laravel
mailhog:
image: mailhog/mailhog:latest
container_name: mailhog
ports:
- 1025:1025
- 8025:8025
networks:
- laravel
Конфиг
nginx.conf выглядит так:
user nginx;
worker_processes auto;
events {
multi_accept on;
worker_connections 5120;
use epoll;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css;
gzip_vary on;
gzip_proxied any;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_referer" "$gzip_ratio"';
map $request_uri $loggable {
~/(favicon\.ico|robots\.txt|sitemap\.xml|apple-touch-icon.*) 0;
default 1;
}
access_log /var/log/nginx/access.log main if=$loggable;
map $http_upgrade $connection_upgrade {
default upgrade;
"" close;
}
server_tokens off;
server {
listen 443 ssl;
index index.php index.html;
server_name domain1.loc *.domain1.loc;
root /var/www/html/domain1.loc/public;
ssl_certificate "/etc/nginx/certs/domain1.loc/cert.crt";
ssl_certificate_key "/etc/nginx/certs/domain1.loc/cert.key";
include nginx-ssl-options.conf;
location / {
try_files $uri $uri/ /index.php?$query_string;
include nginx-proxy-to-local.conf;
include nginx-security-headers.conf;
}
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;
}
}
server {
listen *:80;
# Comment out this line to enable browsing via HTTP
return 301 https://$host$request_uri;
location / {
include nginx-proxy-to-local.conf;
include nginx-security-headers.conf;
}
include nginx-deny-invisible-file-access.conf;
}
}
Подскажите пожалуйста, каким образом можно добавить в мою конфигурацию ещё один сайт и домен? При дублировании секции server с портом 443 все сайты и домены перестают работать, но пингуются. Локальный IP у всех сайтов 127.0.0.1
Как мне добавить domain2.loc и domain3.loc?