相关疑难解决方法(0)

如果找不到上游主机,则设置nginx不会崩溃

我们在Docker的常见域下有几个rails应用程序,我们使用nginx将请求定向到特定应用程序.

our_dev_server.com/foo # proxies to foo app
our_dev_server.com/bar # proxies to bar
Run Code Online (Sandbox Code Playgroud)

Config看起来像这样:

upstream foo {
  server foo:3000;
}

upstream bar {
  server bar:3000;
}

# and about 10 more...

server {
  listen *:80 default_server;

  server_name our_dev_server.com;

  location /foo {
      # this is specific to asset management in rails dev
      rewrite ^/foo/assets(/.*)$ /assets/$1 break;
      rewrite ^/foo(/.*)$ /foo/$1 break;
      proxy_pass http://foo;
  }

  location /bar {
      rewrite ^/bar/assets(/.*)$ /assets/$1 break;
      rewrite ^/bar(/.*)$ /bar/$1 break;
      proxy_pass http://bar;
  }

  # and about 10 more... …
Run Code Online (Sandbox Code Playgroud)

nginx url-rewriting proxypass

94
推荐指数
4
解决办法
4万
查看次数

SELinux启用时,proxy_pass无法正常工作,为什么?

我正在使用端口8080上的端口8081和Nginx监听应用程序.代理传递语句如下所示:

$ cat /var/etc/opt/lj/output/services/abc.servicemanager.conf

location /api/abc.servicemanager/1.0 { proxy_pass     http://localhost:8081;}
Run Code Online (Sandbox Code Playgroud)

nginx.conf,我将此文件包含为:

include /etc/nginx/conf.d/services/*.conf;
Run Code Online (Sandbox Code Playgroud)

/etc/nginx/conf.d/service是一个符号链接:

# ll /etc/nginx/conf.d/

lrwxrwxrwx. 1 root root   39 Dec 10 00:19 services -> ../../../var/etc/opt/lj/output/services
Run Code Online (Sandbox Code Playgroud)

这是一个CentOS 7.0 SELinux Enabled系统.如果我setenforce 0,并使它Permissive,我没有看到任何问题.所以文件在正确的位置,路径没有问题.如果SELinux正在执行,我在审计日志中看到以下内容:

type=AVC msg=audit(1418348761.372:100930): avc:  denied  { getattr } for  pid=3936 comm="nginx" path="/var/etc/opt/lj/output/services/abc.servicemanager.conf" dev="xvda1" ino=11063393 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=file
Run Code Online (Sandbox Code Playgroud)

我想知道如何启用Nginx来查找conf文件而无需禁用SELinux.

reverse-proxy nginx selinux

16
推荐指数
4
解决办法
2万
查看次数

Dockercompose、Nginx、解析器不工作

我使用具有以下配置的 nginx 容器:

set $ui http://ui:9000/backend;
resolver 127.0.0.11 valid=5m;
proxy_pass $ui;
Run Code Online (Sandbox Code Playgroud)

这是必需的,因为 nginx 启动时“ui”容器不一定会启动。这可以避免“在上游找不到主机...”错误。

但现在,即使 ui-container 已启动并运行(它们都位于 docker-compose.yml 中定义的同一网络中),我也会收到 404 错误。当我在没有变量、没有解析器的情况下代理传递并首先启动 ui 容器时,一切正常。

现在我正在寻找为什么 docker 无法解决它。我可以手动添加一条到http://ui的假路由,当 ui-container 启动时该路由会被替换吗?那会是哪里呢?或者我可以修复解析器吗?

nginx docker docker-compose nginx-reverse-proxy

5
推荐指数
1
解决办法
9418
查看次数