gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:59:19 25 4
gpt4 key购买 nike

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

default.conf

server {
listen 80;
server_name server.com;

location / {
root /www;
index index.html;
}

我还想将请求重定向到 http://10.0.0.1/app1到端口 8888 上具有相同应用程序的 3 个服务器,例如:

http://10.0.0.1/app1 -> http://10.0.0.(2,3,4):8888/app1

所以我必须在 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 http://10.0.0.1/

但是当我打开http://10.0.0.1/app1时我收到错误 404,因为 default.conf 它尝试在/www 中查找 app1,甚至不尝试检查 app1.conf 的平衡规则。所以看起来只适用于 default.conf 配置文件。如何解决?

最佳答案

upsteam 部分无论如何都需要位于 http block 中,该 block 位于您的 nginx.conf/default.conf 中。
对于位置 block ,您可能可以使用:

default.conf

http {
...
upstream app1 {
server 10.0.0.2:8888;
server 10.0.0.3:8888;
server 10.0.0.4:8888;
}
...
server {
listen 80;
server_name server.com;

include /path/to/app1.conf;

location / {
root /www;
index index.html;
}
...
include /etc/nginx/conf.d/*;
...
}

app1.conf

location /app1/ {
rewrite ^/app1^/ /$1 break;
proxy_pass http://app1;
}

编辑default.conf中include的路径。

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

编辑2:
从你的评论中我刚刚看到重写中的正则表达式可能是错误的。

app1.conf

location /app1/ {
rewrite ^/[^\/]+)(/.*) $1 break;
proxy_pass http://app1;
}

关于nginx 上游配置在单独的文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42559934/

25 4 0
文章推荐: apache-spark - 获取 java.lang.UnsupportedOperationException : Cannot evaluate expression in Pyspark
文章推荐: firebase - Firebase 控制台中的实时数据库未加载数据
文章推荐: php - 如何从 PHP 文件夹中删除图像并从 phpMyAdmin 中删除文件名?
文章推荐: c# - 仅在需要时将对象包装到任务