1

Я пытаюсь настроить домашний веб-сервер.

Моя структура папок следующая:

/home/pi/www/
├── homeGUI
│   ├── backend /* Contains an express server listening on 8080 */
│   ├── frontend /* Contains an Angular application */
│   │   ├── index.html
│   │   └── /* Other .js files */
│   └── scripts
└── index.html

в то время как моя конфигурация сайта такая:

server{
    listen 80;
    listen [::]:80;

    root /home/pi/www;

    index index.html index.htm;

    server_name _;

    #intended to serve the angular application
    location /homeGUI/ {
        alias /home/pi/www/homeGUI/frontend/;
        try_files $uri $uri/ /homeGUI/frontend/index.html; #this one is causing problems
    }

    #intended to serve the files in the www folder
    location / {
        try_files $uri $uri/ index.html;
    }

    #intended to serve the express server
    location /homeGUI/api/ {
        proxy_pass  http://127.0.0.1:8080
    }
}

Приведенная выше конфигурация может обслуживать все 3 содержимого (статический index.html, угловое приложение и экспресс-сервер).

Проблема, с которой я столкнулся, заключается в том, что когда я перехожу к маршруту углового приложения напрямую (или обновляя страницу, находясь на этом маршруте) (es: localhost/homeGUI/route1), это вызывает цикл перенаправления, поскольку он пытается перенаправить на /homeGUI /frontend /index.html, который затем попадает в то же правило местоположения и цикл.

Все, что я хочу сделать, это перенаправить каждый запрос, например /homeGUI/* в файл /home/pi/www/homeGUI/frontend/index.html за исключением /homeGUI/api который должен отправляться на экспресс-сервер через порт 8080.

Любая помощь приветствуется. Благодарю.

1 ответ1

1

Последний элемент вашего оператора try_files должен быть URI.

URI для файла в /home/pi/www/homeGUI/frontend/index.html - это /homeGUI/index.html а не /homeGUI/frontend/index.html .

Смотрите этот документ для деталей.

Например:

location /homeGUI/ {
    alias /home/pi/www/homeGUI/frontend/;
    try_files $uri $uri/ /homeGUI/index.html;
}

Вышеприведенное может работать, но использование alias и try_files в одном блоке может вызвать проблемы из-за этой проблемы.

Вы можете заменить свой оператор try_files поведением по умолчанию и блоком if .

Например:

location /homeGUI/ {
    alias /home/pi/www/homeGUI/frontend/;
    if (!-e $request_filename) { rewrite ^ /homeGUI/index.html last; }
}

Смотрите это предостережение по использованию if .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .