我们在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) 我正在使用端口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.
我使用具有以下配置的 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 启动时该路由会被替换吗?那会是哪里呢?或者我可以修复解析器吗?