
Ich habe ein Problem mit Nginx in meinem Docker-Projekt. Ich weiß, es gibt hier viele ähnliche Beiträge, aber keiner konnte mir helfen.
Ich verwende Nginx mit Docker und meine Website funktioniert, aber ich wollte einige Skalierungs- und Sicherheitsfunktionen hinzufügen und den geschriebenen Code hinsichtlich der Leistung verbessern. Dazu möchte ich einen HTTP-Block hinzufügen und einen Ereignisblock definieren.
Wenn ich versuche, diese hinzuzufügen, erhalte ich diese Fehlermeldung:
[emerg] 7#7: "events" directive is not allowed here in /etc/nginx/conf.d/app.conf:1
oder dies, wenn ich den Ereignisabschnitt entferne:
[emerg] 7#7: "http" directive is not allowed here in /etc/nginx/conf.d/app.conf:13
Aus irgendeinem Grund habe ich die Ordner sites-enabled und sites-available nicht im Verzeichnis /etc/nginx/. Ich weiß nicht, ob das wichtig ist.
So sieht meine app.conf-Datei jedoch aus (funktioniert problemlos):
#events {
# worker_processes auto;
# worker_connections 1024;
# worker_rlimit_nofile 2048;
# multi_accept on;
# mutex_accept on;
# mutex_accept_delay 500ms;
# use epoll;
# epoll_events 512;
#}
#http {
#access_log logs/access.log combined;
#error_log logs/warn.log warn;
upstream app {
least_conn;
server app_2:8001;
server app_2:443;
server app:8000;
server app:443;
}
server {
listen 80;
server_name find-your-spirits.de;
location / {
return 301 https://$host$request_uri;
}
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
}
server {
listen 443 ssl;
server_name find-your-spirits.de;
location / {
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://app;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
location /staticfiles/ {
alias /app/staticfiles/;
add_header Access-Control-Allow-Origin *;
}
ssl_certificate /etc/letsencrypt/live/find-your-spirits.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/find-your-spirits.de/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
#}
Wenn ich das # entferne, erhalte ich die erwähnten Fehler.
Dies ist mein Dockerfile:
FROM nginx:1.19.0
RUN rm /etc/nginx/conf.d/default.conf
COPY app.conf /etc/nginx/conf.d
Dies ist meine Docker-Compose-Datei:
version: '3'
services:
app:
image: django
build:
context: ./app
dockerfile: Dockerfile
env_file:
- ./.test.env
volumes:
- ./app/:/app/
- ./app/staticfiles/:/app/staticfiles
- ./data/.htpasswd:/etc/nginx/.htpasswd
command: gunicorn --bind 0.0.0.0:8000 --chdir /app/ Webserver.wsgi
app_2:
image: django
build:
context: ./app
dockerfile: Dockerfile
env_file:
- ./.test.env
volumes:
- ./app/:/app/
- ./app/staticfiles/:/app/staticfiles
- ./data/.htpasswd:/etc/nginx/.htpasswd
command: gunicorn --bind 0.0.0.0:8001 --chdir /app/ Webserver.wsgi
nginx:
image: nginx:1.19.0
build:
context: ./data/nginx
dockerfile: Dockerfile
ports:
- "80:80"
- "443:443"
volumes:
- ./data/nginx:/etc/nginx/conf.d
- ./app/staticfiles/:/app/staticfiles
- ./data/certbot/conf:/etc/letsencrypt
- ./data/certbot/www:/var/www/certbot
- ./data/.htpasswd:/etc/nginx/.htpasswd
command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
certbot:
image: certbot/certbot
volumes:
- ./data/certbot/conf:/etc/letsencrypt
- ./data/certbot/www:/var/www/certbot
entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
db:
image: postgres
volumes:
- postgres_data:/var/lib/postgresql/data/
env_file:
- ./.test.env
environment:
- POSTGRES_DB_PORT=${SQL_PORT}
- POSTGRES_DB_HOST=${SQL_HOST}
- POSTGRES_PASSWORD=${SQL_PASSWORD}
- POSTGRES_USER=${SQL_USER}
- POSTGRES_DB=${SQL_DATABASE}
ports:
- 5432:5432
volumes:
postgres_data
Wenn du weitere Informationen oder den Inhalt anderer Dateien benötigst, hinterlasse einfach einen Kommentar und ich werde diese anschließend hinzufügen.
Außerdem bin ich bei Nginx ein echter Neuling. Wenn Sie also einen Fehler im Text sehen, korrigieren oder verbessern Sie ihn gerne.