Nginx перезапись URL работает только для / - PullRequest
0 голосов
/ 05 февраля 2020

Портирование моего angular приложения на nginx.

Моя конфигурация перезаписи URL работает только для местоположения /. Если я go до localhost:5000/login в браузере, я получаю ошибку 404.

Вот мои nginx .conf

http {
    include              /etc/nginx/mime.types;
    default_type         application/octet-stream;

    log_format           main '$remote_addr - $remote_user [$time_local] "$request" '
    '$status             $body_bytes_sent "$http_referer" '
    '"$http_user_agent"  "$http_x_forwarded_for"';

    access_log           /var/log/nginx/access.log main;

    sendfile             on;
    #tcp_nopush          on;

    keepalive_timeout    65;

    #gzip                on;

    include              /etc/nginx/conf.d/*.conf;

    server {
        listen              80;
        root                /usr/share/nginx/html;

        location / {
            root               /usr/share/nginx/html;
            index              index.html;

            try_files          $uri $uri/ /usr/share/nginx/html/index.html;
        }


    }
}

Логи

2020/02/05 06:44:29 [error] 6#6: *1 open() "/usr/share/nginx/html/login" failed (2: No such file or directory), client: 172.17.0.1, server: localhost, request: "GET /login HTTP/1.1", host: "localhost:5000"
172.17.0.1 - - [05/Feb/2020:06:44:29 +0000] "GET /login HTTP/1.1" 404 555 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36" "-"

Чего мне не хватает?

Ответы [ 3 ]

2 голосов
/ 05 февраля 2020

Вам необходимо установить try_files с приложением root файл.

try_files $uri $uri/ /usr/share/nginx/html/index.html;

Ссылка: https://angular.io/guide/deployment

0 голосов
/ 05 февраля 2020

Проблема заключалась в том, что файл конфигурации по умолчанию содержал следующую строку:

include /etc/nginx/conf.d/*.conf

Это соответствовало правилам, прежде чем он мог попасть в мой блок location. Удаление этой строки заставило ее работать.

0 голосов
/ 05 февраля 2020

Вы должны использовать регулярное выражение в блоке местоположения, если нет nginx, применять только это местоположение к точному совпадению.

location ~* /.* {
            root               /usr/share/nginx/html;
            index              index.html;

            try_files          $uri $uri/ /usr/share/nginx/html;
        }

Вы можете увидеть некоторые примеры и дополнительную информацию здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...