Saya sedang mentransisikan aplikasi react saya dari webpack-dev-server ke nginx.
Ketika saya membuka url root "localhost: 8080 / login" saya hanya mendapatkan 404 dan di log nginx saya, saya melihat bahwa itu mencoba untuk mendapatkan:
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" "-"
Di mana saya harus mencari perbaikan?
Bit router saya bereaksi terlihat seperti ini:
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);
Dan file nginx saya seperti ini:
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;
}
}
}
EDIT:
Saya tahu bahwa sebagian besar pengaturan berfungsi karena ketika saya pergi ke localhost: 8080 tanpa login saya mendapatkan halaman login juga. ini tidak melalui pengalihan ke localhost: 8080 / login - ini adalah beberapa kode reaksi.
nginx
react-router
martin
sumber
sumber
try_files
harus berupa URI dan bukan nama jalur. Coba:try_files $uri $uri/ /index.html;
Jawaban:
Blok lokasi di konfigurasi nginx Anda harus:
Masalahnya adalah permintaan ke file index.html berfungsi, tetapi Anda saat ini tidak memberi tahu nginx untuk meneruskan permintaan lain ke file index.html juga.
sumber
Inilah solusi saya
mencoba sederhana:
tidak perlu lagi mencoba jenis non-html:
tidak perlu lagi mencoba jenis dan direktori non-html (membuatnya
try_files
kompatibel denganindex
dan / atauautoindex
):sumber
Mungkin ini bukan kasus yang tepat di sini tetapi untuk siapa pun yang menjalankan
docker
wadah untukreact
proyek mereka denganreact-router
danwebpack-dev-server
, dalam kasus saya, saya memiliki semua yang saya butuhkan dinginx.conf
:Tapi tetap saja nginx tidak akan mengirim 404 kesalahan ke root
/
. Setelah melihat ke dalam wadah, saya perhatikan bahwa ada beberapa konfigurasi/etc/nginx/conf.d/default.conf
yang entah bagaimana akan menimpa konfigurasi saya, jadi menghapus file itu di sayadockerfile
memecahkan masalah:sumber
Berikut adalah solusi yang berfungsi untuk saya di server langsung:
Saya baru saja mengikuti tutorial ini dan dengan konfigurasi Nginx dasar cukup mengkonfigurasi blok lokasi.
sumber
Bagi saya tidak ada yang berhasil sampai saya menambahkan arahan root. Ini berfungsi untuk saya juga menggunakan proxy terbalik untuk mencapai titik akhir / api / webserver.
sumber
Saya menghadapi masalah yang sama dan saya pikir itu adalah kesalahan conf tetapi tidak. Saya menyalin file conf ke
/etc/nginx/conf.d/
folder. Itu berfungsi di dev tetapi dalam versi build menyebabkan masalah itu. Jika rute gagal, nginx jangan fallback ke indeks.Cukup salin file conf ke folder kanan:
/etc/nginx/conf.d/default.conf
Contoh instruksi Dockerfile:
COPY .docker/prod/nginx.conf /etc/nginx/conf.d/default.conf
Semoga membantu.
sumber
sumber