Я перехожу свое приложение для реагирования с webpack-dev-server на nginx.
Когда я перехожу к корневому URL-адресу «localhost: 8080 / login», я просто получаю 404 и в моем журнале nginx вижу, что он пытается получить:
my-nginx-container | 2017/05/12 21:07:01 [error] 6#6: *11 open() "/wwwroot/login" failed (2: No such file or directory), client: 172.20.0.1, server: , request: "GET /login HTTP/1.1", host: "localhost:8080"
my-nginx-container | 172.20.0.1 - - [12/May/2017:21:07:01 +0000] "GET /login HTTP/1.1" 404 169 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0" "-"
Где мне искать исправление?
Мой бит маршрутизатора в реакции выглядит так:
render(
<Provider store={store}>
<MuiThemeProvider>
<BrowserRouter history={history}>
<div>
Hello there p
<Route path="/login" component={Login} />
<App>
<Route path="/albums" component={Albums}/>
<Photos>
<Route path="/photos" component={SearchPhotos}/>
</Photos>
<div></div>
<Catalogs>
<Route path="/catalogs/list" component={CatalogList}/>
<Route path="/catalogs/new" component={NewCatalog}/>
<Route path="/catalogs/:id/photos/" component={CatalogPhotos}/>
<Route path="/catalogs/:id/photos/:photoId/card" component={PhotoCard}/>
</Catalogs>
</App>
</div>
</BrowserRouter>
</MuiThemeProvider>
</Provider>, app);
И мой файл nginx такой:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
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 8080;
root /wwwroot;
location / {
root /wwwroot;
index index.html;
try_files $uri $uri/ /wwwroot/index.html;
}
}
}
РЕДАКТИРОВАТЬ:
Я знаю, что большая часть настройки работает, потому что, когда я перехожу на localhost: 8080 без входа в систему, я также получаю страницу входа. это не через перенаправление на localhost: 8080 / login - это какой-то код реакции.
nginx
react-router
Мартин
источник
источник
try_files
должны быть URI, а не имена пути. Попробуйте:try_files $uri $uri/ /index.html;
Ответы:
Блок местоположения в вашей конфигурации nginx должен быть:
Проблема в том, что запросы к файлу index.html работают, но в настоящее время вы не указываете nginx перенаправлять и другие запросы в файл index.html.
источник
Вот мои решения
простая попытка:
больше не нужно пытаться использовать типы, отличные от HTML:
Больше не нужно пытаться использовать не-html-типы и каталог (делая
try_files
совместимым сindex
и / илиautoindex
):источник
Возможно, это не совсем тот случай, но для тех, кто запускает
docker
контейнер для своегоreact
проекта,react-router
иwebpack-dev-server
в моем случае у меня было все, что мне было нужно в моемnginx.conf
:Но все же nginx не отправляет в корень ошибку 404
/
. Заглянув в контейнер, я заметил, что есть некоторые конфигурации, в/etc/nginx/conf.d/default.conf
которых каким-то образом переопределяются мои конфигурации, поэтому удаление этого файла в моем случаеdockerfile
решило проблему:источник
Вот решение, которое у меня работает на реальном сервере:
Я только что выполнил это руководство и в базовой конфигурации Nginx просто настроил блок местоположения.
источник
Для меня ничего не работало, пока я не добавил корневую директиву. Это сработало для меня также с использованием обратного прокси для доступа к конечной точке / api / webserver.
источник
У меня была та же проблема, и я подумал, что это ошибка conf, но нет. Копировал файл conf в
/etc/nginx/conf.d/
папку. Это работает в dev, но в версии сборки вызывает эту проблему. При сбое маршрута nginx не откатывается к index.Просто скопируйте файл conf в нужную папку:
/etc/nginx/conf.d/default.conf
Пример инструкции Dockerfile:
COPY .docker/prod/nginx.conf /etc/nginx/conf.d/default.conf
Надеюсь, поможет.
источник
Вот несколько шагов, которые я предпринял, которые могут помочь, если вы только начинаете
/
используяcd ..
то вы должны быть в/
/etc/nginx/sites-available/{yoursitename or default}
компакт-диске впереди, чтобы перейти к нему.nano
илиvim
я использовал Vim вот такvi {your site.conf}
источник
источник