Это второй день моего участия в Gengwen Challenge.Подробности мероприятия смотрите:Обновить вызов
В этой статье рассказывается, как использовать в соответствии с инженерной практикой
Nginx
Настройте одностраничное приложение.
1. Проблемы
только начал вnginx.conf
Конфигурация статического сопоставления ресурсов выглядит следующим образом:
root /usr/share/nginx/html/appname/;
index index.html index.htm;
Вышеупомянутая конфигурация может быть доступна в обычном режимеindex.html
, вы можете последовательно переходить на другие страницы. Но с помощью браузераbrowserHistory
а такжеrefresh
страница будет сообщать404
.
2. Причина
потому что мы развертываем单页面应用
, Текущие основные интерфейсные платформы являются одностраничными, такими какReact
а такжеVue
.
Одна страница просто означает доступ ко всем путям к ресурсам, фактически имеется только одно содержимое страницы (обычно index.html). Фреймворк js, представленный на этой странице, будет перенаправляться к соответствующему компоненту подстраницы (который можно понимать как фрагмент страницы) в соответствии с текущим URL-адресом для логической обработки и рендеринга страницы.
Таким образом, мы напрямую обращаемся к ресурсу страницы (например, /usr/info), этот ресурс не существует, поэтому сервер отчетов сообщит об ошибке 404.
3. Решения
root /usr/share/nginx/html/appname/;
index index.html index.htm;
location / {
try_files $uri $uri/ /index.html;
}
Принцип заключается в том, что при настройкеtry_files
Ресурс страницы не найден. В это время nginx попытается загрузить index.html. После загрузки index.html react-router может работать и соответствовать введенному нами вводу./home
маршрут так, чтобы отображалась правильная домашняя страница.
4. Полная конфигурация
Полная конфигурация предназначена только для справки.
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
server {
listen 80;
# gzip config
gzip on;
gzip_min_length 1k;
gzip_comp_level 9;
gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
root /usr/share/nginx/html/appname/;
index index.html index.htm;
location / {
try_files $uri $uri/ /index.html;
}
location ^~ /assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
}
error_page 500 502 503 504 /500.html;
client_max_body_size 20M;
keepalive_timeout 10;
}