我想找出困擾我的 dockerized Django、Postgres、Gunicorn、Nginx 專案的原因。
`/etc/nginx/html/index.html" is not found`
nginx | 2021/10/27 15:40:34 [error] 22#22: *2 "/etc/nginx/html/index.html" is not found (2: No such file or directory), client: 172.29.0.1, server: , request: "GET / HTTP/1.1", host: "0.0.0.0:8000"
nginx | 172.29.0.1 - - [27/Oct/2021:15:40:34 0000] "GET / HTTP/1.1" 404 555 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36" "-
我不明白為什么當我基本上只在埠 8000 上重定向來自 Django 的流量并替換了 nginx 的組態檔時,它為什么會抱怨 index.html。
在nginx.conf我試圖改變 listen 80;到 listen 8000;
并試圖更改,然后洗掉該條目server_name localhost;
在 docker-compose 中,我嘗試更改埠,例如
ports:
- 8000:80
-->
ports:
- 8000:8000
我檢查了容器,默認值/etc/nginx/conf.d/default.conf被洗掉并替換為新的nginx.conf
這可能是非常簡單的事情,但我看不到它。
碼頭工人
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ea9da69663eb nn_nginx "/docker-entrypoint.…" 4 minutes ago Up 4 minutes 0.0.0.0:8000->80/tcp, :::8000->80/tcp nginx
fcc396bd0e56 nn_django_app "/usr/src/app/entryp…" 7 minutes ago Up 4 minutes 8000/tcp django_app
2653621d29ff postgres:14.0-alpine "docker-entrypoint.s…" 7 minutes ago Up 4 minutes 5432/tcp db1
或更改埠
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e15109bacc66 nn_nginx "/docker-entrypoint.…" 28 minutes ago Up 28 minutes 80/tcp, 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp nginx
7ee41d873e3d nn_django_app "/usr/src/app/entryp…" 29 minutes ago Up 28 minutes 8000/tcp django_app
e9f14bd6e6b8 postgres:14.0-alpine "docker-entrypoint.s…" 29 minutes ago Up 28 minutes 5432/tcp
docker-compose
version: "3.8"
services:
# Database containers
db1:
container_name: db1
image: postgres:14.0-alpine
volumes:
- db1_volume:/var/lib/postgresql/data/
env_file:
- ./postgres/.env
networks:
- db1_network
# Web container
django_app:
container_name: django_app
build:
context: ./backend
dockerfile: Dockerfile
volumes:
- django_static_volume:/usr/src/app/static
env_file:
- ./backend/.env
networks:
- db1_network
- nginx_network
expose:
- 8000
depends_on:
- db1
command: gunicorn server.wsgi:application -w 3 -b :8000
# Reverse proxy container (nginx)
nginx:
container_name: nginx
restart: always
build: ./nginx
volumes:
- django_static_volume:/usr/src/app/django_files/static
networks:
- nginx_network
ports:
- 8000:80
depends_on:
- django_app
networks:
db1_network:
driver: bridge
nginx_network:
driver: bridge
volumes:
db1_volume:
django_static_volume:
Nginx 檔案
FROM nginx:1.21.3-alpine
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d
WORKDIR /usr/src/app
組態檔
upstream django_backend {
server django_app:8000;
}
server {
listen 80;
server_name localhost;
location /admin {
proxy_pass http://django_backend;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
location /api {
proxy_pass http://django_backend;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
location /static/admin/ {
alias /usr/src/app/django_files/static/admin/;
}
location /static/rest_framework/ {
alias /usr/src/app/django_files/static/rest_framework/;
}
}
從 Django 設定中選擇
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
# Third-party
'corsheaders',
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
SECRET_KEY = 'secretsecretsecret'
DEBUG = False
ALLOWED_HOSTS = ['127.0.0.1', '0.0.0.0', 'localhost']
ROOT_URLCONF = 'server.urls'
WSGI_APPLICATION = 'server.wsgi.application'
CORS_ORIGIN_ALLOW_ALL = True
STATIC_URL = '/static/'
STATICFILES_DIRS = [str(BASE_DIR.joinpath('static'))]
STATIC_ROOT = str(BASE_DIR.joinpath('staticfiles'))
STATICFILES_FINDERS = [
"django.contrib.staticfiles.finders.FileSystemFinder",
"django.contrib.staticfiles.finders.AppDirectoriesFinder",
]
uj5u.com熱心網友回復:
您的代碼中存在一些問題。
對于8000:80您docker-compose的8000埠,瀏覽器將嘗試連接80的埠,是 docker 容器埠的埠。這意味著您需要80為nginx config.
在 Nginx 配置中,您只需設定/apiand/admin和的位置staticfiles。我只看到你嘗試GET /你有沒有嘗試GET你api和admin呢?
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/339932.html
標籤:姜戈 PostgreSQL 码头工人 nginx
