Я новичок в 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;
}
}