【发布时间】:2021-12-30 06:01:46
【问题描述】:
我正在尝试使用 nginx、php、mysql、phpmyadmin 设置 docker 环境,我想知道如何配置它,以便我可以通过另一个主机名访问 phpmyadmin。
例如访问我想使用 site.com 的站点和访问我想使用 database.site.com 的 phpmyadmin
我的 /etc/hosts 是这样配置的
127.0.0.1 localhost example.com database.example.com
我的 docker 作曲家是这样的
version: '3'
services:
web:
image: nginx:alpine
container_name: nginx
volumes:
- "./etc/nginx/default.conf:/etc/nginx/conf.d/default.conf"
- "./etc/ssl:/etc/ssl"
- "./repo:/var/www/html"
- "./etc/nginx/default.template.conf:/etc/nginx/conf.d/default.template"
ports:
- "80:80"
- "443:443"
environment:
- NGINX_HOST=site.com
networks:
- my-network
command: /bin/sh -c "envsubst '$site.com' < /etc/nginx/conf.d/default.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
restart: always
depends_on:
- php
- mysql
php:
image: bitnami/php-fpm:8.0.10
container_name: php
restart: always
volumes:
- "./etc/php/php.ini:/usr/local/etc/php/conf.d/php.ini"
- "./repo:/var/www/html"
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
ports:
- "8080:80"
environment:
- PMA_ARBITRARY=1
- PMA_HOST=mysql
networks:
- my-network
restart: always
depends_on:
- mysql
mysql:
image: mysql:8.0.27
container_name: mysql
restart: always
env_file:
- ".env"
environment:
- MYSQL_DATABASE=database
- MYSQL_ROOT_PASSWORD=root
- MYSQL_USER=admin
- MYSQL_PASSWORD=admin
ports:
- "8989:3306"
volumes:
- "./data/db/mysql:/var/lib/mysql"
networks:
my-network: null
我的 nginx 配置文件看起来像这样
server {
listen 80;
server_name example.com;
root /var/www/html/public;
...
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME$document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
fastcgi_pass unix:/run/php/php8.0-fpm.sock;
}
...
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com;
root /var/www/html/public;
...
location / {
if ($args ~* _escaped_fragment_) {
# Pass to phantom proxy
proxy_pass http://127.0.0.1:443;
}
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Client-Verify SUCCESS;
proxy_set_header X-SSL-Subject $ssl_client_s_dn;
proxy_set_header X-SSL-Issuer $ssl_client_i_dn;
proxy_set_header HTTPS on;
proxy_buffers 16 4k;
proxy_buffer_size 2k;
proxy_pass http://127.0.0.1:433;
}
...
}
server {
listen 80;
server_name database.example.com;
location / {
proxy_pass http://phpmyadmin:80;
}
}
【问题讨论】:
标签: docker nginx docker-compose containers