gpt4 book ai didi

php - 如何使用 NGINX 在 docker 中设置动态子域

转载 作者:行者123 更新时间:2023-12-02 18:03:51 26 4
gpt4 key购买 nike

基本上,我需要有动态子域,因此站点应该可以在 Docker 中的任何子域中使用,如下所示:

admin.example.comadrian.example.comfiles.example.com .

我没有固定数量的子域,所以我不能把它们都放在主机文件中。

Server_name 也没有帮助:server_name www.$hostname;

它们应该都指向同一个网站。我试过 jwilder 反向代理,但无法正确设置。

我有一个 docker-compose.ymlDockerfile

谁能给我一个我可以使用的工作代码,然后根据我的需要进行更改。如果我还需要更改主机文件。

我做了一些研究,但我的 nginx 和 docker 知识还不够。

Nginx.conf

server {
server_name .example.local;

listen 80 default;
client_max_body_size 1008M;
access_log /var/log/nginx/application.access.log;
error_log /var/log/nginx/error.log;
root /application/web;
index index.php;

if (!-e $request_filename) {
rewrite ^.*$ /index.php last;
}

location ~ \.php$ {
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log";
include fastcgi_params;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
}

}

Dockerfile

FROM phpdockerio/php73-fpm:latest

RUN mkdir /application
WORKDIR "/application"
COPY . /application

# Fix debconf warnings upon build
ARG DEBIAN_FRONTEND=noninteractive

RUN apt-get update && \
# Installing packages
apt-get -y --no-install-recommends --assume-yes --quiet install \
nano curl git ca-certificates ruby-dev gcc automake libtool rubygems build-essential make php-pear \
php7.3-mysql php7.3-bcmath php-imagick php7.3-intl php7.3-gd php-yaml php7.3-soap php7.3-dev mysql-client && \
# Xdebug
pecl install xdebug && \
# Cleaning up after installation
apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

docker-compose.yml

version: "3.1"
services:

db:
image: mysql:5.6
container_name: ls-db
working_dir: /application
volumes:
- .:/application:cached # User-guided caching
- ./phpdocker/sql:/docker-entrypoint-initdb.d
environment:
MYSQL_DATABASE: ls
MYSQL_USER: drupal
MYSQL_PASSWORD: drupal
MYSQL_ROOT_PASSWORD: root
ports:
- "6006:3306"
networks:
- ls

web:
image: nginx:alpine
container_name: ls-webserver
working_dir: /application
volumes:
- .:/application:cached # User-guided caching
- ./phpdocker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
ports:
- "6060:80"
networks:
- ls

php-fpm:
build: phpdocker/php-fpm
container_name: ls-php-fpm
working_dir: /application
volumes:
- .:/application:cached # User-guided caching
- ./phpdocker/php-fpm/php-ini-overrides.ini:/etc/php/7.3/fpm/conf.d/99-overrides.ini
networks:
- ls

networks:
ls: # this network (app1)
driver: bridge

volumes:
db:

最佳答案

不确定您使用 jwilder 的反向代理尝试过什么但失败了,但这是解决手头确切问题的绝佳方法,无需处理 nginx 配置和复杂的组合配置。

这是一个有效的代码,您甚至不必更改您的主机文件

version: '3.7'

services:
nginx:
image: jwilder/nginx-proxy
ports: ["80:80"]
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
environment:
DEFAULT_HOST: fallback.lvh.me

api:
image: dannyben/whoami
environment:
MESSAGE: I am the API
VIRTUAL_HOST: "*.lvh.me"

web:
image: dannyben/whoami
environment:
MESSAGE: I am the WEB
VIRTUAL_HOST: "www.lvh.me"

为了让它工作,您必须首先启动 nginx 代理:

$ docker-compose up -d nginx

只有这样,后端服务

$ docker-compose up -d api web

然后您可以访问 www.lvh.me 查看 Web 后端,访问 anything-else.lvh.me 查看 API 后端。

此外,您可以为 VIRTUAL_HOST 环境变量提供多个通配符主机,以便它同时支持您的本地开发环境和生产环境,如下所示:

VIRTUAL_HOST: "*.lvh.me,*.your-real-domain.com"

重要的是要注意,为了使其在生产环境中工作,您的 DNS 也应该设置为使用通配符子域。

在此演示中,lvh.me 只是将所有流量转发到 127.0.0.1,这又到达您的 nginx,然后将流量向内转发到您的实际应用程序。

关于php - 如何使用 NGINX 在 docker 中设置动态子域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55647323/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com