nginx上游配置在单独的文件中

nginx上游配置在单独的文件中,nginx,Nginx,我在10.0.0.1版本的nginx上有一个带有简单配置文件的站点: default.conf server { listen 80; server_name server.com; location / { root /www; index index.html; } 我还想将请求重定向到端口8888上具有相同应用程序的3台服务器,如: -> 因此,我必须在default.conf中添加以下平衡配置: upstr

我在10.0.0.1版本的nginx上有一个带有简单配置文件的站点:

default.conf

server {
    listen       80;
    server_name  server.com;

    location / {
        root /www;
        index index.html;
    }
我还想将请求重定向到端口8888上具有相同应用程序的3台服务器,如:

->

因此,我必须在default.conf中添加以下平衡配置:

upstream app1 {
   server 10.0.0.2:8888;
   server 10.0.0.3:8888;
   server 10.0.0.4:8888;
}

server {
   listen 80;

   location /app1/ {
      rewrite ^/app1^/ /$1 break;
      proxy_pass http://app1;
   }
}
但是我想把这个平衡配置保存在一个单独的文件中——app1.conf

如果我在/etc/nginx/conf.d/文件夹中有这两个配置文件,我只能打开URL

但是当我打开时,由于default.conf,我得到了错误404,它尝试在/www中查找app1,甚至不尝试检查app1.conf以获取平衡规则。 因此,它似乎只适用于default.conf配置文件。 如何修复它?

请尝试以下操作:

  • 创建一个文件
    /etc/nginx/upstream.conf

    server 10.0.0.2:8888;
    server 10.0.0.3:8888;
    server 10.0.0.4:8888;
    
  • 将配置更改为:

    upstream app1 {
        include /etc/nginx/upstream.conf;
    }
    
    server {
        listen 80;
    
        location /app1/ {
        rewrite ^/app1^/ /$1 break;
        proxy_pass http://app1;
        } 
    }
    
  • 请尝试以下操作:

  • 创建一个文件
    /etc/nginx/upstream.conf

    server 10.0.0.2:8888;
    server 10.0.0.3:8888;
    server 10.0.0.4:8888;
    
  • 将配置更改为:

    upstream app1 {
        include /etc/nginx/upstream.conf;
    }
    
    server {
        listen 80;
    
        location /app1/ {
        rewrite ^/app1^/ /$1 break;
        proxy_pass http://app1;
        } 
    }
    

  • upsteam
    部分无论如何都需要位于
    http
    块中,它位于nginx.conf/default.conf中。
    仅对于pobably可以使用的位置块:

    default.conf

    app1.conf

    在default.conf中编辑包含的路径

    编辑:
    事实上我犯了个错误。nginx的指令是分层的。在文档中,您可以找到可以使用哪个块的位置。
    server
    块需要位于
    http
    块中。
    位置
    块可以位于
    服务器
    位置
    块中。
    根据所处的块,您可以使用
    include
    在该特定上下文中导入块。
    因此,在
    服务器
    块中使用
    包含
    ,可以包含特定于应用程序的
    位置
    块,但不能包含
    服务器
    块。这是因为
    server
    块只能驻留在
    http
    块中。
    我希望这有助于澄清你的情况

    Edit2:
    从你的评论中,我刚刚看到重写中的正则表达式可能是错误的

    app1.conf


    upsteam
    部分无论如何都需要位于
    http
    块中,它位于nginx.conf/default.conf中。
    仅对于pobably可以使用的位置块:

    default.conf

    app1.conf

    在default.conf中编辑包含的路径

    编辑:
    事实上我犯了个错误。nginx的指令是分层的。在文档中,您可以找到可以使用哪个块的位置。
    server
    块需要位于
    http
    块中。
    位置
    块可以位于
    服务器
    位置
    块中。
    根据所处的块,您可以使用
    include
    在该特定上下文中导入块。
    因此,在
    服务器
    块中使用
    包含
    ,可以包含特定于应用程序的
    位置
    块,但不能包含
    服务器
    块。这是因为
    server
    块只能驻留在
    http
    块中。
    我希望这有助于澄清你的情况

    Edit2:
    从你的评论中,我刚刚看到重写中的正则表达式可能是错误的

    app1.conf


    我想说的原因是,您有两个服务器块具有相同的侦听端口。这与两个配置文件/目录无关。谢谢您的建议。但似乎我不能在服务器块外使用location指令,如果我在app1.conf中更改端口号-nginx在不符合我的条件的端口上启动侦听-我需要打开URL“”,我会说原因是您有两个具有相同侦听端口的服务器块。这与两个配置文件/目录无关。谢谢您的建议。但似乎我不能在服务器块外使用location指令,如果我在app1.conf中更改端口号-nginx开始侦听不符合我条件的端口-我需要打开URL“”谢谢您的回答。我检查了这个变体,但我确实需要将上游的所有配置保存在单独的文件中——这样,我可以通过重命名此文件来禁用此配置。但这似乎是不可能的,所以我将使用include指令。它在1.19.0上失败,因为
    nginx:[emerg]指令“server”没有打开的“{”在/etc/nginx/upstream.conf:1中
    谢谢您的回答。我检查了这个变体,但我肯定需要将上游的所有配置保存在单独的文件中-这样我可以通过重命名这个文件来禁用这个配置。但是似乎不可能,所以我将使用include指令。它在1.19.0上失败,因为
    nginx:[emerg]指令“server”在/etc/nginx/upstream.conf:1中没有打开“{”,重写将从原始url/app1/some/more/中删除/app1/。如果您不想删除任何内容,应该将其删除。谢谢,我刚刚检查了这个。当我有位置为/app1/的app1.conf时{rewrite^/app1^/$1 break;proxy_pass;}我无法重新启动nginx,我收到错误:/etc/init.d/nginx restart[…]重新启动nginx(通过systemctl):nginx.service的nginx.serviceJob失败,因为控制进程已退出,并显示错误代码。请参阅“systemctl status nginx.service”和“journalctl-xe”有关详细信息,请参见.failed!和error.log:2017/03/03 15:29:05[emerg]21787#0:/etc/nginx/app1.conf:1UPD:我已解决此问题-需要将app1.conf重命名为app1(无.conf)重写将从原始url/app1/some/more/中删除/app1/。如果您不想删除任何内容,则应将其删除。谢谢,我刚刚检查了此项。当我使用位置为/app1/{rewrite^/app1^/$1 break;proxy_pass;}的app1.conf时我无法重新启动nginx,我收到错误:/etc/init.d/nginx rest
    
    location /app1/ {
      rewrite ^/[^\/]+)(/.*) $1 break;
      proxy_pass http://app1;
    }