Nginx: обслуживать несколько приложений React на одном сервере - PullRequest
1 голос
/ 14 июня 2019

Я пытаюсь настроить несколько приложений React на одном сервере.Проблема в том, что после сборки проекта index.html из build/ найдено, а вспомогательных файлов из build/static нет.Первоначально, только с одним приложением, у меня было location static/ с псевдонимом.Однако с несколькими проектами и несколькими static/ каталогами я не могу этого сделать.По сути, я хочу, чтобы каждое приложение имело свою собственную статическую папку.Как мне решить мою проблему?

В браузере ошибка выглядит так:

GET http://my.servername/static/css/2.266e55a5.chunk.css net::ERR_ABORTED 404 (Not Found)

Моя текущая настройка выглядит так:

server {
    listen   80;
    server_name my.servername;
    root   /data/adpop/;


    location /possible-malware-domains-viewer/ {
            alias /data/adpop/possible-malware-domains-viewer/build/;
            try_files $uri /possible-malware-domains-viewer/index.html;

            add_header Access-Control-Allow-Origin *;
            autoindex on;

            # Simple requests
            if ($request_method ~* "(GET|POST)") {
                    add_header "Access-Control-Allow-Origin"  *;
            }

            # Preflighted requests
            if ($request_method = OPTIONS ) {
                    add_header "Access-Control-Allow-Origin"  *;
                    add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS, HEAD";
                    add_header "Access-Control-Allow-Headers" "Authorization, Origin, X-Requested-With, Content-Type, Accept";
                    return 200;
           }
    }

    location /punycode-domains-viewer/ {
            alias /data/adpop/punycode-domains-viewer/build/;
            try_files $uri /punycode-domains-viewer/index.html;

            [...same settings as above...]
           }
    }
}

Iпопытался объединить ответы из здесь , здесь или здесь , извините, если это выглядит грязно или у меня есть серьезные ошибки.Если то, чего я пытаюсь достичь, не совсем нормально, предложите что-нибудь еще.Спасибо!

1 Ответ

1 голос
/ 14 июня 2019

Не очень эффективно или масштабируемо использовать один и тот же префикс пространства имен URI для нескольких проектов и каталогов. Желательно, чтобы каждому проекту присваивался уникальный префикс URI, поэтому /project1/index.html находит свои ресурсы с помощью URI, например /project1/foo.css. Также можно использовать общий каталог сборки для файлов ресурсов и собрать их вместе в сценарии сборки.

Однако, если вы должны хранить файлы ресурсов в отдельных каталогах и использовать один и тот же префикс URI для ссылки на них, директива Nginx try_files может искать каталоги последовательно, пока не будет найдено подходящее имя файла.

Например:

root /data/adpop;

location /static/ {
    try_files
        /possible-malware-domains-viewer$uri
        /punycode-domains-viewer$uri
        =404;
}

URI /static/css/foo.css будет искать сначала в /data/adpop/possible-malware-domains-viewer/static/css/foo.css, а затем в /data/adpop/punycode-domains-viewer/static/css/foo.css. И если ни один файл не найден, возвращается статус 404.

Подробнее см. в этом документе .

...