Назад | Перейти на главную страницу

NginX не может перенаправить в приложение React

Я новичок в NginX, поэтому мои извинения, если я о чем-то спрашиваю, звучит наивно. Допустим, у меня есть DNS www.example.com.

Всякий раз, когда приходит запрос www.example.com/ (только /), Я хочу, чтобы NginX перенаправил его на www.example.com/home, который, в свою очередь, перенаправляет запрос в приложение React, работающее на порту 5000. Когда запрос приходит на www.example.come/{anything}, Я хочу, чтобы мое приложение Springboot, работающее на 3001, справилось с этим.

Итак, у меня следующая конфигурация

example.conf

server {

        server_name example.com www.example.com;

        listen 443 ssl; # managed by Certbot

        location = / {
                return 301 https://$host/home;
        }

        location / {

                proxy_pass http://localhost:3001;
                proxy_set_header X-Real-IP $remote_addr;
        }

        location = /home {
                proxy_pass http://localhost:5000;
        }
}

И у меня есть следующие реагировать-app.conf

server {

        listen 5000;
        server_name localhost;

        root /home/ubuntu/example/frontend/build;
        index index.html;

        location / {
        }
}

Этот путь /home/ubuntu/example/frontend/build здесь находится папка сборки моего приложения.

Теперь, когда я пытаюсь получить доступ www.example.com/xxx или www.example.com/xyz, вызывается мое приложение Springboot, но всякий раз, когда я пытаюсь www.example.com, он сначала перенаправляется на www.example.com/home а затем показывает общий 404 Страница ошибки NginX.

Я проверил журналы ошибок. Он печатает следующее:

2020/02/11 19:21:31 [error] 12936#12936: *15 open() "/home/ubuntu/example/frontend/build/home" failed (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "GET /home HTTP/1.0", host: "localhost:5000"

Я не понимаю, почему он пытается открыться /home/ubuntu/example/frontend/build/home. Где этот след /домой откуда и как об этом позаботиться?

Я проверил этот и этот, но они не сильно помогли

Редактировать 1

Я внес изменения, предложенные в разделе комментариев, и мои example.conf теперь выглядит так:

server {

            server_name example.com www.example.com;

            listen 443 ssl; # managed by Certbot

            location = / {
                    return 301 https://$host/home;
            }

            location / {

                    proxy_pass http://localhost:3001;
                    proxy_set_header X-Real-IP $remote_addr;
            }

            location = /home {
                    proxy_pass http://localhost:5000/;
            }
    }

Однако теперь я не получаю никаких ошибок в журналах ошибок NginX, но вижу, как вызывается мое приложение Springboot. Что происходит, example.com собирается example.com/home, который затем будет http://localhost:3001 где сейчас работает мое приложение Springboot.

Но этого не должно происходить с тех пор, как /home, его следовало перенести на сервер NginX, работающий на порту 5000. Есть ли какие-то изменения, которые мне нужно внести в свой реагировать-app.conf файл?

Ваш URL-адрес ищет / home -> Это файл. Но вы хотите отправлять все запросы на index.html.

Использовать try_files:

location / { try_files index.html =404; }

http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files

https://stackoverflow.com/questions/7027636/nginx-send-all-requests-to-a-single-html-page

server {

        listen 5000;
        server_name localhost;

        root /home/ubuntu/example/frontend/build;
        index index.html;

        location / {
           try_files index.html =404;
        }
}