react.js application showing 404 not found in nginx server

后端 未结 7 2235
广开言路
广开言路 2020-12-05 10:07

I uploaded react.js application to server. I\'m using nginx server. Application is working fine. But when I go to other page & refresh, site is not working. It\'s showin

相关标签:
7条回答
  • 2020-12-05 10:26

    try using following commands in sites-enabled

    sudo nano /etc/nginx/sites-available/Your_WEB_Folder
    
    try_files $uri $uri/ /index.html;
    

    Get me some towers now!

    0 讨论(0)
  • 2020-12-05 10:26

    After many hours I finally got this working with:

    try_files $uri /index.html$is_args$args =404;
    

    The last arg (=404) is what made this work.

    0 讨论(0)
  • 2020-12-05 10:35

    For me the solution was:

    location / {
                root /var/www/myapp/build;
                index index.html;
                try_files $uri /index.html$is_args$args =404;
        }
    
    0 讨论(0)
  • 2020-12-05 10:37

    When your react.js app loads, the routes are handled on the frontend by the react-router. Say for example you are at http://a.com. Then on the page you navigate to http://a.com/b. This route change is handled in the browser itself. Now when you refresh or open the url http://a.com/b in the a new tab, the request goes to your nginx where the particular route does not exist and hence you get 404.

    To avoid this, you need to load the root file(usually index.html) for all non matching routes so that nginx sends the file and the route is then handled by your react app on the browser. To do this you have to make the below change in your nginx.conf or sites-enabled appropiately

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

    This tells nginx to look for the specified $uri, if it cannot find one then it send index.html back to the browser.

    0 讨论(0)
  • 2020-12-05 10:40

    The problem comes when you are in a path for eg http:///some/path and you hit refresh you get a 404 error page. This extra line in the ngnix configuration could solve the issue.

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

    After adding do a nginx service restart.

    0 讨论(0)
  • 2020-12-05 10:41

    The answers given here are correct. But, I was struggling with this when trying to deploy my React Application in a docker container. The problem was on, how to change the nginx configs inside a docker container.

    Step 1: Prepare your Dockerfile

    # Stage 1
    FROM node:8 as react-build
    WORKDIR /app
    COPY . ./
    RUN yarn
    RUN yarn build
    
    # Stage 2 - the production environment
    FROM nginx:alpine
    COPY nginx.conf /etc/nginx/conf.d/default.conf
    COPY --from=react-build /app/build /usr/share/nginx/html
    EXPOSE 80
    CMD ["nginx", "-g", "daemon off;"]
    

    See line with command: COPY nginx.conf /etc/nginx/conf.d/default.conf. Here, we are telling Docker to copy the nginx.conf file from the docker host, to the docker container.

    Step 2: Have a nginx.conf file in your application root folder

    server {
        listen       80;
        server_name  localhost;
    
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
            try_files $uri /index.html;                 
        }
    
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
    

    Step 3: Now build the docker image and run it

    $ docker build . -t react-docker
    

    This should build your docker image successfully. To check that, run

    $ docker images
    

    Now run

    $ docker run -p 8000:80 react-docker 
    

    and navigate to http://localhost:8000

    This was inspired by this blog.

    0 讨论(0)
提交回复
热议问题