在jwilder/nginx代理Docker容器中重写URL

在jwilder/nginx代理Docker容器中重写URL,docker,nginx,jwilder-nginx-proxy,Docker,Nginx,Jwilder Nginx Proxy,我正在把一些网站包装起来。我想能够迁移一些重写规则,自动追加或删除请求中的域名www 如何/在jwilder/nginx代理Docker容器或其他容器中添加一些简单的重写规则 所有代理容器都可以使用一个规则,不过如果可以为每个容器指定规则,那就更好了。docker映像允许您为每个虚拟主机添加一个配置,您可以在其中添加重写规则,如中所述: 要添加每个虚拟主机的设置,请在/etc/nginx/vhost.d下添加配置文件。每虚拟\u主机文件必须完全以虚拟\u主机命名 为了允许在添加和删除后端时动态配

我正在把一些网站包装起来。我想能够迁移一些重写规则,自动追加或删除请求中的域名www

如何/在jwilder/nginx代理Docker容器或其他容器中添加一些简单的重写规则

所有代理容器都可以使用一个规则,不过如果可以为每个容器指定规则,那就更好了。

docker映像允许您为每个虚拟主机添加一个配置,您可以在其中添加重写规则,如中所述:

要添加每个虚拟主机的设置,请在/etc/nginx/vhost.d下添加配置文件。每虚拟\u主机文件必须完全以虚拟\u主机命名

为了允许在添加和删除后端时动态配置虚拟主机,最好将外部目录挂载为/etc/nginx/vhost.d,而不是使用派生映像或挂载单个配置文件

例如,如果您有一个名为www.app.example.com的虚拟主机,则可以为该主机提供自定义重写配置,如下所示:

在/etc/nginx/vhost.d下创建一个名为www.app.example.com的文件,然后添加以下内容:

return 301 $scheme://app.example.com$request_uri;
然后创建一个新的nginx容器并将此目录装载到其中。如果选中/etc/nginx/conf.d/default.conf,您将注意到虚拟主机已被修改为如下内容:

server {
    server_name www.app.example.com;
    listen 80 ;
    access_log /var/log/nginx/access.log vhost;
    include /etc/nginx/vhost.d/www.app.example.com;
    location / {
        proxy_pass http://www.app.example.com;
    }
}
include行包含我们编写的返回语句,当然,您可以向其中添加更多重写规则。docker映像允许您为每个虚拟主机添加一个配置,您可以在其中添加重写规则,如中所述:

要添加每个虚拟主机的设置,请在/etc/nginx/vhost.d下添加配置文件。每虚拟\u主机文件必须完全以虚拟\u主机命名

为了允许在添加和删除后端时动态配置虚拟主机,最好将外部目录挂载为/etc/nginx/vhost.d,而不是使用派生映像或挂载单个配置文件

例如,如果您有一个名为www.app.example.com的虚拟主机,则可以为该主机提供自定义重写配置,如下所示:

在/etc/nginx/vhost.d下创建一个名为www.app.example.com的文件,然后添加以下内容:

return 301 $scheme://app.example.com$request_uri;
然后创建一个新的nginx容器并将此目录装载到其中。如果选中/etc/nginx/conf.d/default.conf,您将注意到虚拟主机已被修改为如下内容:

server {
    server_name www.app.example.com;
    listen 80 ;
    access_log /var/log/nginx/access.log vhost;
    include /etc/nginx/vhost.d/www.app.example.com;
    location / {
        proxy_pass http://www.app.example.com;
    }
}

include行包含我们编写的return语句,当然您可以向其中添加更多的重写规则

您实际在哪里编写这些重写规则?内部位置/或自定义位置内?@MostafaHussein两者都不是。我把它们写在vhost服务器块中。他们甚至可以合法地进入现场吗?我想这会让事情变得更容易。我明白了!我以为你用的是包含重写内容的定位方式,但你似乎用的是单行重写,对吗?那么你会把答案贴在你写这些重写规则的地方吗?内部位置/或自定义位置内?@MostafaHussein两者都不是。我把它们写在vhost服务器块中。他们甚至可以合法地进入现场吗?我想这会让事情变得更容易。我明白了!我以为你用的是包含重写内容的定位方式,但你似乎用的是单行重写,对吗?然后我会把答案贴出来,谢谢。现在投票表决。给我点时间看看,我会给你回复的!这正是我要求的!虽然我曾希望可以使用相关容器(如vhost名称的环境)保留配置,并使用docker gen添加重写规则,但这回答了我的问题!接受。这实际上在生产中不起作用,因为。还有其他方法吗?是否尝试重新创建容器?只重新启动不会太多是的,向下v,然后向上D会有感觉,谢谢。现在投票表决。给我点时间看看,我会给你回复的!这正是我要求的!虽然我曾希望可以使用相关容器(如vhost名称的环境)保留配置,并使用docker gen添加重写规则,但这回答了我的问题!接受。这实际上在生产中不起作用,因为。还有其他方法吗?是否尝试重新创建容器?仅重新启动不会足够是的,向下-v,然后向上-d