Estoy tratando de configurar un servidor con nginx y docker-compose, pero recibo estos errores cada vez que intento 'docker-compose up':
webserver | 2019/06/10 13:04:16 [emerg] 1#1: "http" directive is not allowed here in /etc/nginx/conf.d/default.conf:1 webserver | nginx: [emerg] "http" directive is not allowed here in /etc/nginx/conf.d/default.conf:1Intenté envolver todo con html {}, eliminando el servidor {}, otro puerto en lugar de 80...
archivo acoplable nginx
FROM nginx COPY default.conf /etc/nginx/conf.d/default.confpredeterminado.conf
server { listen 80; server_name localhost; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://app:8080/; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }Esto sucede cuando intenta sobrescribir el archivo de configuración nginx predeterminado que no acepta algunas propiedades raíz como http , user . Si necesita esas configuraciones adicionales, puede intentar copiar lo que tiene en /etc/nginx/nginx.conf
Entonces, en lugar de esto: COPY default.conf /etc/nginx/conf.d/default.conf
Haz esto: COPY nginx.conf /etc/nginx/nginx.conf
Nota: Al copiar en
/etc/nginx/conf.d/, sobrescribirá la configuración predeterminada.
Me gustaría agregar otra solución a las propuestas anteriormente. Como se sugirió anteriormente, sustituir nginx.conf o default.conf funciona. Lo hago en docker-compose.yml :
volumes: - ./services/nginx.conf:/etc/nginx/nginx.conf Sin embargo , me encontré con la necesidad de usar variables de entorno en mi archivo nginx.conf , lo que requiere crear una plantilla en /etc/nginx/templates/ , que luego genera envsubst en /etc/nginx/conf.d , como se explica aquí .
Me encontré con los siguientes errores:
nginx: [emerg] "events" directive is not allowed here in /etc/nginx/conf.d/default.confnginx: [emerg] "http" directive is not allowed here in /etc/nginx/conf.d/default.conf Aquí está la solución de trabajo para el archivo nginx.conf (el nombre del archivo no importa aquí, ya que se cambia cuando se copia al contenedor, vea docker-compose a continuación, pero me gusta llamarlo nginx.conf para mayor claridad):
server { listen ${FE_PORT}; location / { proxy_pass http://frontend:${FE_PORT}; } } server { listen ${BE_PORT}; location / { proxy_pass http://backend:${BE_PORT}; } } server { listen ${SERVICE_PORT}; location / { proxy_pass http://service:${SERVICE_PORT}; } } Y docker-compose.yml :
nginx: image: nginx container_name: nginx ports: - "${FE_PORT}:${FE_PORT}" - "${BE_PORT}:${BE_PORT}" - "${SERVICE_PORT}:${SERVICE_PORT}" environment: - FE_PORT - BE_PORT - SERVICE_PORT volumes: - ./nginx.conf:/etc/nginx/templates/default.conf.templateResuelto esto sobrescribiendo nginx.conf.
Dockerfile
FROM nginx COPY default.conf /etc/nginx/conf.d/default.confpredeterminado.conf
worker_processes 1; events { worker_connections 1024; } http { sendfile on; upstream app { server app:8080; } server { listen 8080; location / { proxy_pass http://app; proxy_redirect off; 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-Forwarded-Host $server_name; } } }