首页 > 解决方案 > 来自 docker 外部的 nginx 中的虚拟主机

问题描述

我正在尝试使用 nginx + php-fpm 在 docker 中运行一个项目。Ubuntu 20.10。

标准示例中有 docker-compose:

version: '3'

services:
  nginx:
    image: nginx:latest
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./hosts:/etc/nginx/conf.d
      - ./sites:/var/www
      - ./logs/nginx:/var/log/nginx
    links:
      - php
  php:
    build: ./images/php
    links:
      - mysql
    volumes:
      - ./sites:/var/www
  mysql:
    image: mysql
    ports:
      - "3306:3306"
    volumes:
      - /etc/mysql:/etc/mysql
      - ./logs/mysql:/var/log/mysql
      - ./mysql:/var/lib/mysql
      - ./mysql-files:/var/lib/mysql-files
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: sait

本地主机被提升,在主机中我可以指定虚拟主机并访问它们。如何进行这样的配置从外部引用虚拟主机?A 记录通过我正确获取到默认项目的外部 IP 地址和域名 - ERR_CONNECTION_REFUSED 进行注册。端口对ufw开放,通过外部ip正常进入。

nginx domain.conf:

server {
    listen 80;
    index index.php index.html;
    server_name ________ www.___________;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/________________;

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

Dockerfile:

FROM php:7.4-fpm

RUN apt-get update && apt-get install -y \
        curl \
        wget \
        git \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
    libpng-dev \
    libonig-dev \
    libzip-dev \
    libmcrypt-dev \
        && pecl install mcrypt-1.0.3 \
    && docker-php-ext-enable mcrypt \
        && docker-php-ext-install -j$(nproc) iconv mbstring mysqli pdo_mysql zip \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
        && docker-php-ext-install -j$(nproc) gd

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

ADD php.ini /usr/local/etc/php/conf.d/40-custom.ini

WORKDIR /var/www

CMD ["php-fpm"]

须藤 lsof -nP -i | 听听

systemd-r  605 systemd-resolve   13u  IPv4  26775      0t0  TCP 127.0.0.53:53 (LISTEN)
cupsd      667            root    6u  IPv6  29160      0t0  TCP [::1]:631 (LISTEN)
cupsd      667            root    7u  IPv4  29161      0t0  TCP 127.0.0.1:631 (LISTEN)
container  777            root    8u  IPv4  31394      0t0  TCP 127.0.0.1:43289 (LISTEN)
sshd       803            root    3u  IPv4  30762      0t0  TCP *:22 (LISTEN)
sshd       803            root    4u  IPv6  30764      0t0  TCP *:22 (LISTEN)
docker-pr 2342            root    4u  IPv6  40932      0t0  TCP *:3306 (LISTEN)
docker-pr 2521            root    4u  IPv6  43169      0t0  TCP *:443 (LISTEN)
docker-pr 2535            root    4u  IPv6  44053      0t0  TCP *:80 (LISTEN)

标签: dockernginxdocker-composevirtualhost

解决方案


推荐阅读