Конфигурация режима HTML NGINX + Vue, дающая 404 - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть приложение Vue, работающее внутри контейнера nginx:alpine с пользовательской конфигурацией nginx для работы с браузером (режим html Vue Router).

Проблема в том, что любой путь, кроме корня (/), дает 404 с сообщениями об ошибках, такими как:

2018/11/25 07:56:13 [error] 7#7: *2 open() "/usr/share/nginx/html/home" failed (2: No such file or directory), client: 172.17.0.1, server: localhost, request: "GET /home HTTP/1.1", host: "localhost:4000"

Я использую пользовательский файл конфигурации nginx, который выглядит следующим образом:

worker_processes  1;

events {
    worker_connections  1024;
}

http {

    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {

        listen       80;
        server_name  localhost;

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

        location / {

            try_files $uri $uri/ /index.html;

            if ($request_method = 'OPTIONS') {
                add_header 'Access-Control-Allow-Origin' '*';
                add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
                add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
                add_header 'Access-Control-Max-Age' 1728000;
                add_header 'Content-Type' 'text/plain; charset=utf-8';
                add_header 'Content-Length' 0;
                return 204;
            }

            if ($request_method = 'POST') {
                add_header 'Access-Control-Allow-Origin' '*';
                add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
                add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
                add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
            }

            if ($request_method = 'GET') {
                add_header 'Access-Control-Allow-Origin' '*';
                add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
                add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
                add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
            }

        }

        location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
            # Some basic cache-control for static files to be sent to the browser
            expires max;
            add_header Pragma public;
            add_header Cache-Control "public, must-revalidate, proxy-revalidate";
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

}

что-то не так с моим nginx.conf?

1 Ответ

0 голосов
/ 25 ноября 2018

Существуют проблемы, связанные с использованием if внутри блока location .

. Оператор try_files не выполняется, если для обработки запроса выбран блок if ($request_method = 'GET')..

Вы можете устранить проблему, заменив оператор try_files другим оператором if.

Например:

location / {
    if (!-e $request_filename) { rewrite ^ /index.html last; }
    if ($request_method = 'OPTIONS') { ... }
    if ($request_method = 'POST') { ... }
    if ($request_method = 'GET') { ... }
}
...