/ / Jenkins Com Nginx Reverse Proxy E Resolvedor - nginx, jenkins, docker, proxy

Jenkins Com Nginx Reverse Proxy E Resolvedor - nginx, jenkins, docker, proxy

Eu estou executando Jenkins dentro do Docker atrás de um proxy reverso Nginx. Agora eu tenho um problema com o resolvedor.

Quando eu ativo o resolvedor com:

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

Receberei o seguinte erro para todos os arquivos 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.

Quando eu simplesmente passar proxy sem resolver:

proxy_pass http://jenkins:8080/;

Funciona mas sem resolver. O resolvedor é obrigatório caso contrário a configuração não funcionará quando o host jenkins muda o Ip (Docker DNS Server).

Minha configuração:

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;
}
}

Respostas:

1 para resposta № 1

Com base na mensagem de erro que você recebe, parece que você está recebendo páginas HTML no lugar do JavaScript.

Usando um proxy_pass paradigma com uma variável, você está dizendo nginx que não deve mexer com o valor mais, por exemplo, independentemente da location e o URI, todas as solicitações para seu back-end sempre serão exatamente como a variável diz (por exemplo, com o mesmo URI no seu caso).


o melhor opção provavelmente seria usar $uri, $is_args e $args, conforme NGINX proxy_pass remove o prefixo do caminho e resolve o DNS:

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

Outra opção, que potencialmente poderia ser menos seguro, é usar $uri_request, que tem um significado ligeiramente diferente da planície $uri em certos casos limitados, conforme Subdiretório Nginx pass_proxy sem decodificação de URL:

proxy_pass http://jenkins:8080$request_uri;