Я создаю веб-приложение для некоммерческой организации в моем городе. Приложение состоит из серверной части с django -rest-framework, внешнего интерфейса в vuejs и обратного прокси-сервера, который обслуживает stati c файлы и носители: nginx.
, которые я хотел чтобы протестировать приложение в тестовом окружении, близком к prod env, которое я буду использовать.
У меня были некоторые трудности при переходе с http на https в моем тестовом окружении, но мне удалось это благодаря этой статье: ssl on nginx с docker
Теперь у меня есть еще одна проблема, которую я не могу объяснить: каждый раз, когда я пытаюсь достичь своего бэкэнда, кажется, что запросы занимают так много времени, что я получаю 504 Тайм-аут шлюза. Вначале я заметил, что рабочий-оружейник был убит за каждый мой запрос, но я добавил 120se c таймаут, чтобы предотвратить это.
Я думаю, что проблема в моем nginx config. Я не достаточно знаком с ним, чтобы найти правильное решение моей проблемы, поэтому я прошу вашей помощи (надеюсь, что это не будет еще 504 LOL)
Вот мой nginx .conf:
user nginx;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
client_max_body_size 100m;
upstream backend {
server backend:8000;
server 3.126.53.252:8000;
}
access_log /var/log/nginx/access.log;
server {
listen 80;
listen [::]:80;
server_name abeille-arlonaise.be;
location / {
# Simple requests
if ($request_method ~* "(GET|POST)") {
add_header "Access-Control-Allow-Origin" *;
}
# Preflighted requests
if ($request_method = OPTIONS ) {
add_header "Access-Control-Allow-Origin" *;
add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS, HEAD";
add_header "Access-Control-Allow-Headers" "Authorization, Origin, X-Requested-With, Content-Type, Accept";
}
rewrite ^ https://www.abeille-arlonaise.be$request_uri? permanent;
}
location ~ /.well-known/acme-challenge {
allow all;
root /data/letsencrypt;
}
}
server {
listen 80;
listen [::]:80;
server_name www.abeille-arlonaise.be;
location / {
# Simple requests
if ($request_method ~* "(GET|POST)") {
add_header "Access-Control-Allow-Origin" *;
}
# Preflighted requests
if ($request_method = OPTIONS ) {
add_header "Access-Control-Allow-Origin" *;
add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS, HEAD";
add_header "Access-Control-Allow-Headers" "Authorization, Origin, X-Requested-With, Content-Type, Accept";
}
rewrite ^ https://www.abeille-arlonaise.be$request_uri? permanent;
}
location ~ /.well-known/acme-challenge {
allow all;
root /data/letsencrypt;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name abeille-arlonaise.be;
charset utf-8;
server_tokens off;
ssl_certificate /etc/letsencrypt/live/abeille-arlonaise.be/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/abeille-arlonaise.be/privkey.pem;
ssl_buffer_size 8k;
ssl_dhparam /etc/ssl/certs/dhparam-2048.pem;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
ssl_ecdh_curve secp384r1;
ssl_session_tickets off;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8;
location / {
add_header Access-Control-Allow-Origin *;
}
return 301 https://www.abeille-arlonaise.be$request_uri;
}
server {
server_name www.abeille-arlonaise.be;
listen 443 ssl http2;
listen [::]:443 ssl http2;
charset utf-8;
server_tokens off;
ssl_buffer_size 8k;
ssl_dhparam /etc/ssl/certs/dhparam-2048.pem;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
ssl_ecdh_curve secp384r1;
ssl_session_tickets off;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4;
ssl_certificate /etc/letsencrypt/live/abeille-arlonaise.be/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/abeille-arlonaise.be/privkey.pem;
root /dist/;
index index.html;
# frontend
location / {
# Simple requests
if ($request_method ~* "(GET|POST)") {
add_header "Access-Control-Allow-Origin" *;
}
# Preflighted requests
if ($request_method = OPTIONS ) {
add_header "Access-Control-Allow-Origin" *;
add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS, HEAD";
add_header "Access-Control-Allow-Headers" "Authorization, Origin, X-Requested-With, Content-Type, Accept";
}
try_files $uri $uri/ @rewrites;
}
location @rewrites {
rewrite ^(.+)$ /index.html last;
}
# backend urls
location ~ ^/(admin|api|auth) {
# Simple requests
if ($request_method ~* "(GET|POST)") {
add_header "Access-Control-Allow-Origin" *;
}
# Preflighted requests
if ($request_method = OPTIONS ) {
add_header "Access-Control-Allow-Origin" *;
add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS, HEAD";
add_header "Access-Control-Allow-Headers" "Authorization, Origin, X-Requested-With, Content-Type, Accept";
}
proxy_redirect off;
proxy_pass https://backend;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
# static files
location /static {
# Simple requests
if ($request_method ~* "(GET|POST)") {
add_header "Access-Control-Allow-Origin" *;
}
# Preflighted requests
if ($request_method = OPTIONS ) {
add_header "Access-Control-Allow-Origin" *;
add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS, HEAD";
add_header "Access-Control-Allow-Headers" "Authorization, Origin, X-Requested-With, Content-Type, Accept";
}
autoindex on;
alias /usr/src/app/static;
}
# media files
location /media {
# Simple requests
if ($request_method ~* "(GET|POST)") {
add_header "Access-Control-Allow-Origin" *;
}
# Preflighted requests
if ($request_method = OPTIONS ) {
add_header "Access-Control-Allow-Origin" *;
add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS, HEAD";
add_header "Access-Control-Allow-Headers" "Authorization, Origin, X-Requested-With, Content-Type, Accept";
}
autoindex on;
alias /usr/src/app/media;
}
}
}
Я, вероятно, сделал не одну вещь неправильно, но она отлично работала, когда я был в http. Мне также кажется, что мои звонки на сервер выполняются через http, а не через https, но я не знаю, как и как это исправить ...
Файлы stati c работают отлично, я могу связаться с сайт, который перенаправляет меня в https, есть только те внутренние вызовы, которые не работают.
Вот вывод curl, когда я пытаюсь добраться до внутреннего интерфейса:
Что выводится в логах докеров:
Я продолжу редактировать позже, я должен go.