nginx上游配置在单独的文件中
我在10.0.0.1版本的nginx上有一个带有简单配置文件的站点: default.confnginx上游配置在单独的文件中,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
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;
}