nginx index.html для всех URL-адресов

я хотел бы сделать вот так

localhost/ | index.html
localhost/category | index.html
localhost/notes | index.html
localhost/notes/note1 | index.html

И я пытался это сделать, но бесконечность ошибок остановила меня. Когда я пытаюсь использовать localhost, я вижу это.

Перезапись или внутренний цикл перенаправления при обработке "/index.html" — эта ошибка 500.

server {
        listen       80;
        server_name  localhost;

        root C:/Users/Sergey/Desktop/xxx/angular2do;

        location / {
            if ($request_method = POST) {
                proxy_pass http://localhost:3000;
            } 

            if ($request_method = GET) {
                rewrite ^.*$ /index.html last;
            }

        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        # error_page   500 502 503 504  /50x.html;
        # location = /50x.html {
        #    root   html;
        # }

    }

Я знаю, что у стека есть много вопросов по этой проблеме, но раньше я был всеми из них и всегда ловил ошибку.


person Lestoroer    schedule 28.01.2017    source источник
comment
У меня есть один файл - index.html и внутри него много зависимостей. Клиентский код на angular 2. Раньше у меня был перерыв, а потом тоже ошибка... на стороне angular 2. Nginx не дает все файлы, которые нужны. Я не знаю, как это сделать, есть ли у вас какие-либо предложения?   -  person Lestoroer    schedule 28.01.2017


Ответы (1)


Использование rewrite ... last внутри блока location приведет к циклической перезаписи /index.html в /index.html. Вместо этого вы должны использовать rewrite ... break. Дополнительные сведения см. в этом документе.

Если вашему приложению также требуются ресурсы (css, js, изображения), вы можете использовать альтернативный подход, который возвращает статический файл, если он существует, например:

server {
    listen       80;
    root C:/Users/Sergey/Desktop/xxx/angular2do;

    location / {
        try_files $uri @other;
    }
    location @other {
        if ($request_method != POST) { rewrite ^ /index.html last; }
        proxy_pass http://localhost:3000;
    }
}
person Richard Smith    schedule 28.01.2017
comment
Я получаю ошибку nginx: [emerg] named location "@other" can be on the server level only in C:\nginx-1.11.9/conf/nginx.conf:61. С обрывом - nginx работает - но одна проблема, он не дает все файлы зависимости внутри index.html. - person Lestoroer; 28.01.2017
comment
В Angular 2 много файлов, и они распределены по многим папкам. спасибо за помощь - person Lestoroer; 28.01.2017
comment
Мой ответ должен заменить ваш существующий блок location /, чтобы оба блока в моем ответе находились на уровне сервера - см. обновленный ответ. - person Richard Smith; 28.01.2017
comment
О, да, но ошибка на боковом угловом все еще существует. Если я использую этот код location / { root C:\Users\Sergey\Desktop\xxx\angular2do } Все работает, но nginx запрашивает только мою страницу / - на другой странице (например, localhost/category) - нет. Я не понимаю, почему в вашем предложении angular показал в консоли, что некоторые файлы не могут получить зависимость. - person Lestoroer; 28.01.2017
comment
Вроде все работает. Убрал кэш и все работает. Большое спасибо. - person Lestoroer; 28.01.2017