Estou fazendo a transição do meu app react de webpack-dev-server para nginx.
Quando vou para o url raiz "localhost: 8080 / login", simplesmente obtenho um 404 e, no log do nginx, vejo que ele está tentando obter:
my-nginx-container | 2017/05/12 21:07:01 [error] 6#6: *11 open() "/wwwroot/login" failed (2: No such file or directory), client: 172.20.0.1, server: , request: "GET /login HTTP/1.1", host: "localhost:8080"
my-nginx-container | 172.20.0.1 - - [12/May/2017:21:07:01 +0000] "GET /login HTTP/1.1" 404 169 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0" "-"
Onde devo procurar uma solução?
O bit do meu roteador em reação fica assim:
render(
<Provider store={store}>
<MuiThemeProvider>
<BrowserRouter history={history}>
<div>
Hello there p
<Route path="/login" component={Login} />
<App>
<Route path="/albums" component={Albums}/>
<Photos>
<Route path="/photos" component={SearchPhotos}/>
</Photos>
<div></div>
<Catalogs>
<Route path="/catalogs/list" component={CatalogList}/>
<Route path="/catalogs/new" component={NewCatalog}/>
<Route path="/catalogs/:id/photos/" component={CatalogPhotos}/>
<Route path="/catalogs/:id/photos/:photoId/card" component={PhotoCard}/>
</Catalogs>
</App>
</div>
</BrowserRouter>
</MuiThemeProvider>
</Provider>, app);
E meu arquivo nginx assim:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
server {
listen 8080;
root /wwwroot;
location / {
root /wwwroot;
index index.html;
try_files $uri $uri/ /wwwroot/index.html;
}
}
}
EDITAR:
Eu sei que a maior parte da configuração funciona porque quando vou para localhost: 8080 sem estar logado, também obtenho a página de login. isso não é através de um redirecionamento para localhost: 8080 / login - é algum código de reação.
nginx
react-router
Martin
fonte
fonte
try_files
devem ser URIs e não nomes de caminho. Experimente:try_files $uri $uri/ /index.html;
Respostas:
O bloco de localização na configuração do nginx deve ser:
O problema é que as solicitações para o arquivo index.html funcionam, mas você não está dizendo ao nginx para encaminhar outras solicitações para o arquivo index.html também.
fonte
Aqui estão minhas soluções
tentativa simples:
não tente mais por tipos não-html:
não tente mais tipos e diretórios não-html (tornando-os
try_files
compatíveis comindex
e / ouautoindex
):fonte
Talvez este não seja o caso exato aqui, mas para qualquer pessoa que esteja executando um
docker
contêiner para seureact
projeto comreact-router
ewebpack-dev-server
, no meu caso, eu tinha tudo o que precisava em meunginx.conf
:Mesmo assim, o nginx não enviaria erros 404 para a raiz
/
. Depois de examinar o contêiner, percebi que há alguns configs/etc/nginx/conf.d/default.conf
que, de alguma forma, sobrescrevem meus configs, portanto, excluir esse arquivo no meudockerfile
resolveu o problema:fonte
Aqui está a solução que funciona para mim no servidor ao vivo:
Acabei de seguir este tutorial e com a configuração básica do Nginx simplesmente configurei o bloco de localização.
fonte
Para mim, nada funcionou até eu adicionar uma diretiva root. Isso funcionou para mim também usando um proxy reverso para acessar um endpoint / api / webserver.
fonte
Eu estava lidando com o mesmo problema e pensei que era um erro de conf, mas não. Eu estava copiando o arquivo conf para a
/etc/nginx/conf.d/
pasta. Isso funciona no dev, mas na versão build causa esse problema. Quando a rota falha, o nginx não retorna ao índice.Basta copiar o arquivo conf para a pasta certa:
/etc/nginx/conf.d/default.conf
Exemplo de instrução Dockerfile:
COPY .docker/prod/nginx.conf /etc/nginx/conf.d/default.conf
Espero que ajude.
fonte
fonte