【发布时间】:2020-03-26 19:13:36
【问题描述】:
我在我的一台服务器上安装了 Nginx,以便用作我的 Rancher 应用程序的负载平衡器。 我的配置基于此处找到的配置:https://rancher.com/docs/rancher/v2.x/en/installation/ha/create-nodes-lb/nginx/
所以我的配置是:
load_module /usr/lib/nginx/modules/ngx_stream_module.so;
worker_processes 4;
worker_rlimit_nofile 40000;
events {
worker_connections 8192;
}
stream {
upstream rancher_servers_http {
least_conn;
server <ipnode1>:80 max_fails=3 fail_timeout=5s;
server <ipnode2>:80 max_fails=3 fail_timeout=5s;
server <ipnode3>:80 max_fails=3 fail_timeout=5s;
}
server {
listen 80;
proxy_pass rancher_servers_http;
}
upstream rancher_servers_https {
least_conn;
server <ipnode1>:443 max_fails=3 fail_timeout=5s;
server <ipnode2>:443 max_fails=3 fail_timeout=5s;
server <ipnode3>:443 max_fails=3 fail_timeout=5s;
}
server {
listen 443;
proxy_pass rancher_servers_https;
}
}
我的配置按预期工作,但我最近在我的集群上安装了Nextcloud。这给了我以下错误:
您的 Web 服务器未正确设置以解析“/.well-known/caldav”。更多信息可以在 文档。
您的 Web 服务器未正确设置以解析“/.well-known/carddav”。更多信息可以在 文档。
所以我想添加一个“位置”指令,但我做不到。 我尝试如下更新我的配置:
...
stream {
upstream rancher_servers_http {
...
}
server {
listen 80;
proxy_pass rancher_servers_http;
location /.well-known/carddav {
return 301 $scheme://$host:$server_port/remote.php/dav;
}
location /.well-known/caldav {
return 301 $scheme://$host:$server_port/remote.php/dav;
}
}
upstream rancher_servers_https {
...
}
server {
listen 443;
proxy_pass rancher_servers_https;
location /.well-known/carddav {
return 301 $scheme://$host:$server_port/remote.php/dav;
}
location /.well-known/caldav {
return 301 $scheme://$host:$server_port/remote.php/dav;
}
}
}
但它告诉我
/etc/nginx/nginx.conf:21 中不允许使用“location”指令
假设在流配置中不允许使用 location 指令,我尝试添加这样的 http 块:
...
stream {
...
}
http {
server {
listen 443;
location /.well-known/carddav {
return 301 $scheme://$host:$server_port/remote.php/dav;
}
location /.well-known/caldav {
return 301 $scheme://$host:$server_port/remote.php/dav;
}
}
server {
listen 80;
location /.well-known/carddav {
return 301 $scheme://$host:$server_port/remote.php/dav;
}
location /.well-known/caldav {
return 301 $scheme://$host:$server_port/remote.php/dav;
}
}
}
但后来我收到了这条消息:
bind() 到 0.0.0.0:443 失败(98:地址已在使用中)
(端口 80 相同)。
有人可以帮我解决这个问题吗?如何在不影响实际配置的情况下添加 location 指令?
感谢您的阅读。
编辑
看来stream 指令阻止我添加其他标准指令。我试图在server 中添加client_max_body_size,但我遇到了同样的问题:
此处不允许使用指令
【问题讨论】:
标签: nginx