Em vez de fazer proxy reverso no endereço "ip" (proxy_pass link ), tente proxy_pass link .
Em seguida, adicione YourHostNameBehindReverseProxy a / etc / hosts e associe-o a 127.0.0.1.
Estou tentando configurar um proxy reverso usando proxy_pass no NGINX. A página carrega muito bem, mas todas as assistências estáticas (js, css, imgs) que usam URLs relativos são interrompidas porque prefixam o nome do host do servidor pai. Existe uma maneira de usar um proxy reverso enquanto mantém o nome do host do proxy para todos os recursos estáticos?
parent.conf
server {
listen 80;
server_name parent.mydomain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name parent.mydomain.com;
root /var/www/parent;
index index.html;
try_files $uri.html $uri $uri/ =404;
# error and access out
error_log /var/log/error.log;
access_log /var/log/access.log;
ssl on;
ssl_certificate /etc/ssl/myssl.pem;
ssl_certificate_key /etc/ssl/myssl-key.pem;
# Here is the important part. Any url matching
# this pattern needs to proxy_pass to child.
location ~ "^/[a-z0-9]{24}$" {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass https://child.mydomain.com;
proxy_redirect off;
}
}
child.conf
server {
listen 80;
server_name child.mydomain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443;
server_name child.mydomain.com;
root /var/www/child;
ssl on;
ssl_certificate /etc/ssl/myssl.pem;
ssl_certificate_key /etc/ssl/myssl-key.pem;
error_log /var/log/child.log;
access_log /var/log/child.log;
# this is a single page app so all request
# should be routed through index.html.
location / {
try_files $uri /index.html;
}
}
Agora, se eu atingir https://parent.mydomain.com/54570f77968d6e492b0d68af
, a página de índice de child.mydomain.com
será carregada, mas nenhum dos meus arquivos estáticos fará isso, pois eles estão tentando carregar em https://parent.mydomain.com
em vez de onde estão localizados https://child.mydomain.com/js/main.js
.
@cnst I don't want parent to load anything from child except the index page. I need the host for all the static resources to remain child.mydomain.com – jwerre 7 mins ago
Sua pergunta parece ser offtopic para serverfault, então.
A melhor maneira de realizar o que você deseja seria usar o <base href='https://child.mydomain.com/'/>
para garantir que o navegador sempre carregue todos os recursos de child.mydomain.com
:
<html>
<head>
<base href='https://child.mydomain.com/'/>
Alternativamente, se você não tem mais nada que você queira servir dentro do próprio pai, então você pode simplesmente fazer um 301 Moved
redireciona de todas as páginas 404 para o filho.
error_page 404 =301 http://child.mydomain.com$request_uri;
Ou, melhor ainda, remova seu try_files
do pai e, em vez disso, redirecione todas as solicitações que não correspondam a um local mais específico para o filho:
location / {
return 301 http://child.mydomain.com$request_uri;
}
Tags nginx reverse-proxy