with react deploy nginx react-router

deploy - react js with nginx



React-router y nginx (2)

Estoy haciendo la transición de mi aplicación de reacción de webpack-dev-server a nginx.

Cuando voy a la URL raíz "localhost: 8080 / login" simplemente obtengo un 404 y en mi registro nginx veo que está tratando de obtener:

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" "-"

¿Dónde debo buscar una solución?

Mi enrutador mordido en reaccionar se ve así:

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

Y mi archivo nginx como este:

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:

Sé que la mayoría de la configuración funciona porque cuando voy a localhost: 8080 sin haber iniciado sesión, también obtengo la página de inicio de sesión. Esto no es a través de una redirección a localhost: 8080 / login: es un código de reacción.


Aquí están mis soluciones.

simple intento:

location / { root /var/www/mysite; try_files $uri /index.html; }

no más intentos para tipos no html:

location / { root /var/www/mysite; set $fallback_file /index.html; if ($http_accept !~ text/html) { set $fallback_file /null; } try_files $uri $fallback_file; }

no más intentos por tipos y directorios que no sean html (haciendo que try_files compatible con index y / o autoindex ):

location / { root /var/www/mysite; index index.html; autoindex on; set $fallback_file /index.html; if ($http_accept !~ text/html) { set $fallback_file /null; } if ($uri ~ /$) { set $fallback_file /null; } try_files $uri $fallback_file; }


El bloque de ubicación en su configuración nginx debe ser:

location / { try_files $uri /index.html; }

El problema es que las solicitudes al archivo index.html funcionan, pero actualmente no le está diciendo a nginx que reenvíe otras solicitudes al archivo index.html también.