Я не буду отображать весь файл. В этом файле работает все, кроме обработки местоположения / client, которое я установил ниже:
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
location /client {
alias /var/www/client/dist;
try_files $uri $uri/ /var/www/client/dist/index.html =404;
}
Я обслуживаю приложение php из /var/www/server
каталог. Он исправно работает в это время.
Из /var/www/client
каталог, я сделал приложение Angular2. Команда ng build --prod --base-href=/client/
создает приложение и сохраняет его в папке /var/www/client/dist/
, индексный файл которого расположен по адресу /var/www/client/dist/index.html
.
Запрос файла, который существует по адресу /var/www/client/dist/real_file_path.ext
должен быть сделан http://host/client/real_file_path.ext
, и запрос несуществующего файла, например http://host/client/non-existant/directory
следует направить в /var/www/client/dist/index.html
где приложение анализирует URL-адрес для маршрутизации представления и контроллера.
Журнал показывает, что псевдоним успешно перенаправляет запросы от /client
к /client/dist
, но он служит 404
вместо того, чтобы служить /var/www/client/dist/index.html
.
Что вызывает сбой?
Я явно чего-то не понимаю в псевдониме или try_files.
Я пробовал использовать:
try_files $uri $uri/ /client/dist/index.html =404;
Это тоже не помогло.
После каждого изменения я бегу sudo nginx -s reload
. После каждого изменения проверяю работоспособность приложения php.
Спасибо @Tim и @Alexey Ten.
Когда я увидел комментарий Алексея Тена к основному посту, я был уверен, что это ответ, поэтому поменял его на try_files $uri $uri/ /client/index.html =404;
, но это не устранило проблему.
У меня была проблема с пустыми журналами доступа, которые я упустил раньше, поскольку в моих журналах ошибок было много, но, пытаясь собрать больше информации для обновления вопроса, как было предложено Тимом, я узнал, что ранее я изменил местоположение и формат моих журналов доступа.
log_format extlog '$request_time - $status - local time: $time_local; root: $document_root; uri: $document_uri; host: $host; hostname: $hostname; realpath root: $realpath_root; client address: $remote_addr; client port: $remote_port; request filename: $request_filename; method: $request_method; request_uri: $request_uri; scheme: $scheme; server_name: $server_name; server_port: $server_port; server_protocol: $server_protocol; response status: $status; uri: $uri';
access_log /var/log/nginx/long_log.log extlog;
Этот формат журнала представляет собой дамп данных доступных переменных.
Когда я попытался скопировать журналы, я заметил следующее:
0.000 - 200 - local time: 08/Jun/2018:09:19:08 -0700; root: /var/www; uri: /server/Core/js/autocomplete.js; host: sandbox.pediatricheartcenter.org; hostname: sandbox; realpath root: /var/www; client address: 192.168.76.37; client port: 54947; request filename: /var/www/server/Core/js/autocomplete.js; method: GET; request_uri: /server/Core/js/autocomplete.js; scheme: http; server_name: sandbox.pediatricheartcenter.org; server_port: 80; server_protocol: HTTP/1.1; response status: 200; uri: /server/Core/js/autocomplete.js
0.000 - 404 - local time: 08/Jun/2018:09:17:29 -0700; root: /var/www/client/dist; uri: /client/visit/5990653da56b4075bff360efcc52383f20171208090130; host: sandbox.pediatricheartcenter.org; hostname: sandbox; realpath root: /var/www/client/dist; client address: 192.168.76.37; client port: 54706; request filename: /var/www/client/dist/visit/5990653da56b4075bff360efcc52383f20171208090130; method: GET; request_uri: /client/visit/5990653da56b4075bff360efcc52383f20171208090130; scheme: http; server_name: sandbox.pediatricheartcenter.org; server_port: 80; server_protocol: HTTP/1.1; response status: 404; uri: /client/visit/5990653da56b4075bff360efcc52383f20171208090130
В частности, корень для двух запросов разный. Это означает, что alias
изменяет корень для запросов в / client, так что моя ссылка должна относиться к этому новому корню.
Я изменил try_files на ссылку /index.html
, и теперь это работает!
Мой последний блок местоположения отображается ниже:
location /client {
alias /var/www/client/dist;
try_files $uri $uri/ /index.html =404;
}