Aqui está o meu problema: estou tentando fazer um proxy_pass em "/" (localizado em test.co) para um domínio separado - webflow.test.co - enquanto todos os outros pedidos "/(.+)" vão para meu servidor nodejs. Infelizmente, com minha configuração atual, recebo um erro "Cannot GET /index.html". Isso é estranho para mim, especialmente porque ir diretamente para o webflow.test.co funciona bem.
Aqui está o meu código - qualquer ajuda é muito, muito apreciada. Foi preso por algum tempo, e eu sou novo no nginx:
upstream nodejs {
server 127.0.0.1:8081;
keepalive 256;
}
# Redirect all non-HTTPS to non-WWW HTTPS
server {
listen 8080;
server_name "~^(?:www\.)?(.*)$";
return 301 https://$host$request_uri;
}
# Redirect WWW HTTP to non-WWW HTTP
server {
listen 4430;
server_name "~^www\.(.*)$";
return 301 https://$1$request_uri;
}
server {
listen 443 ssl;
server_name webflow.test.co;
location / {
proxy_pass http://webflow.test.co;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
# Reverse-proxy to http://nodejs
server {
listen 4430;
server_name "~^(?!www\.).*$";
client_max_body_size 50M;
location ~ /(.+) {
proxy_pass http://nodejs;
proxy_set_header Connection "";
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
EDIT solicitado pelo @Tero ilkanen: Os dois blocos de redirecionamento no topo (não-HTTPS e não-WWW) são herdados, mas suponho que eu queira que eles fiquem. O que eu estou adicionando é a funcionalidade para o seguinte: Eu preciso ser capaz de ir para a página inicial (neste caso, test.co) e tê-lo proxy para webflow.test.co, mantendo o host intacto. Todos os outros pedidos precisam ser enviados para o servidor Nodejs - ou seja, test.co/api, test.co/media, test.co/login e alguns outros. Isso é apenas uma execução de teste - depois que eu resolver esse problema, adicionarei suporte a URLs específicos. Mas por enquanto, homepage > webflow.test.co, tudo o mais para o servidor nodejs. Desde então, adicionei os dois blocos de localização de volta ao bloco de servidores Nodejs único, mas agora estou obtendo um loop de redirecionamento infinito. Vou editar e colocar o código atualizado abaixo.
upstream nodejs {
server 127.0.0.1:8081;
keepalive 256;
}
# Redirect all non-HTTPS to non-WWW HTTPS
server {
listen 8080;
server_name "~^(?:www\.)?(.*)$";
return 301 https://$host$request_uri;
}
# Redirect WWW HTTP to non-WWW HTTP
server {
listen 4430;
server_name "~^www\.(.*)$";
return 301 https://$1$request_uri;
}
# Reverse-proxy to http://nodejs
server {
listen 4430;
server_name "~^(?!www\.).*$";
client_max_body_size 50M;
location / {
proxy_pass http://webflow.test.co;
proxy_set_header Connection "";
proxy_http_version 1.1;
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;
}
location ~ /(.+) {
proxy_pass http://nodejs;
proxy_set_header Connection "";
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}