繁体   English   中英

Jenkins与Nginx反向代理和解析器

[英]Jenkins With Nginx Reverse Proxy And Resolver

我在Docker里面运行Jenkins,后面是一个Nginx反向代理。 现在我遇到了旋转变压器的问题。

当我用以下方法激活解析器时:

set $backend "http://jenkins:8080/";
proxy_pass $backend;

我将收到所有JavaScript文件的以下错误:

Refused to execute script from 'http://localhost/static/....js' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled.

当我只是代理传递没有解析器:

proxy_pass http://jenkins:8080/;

它工作但没有解析。 解析器是强制性的,否则当主机jenkins更改它的Ip(Docker DNS服务器)时,安装程​​序将不起作用。

我的配置:

resolver 127.0.0.11  ipv6=off valid=30s;
client_max_body_size  100m;
keepalive_timeout     65;
types_hash_max_size   2048;

server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  _;
    location / {
        set $backend "http://jenkins:8080/";
        proxy_pass $backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

根据您收到的错误消息,听起来您正在使用HTML页面代替JavaScript。

使用带变量的proxy_pass范例,你告诉nginx它不应该进一步混淆值,例如,无论location和URI如何,对后端的所有请求将始终与变量所说的一样(例如, ,在你的情况下具有相同的URI)。


最好的选择可能是使用$uri$is_args$args ,根据NGINX proxy_pass删除路径前缀并解析DNS

-        set $backend "http://jenkins:8080/";
-        proxy_pass $backend;
+        proxy_pass http://jenkins:8080$uri$is_args$args;

另一个可能不太安全的选项是使用$uri_request ,它在某些有限的情况下与普通的$uri略有不同,根据Nginx pass_proxy子目录而没有url解码

proxy_pass http://jenkins:8080$request_uri;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM