是否可以在nginx config中使用条件,以便在测试和生产中使用相同的配置文件?

是否可以在nginx config中使用条件,以便在测试和生产中使用相同的配置文件?,nginx,Nginx,我想使用相同的配置nginx站点配置文件进行测试,并只更改服务器名和端口 我如何才能做到这一点或接近这一点 我想要这样的东西:如果hostname==xxx在80上侦听,否则在81上侦听。您应该使用bash/sh。Unix方式。您可以将所有共享部分放在一个单独的文件(例如,common.conf)中,并将其包含在两个精简的服务器块中,如下所示: http { [...] server { listen 80; server_name product

我想使用相同的配置nginx站点配置文件进行测试,并只更改服务器名和端口

我如何才能做到这一点或接近这一点


我想要这样的东西:如果hostname==xxx在80上侦听,否则在81上侦听。

您应该使用
bash/sh
。Unix方式。

您可以将所有共享部分放在一个单独的文件(例如,
common.conf
)中,并将其包含在两个精简的
服务器
块中,如下所示:

http {
    [...]
    server {
        listen 80;
        server_name production.local;

        root /some/path/production;
        include common.conf;
    }

    server {
        listen 81;
        server_name testing.local;

        root /some/path/testing;
        include common.conf;
    }
}
编辑
实际上,您甚至不需要
listen
指令。当以root用户身份运行时,它们默认为
listen 80
,否则默认为
listen 8000
。只要您有DNS条目或主机文件条目,您就可以了。

您能详细说明一下吗?这是一个非常隐晦的答案。你应该使用脚本来部署你的站点,并运行像
makeproduction
maketesting
这样的命令,该命令将自动生成nginx config。该问题不包括任何部署参考,所以我假设它围绕着使用nginx并行运行一个生产版本和一个测试版本展开。即使你写了,它也会给你一个错误,说8080正在被另一个端口使用。所以基本上url是www.example.com:80,但您不需要写80,因为默认情况下它就在那里。但是对于服务www.example2.com:8084,您需要提及端口号才能获得地址。如何在不显式添加端口地址的情况下使其工作??如果您没有
listen 8080,它不会抱怨正在使用端口8080配置中的任意位置。在任何情况下,如果你想使用8084端口,你必须有
listen8084(或类似)位于配置中的某个位置。