Sto utilizzando boot2docker poiché eseguo Mac OSX. Non riesco a capire come servire i file statici usando nginx che è in esecuzione all'interno di un container (che contiene anche le risorse statiche, come il mio html e js).Come servire file statici con nginx all'interno di un contenitore di finestra mobile?
Ho quattro contenitori docker essere filate con questa finestra mobile-compose.yml:
web:
build: ./public
links:
- nodeapi1:nodeapi1
ports:
- "80:80"
nodeapi1:
build: ./api
links:
- redis
- db
ports:
- "5000:5000"
volumes:
- ./api:/data
redis:
image: redis:latest
ports:
- "6379:6379"
db:
image: postgres:latest
environment:
POSTGRES_USER: root
ports:
- "5432:5432"
Questo è il mio nginx.conf:
worker_processes auto;
daemon off;
events {
worker_connections 1024;
}
http {
server_tokens off;
upstream node-app {
ip_hash;
server 192.168.59.103:5000;
}
server {
listen 80;
index index.html;
root /var/www;
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 1d;
}
location/{
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_pass http://node-app;
proxy_cache_bypass $http_upgrade;
}
}
}
mio Dockerfile per la mia web build (che contiene il mio nginx.conf e le risorse statiche):
# Pull nginx base image
FROM nginx:latest
# Expost port 80
EXPOSE 80
# Copy custom configuration file from the current directory
COPY nginx.conf /etc/nginx/nginx.conf
# Copy static assets into var/www
COPY ./dist /var/www
COPY ./node_modules /var/www/node_modules
# Start up nginx server
CMD ["nginx"]
Il contenuto della cartella ./dist è un file bundle.js e un file index.html. Il layout del file è:
public
-- Dockerfile
-- nginx.conf
-- dist (directory)
-- bundle.js
-- index.html
-- node_modules
...various node modules
Si sta inviando correttamente le richieste al mio server node (che è anche in un contenitore finestra mobile, è per questo che i miei punti di server a monte per l'ip boot2docker), ma sto solo ottenendo 404s per tentativi di recuperare le mie risorse statiche.
Sono perso per quanto riguarda i prossimi passi. Se posso fornire qualsiasi informazione, per favore fatemelo sapere.
Grazie per la risposta! Adottando la tua configurazione, sto ricevendo un 404 dal mio server di nodi insieme a una certa risposta dal mio server nginx: 192.168.59.3 - - [04/Aug/2015: 10: 43: 23 +0000] "GET/HTTP/1.1 "404 13" - "" Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, come Gecko) Chrome/44.0.2304.125 Safari/537.36 " –
l'esempio di configurazione nella mia risposta è un esempio che funzionerebbe solo se la tua app è progettata per avere i suoi file statici pubblicati in '/ static /'. Se questo non è il caso della tua app, devi adattare quella conf. In ogni caso questo dovrebbe permetterti di concentrare i tuoi sforzi sulla tua configurazione di nginx e smettere di cercare sulla finestra mobile;) – Thomasleveil
usando "alias" invece di "root" l'ho risolto per me –