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

Блоки локации Nginx для трех разных проектов

У меня проблемы с настройкой блоков местоположения в Nginx. У меня есть три проекта / каталога на моем сервере, которые я хочу обслуживать в одном домене. Два реагирующих и один сервер nodeJS.

Я хочу добиться:

  1. Если вы идете в корень домена, я хочу обслуживать одно из приложений React. Так что это просто статические файлы, поскольку проект построен. (Это нормально работает)
  2. Если собираетесь /check Я хочу, чтобы это было передано в приложение nodeJS (оно тоже работает нормально)
  3. А вот и сложная часть. Я хочу все остальное, чего нет /check или корневой домен, чтобы загрузить другое приложение React. (Это не работает)

Вот что у меня сейчас есть:

server {

        root /var/www/landing/public;
        index index.html index.htm index.nginx-debian.html;

        server_name domain.com www.domain.com;

        location / {
            try_files $uri $uri/ =404;
        }

        location /(?<something>.*)/ {
           alias /var/www/react-frontend/build/;
           index index.html index.htm;
        }

        location /check/ {
           proxy_pass http://localhost:3001/;
        }
}

Надеюсь, я смог все четко объяснить. Спасибо.

Вот пример конфигурации.

server {
listen 127.0.0.1:8088;
location / {
content_by_lua_block {
    ngx.say("root")
    ngx.exit(ngx.HTTP_OK)

}
}
location ~* "^\/check(.*)$" {
content_by_lua_block {
    ngx.say("check")
    ngx.exit(ngx.HTTP_OK)

}
}
location ~* "^\/(.*)\/+(.*)$" {
content_by_lua_block {
    ngx.say("all other")
    ngx.exit(ngx.HTTP_OK)

}
}
}

А вот и тесты:

# curl 127.0.0.1:8088
root
# curl 127.0.0.1:8088/
root
# curl 127.0.0.1:8088/ll
root
# curl 127.0.0.1:8088/ll/
all other
# curl 127.0.0.1:8088/check
check
# curl 127.0.0.1:8088/check/
check

Я считаю, что вы можете сделать что-то вроде этого:

location = / {
 index block
}

location = /check/ {
 check block }

location ~* ".*" {
 all others block
}

поскольку точное совпадение имеет приоритет над совпадением регулярного выражения. Это работает для вас?