如何将 nginx 配置为使用 2 个 docroots(具有不同的主机名)和 ddev

How can I configure nginx to use 2 docroots (with different hostnames) with ddev

我想在 ddev 网络容器中使用 2 个网站,但找不到如何正确配置 nginx。 我已将 additional_hostname 设置为 site-a 和 site-b 以允许我使用 site-a.ddev.site 和 site-b.ddev.site 访问网站。网站位于不同的本地目录 site-a 和 site-b。

如何为 nginx 定义 "sites-available" 和 "sites-enabled" 配置? 在文档中我只找到了创建 .ddev/nginx-site.conf 文件的方法,但是这样我只能配置一个网站。

我知道我可以 "ddev ssh" 进入容器并手动配置它,但是当我签出项目并制作 "ddev configure" 和 "ddev start" 时它应该自动配置。

两个不同的主机名真的很简单,你只需在 .ddev/config.yaml 中使用 additional_hostnamesadditional_fqdns。参见 docs

但是从你问题的上下文来看,我假设你想在 nginx 配置中有两个不同的 docroots,它们响应不同的主机名。如果是这样,这里有一些选项:

  1. 只需使用两个不同的 ddev 项目。如果这两个项目的代码还不是单存储库且紧密耦合,这是最简单的技术。
  2. 添加一个 .ddev/nginx-site.conf 来覆盖 nginx 配置。 (这是 docs). There is an example of the exact technique you want in https://github.com/drud/ddev/issues/1889#issuecomment-543306759 中的 "legacy" 技术 - @jcrichto 像这样向默认配置添加了一个额外的 http 服务器(但请阅读整个问题):
#######################################################
# EXAMPLE SITE ADDED TO DEFAULT NGINX
# THIS ASSUMES server_name: matches a name added to 
# additional_hostnames: in your config.yaml
# 
# CANADA - EN
#######################################################
server {
    listen 80;

    server_name ca.example.com.ddev.site;

    #redifne your root
    root /var/www/html/lang/en_ca;

    include /etc/nginx/nginx_default.conf;

    # this directive is unique to our set up, but demonstrates
    # you can do more directives per site like this
    location ~ \.php$ {
        root /var/www/html/lang/en_ca;
    }
}

https://github.com/drud/ddev/issues/1850#issuecomment-547461968 中以相同的方式解决了相同的问题以获得更多上下文。