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 № 1Com 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;