NGINX Статические файлы через Https?
У меня есть следующая настройка docker-compose, которая работает для отображения изображений при развертывании локально и без https:
NGINX:
events{
}
http{
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
location / {
proxy_pass http://frontend:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
}
docker-compose:
frontend:
build:
context: ../../
restart: always
volumes:
- '../../:/app'
- '/app/node_modules'
ports:
- "3000:3000"
depends_on:
- "backend"
environment:
- CHOKIDAR_USEPOLLING=true
stdin_open: true
tty: true
nginx:
build:
context: ../../nginx
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- volume1:/usr/share/nginx/html
links:
- "backend"
- "db"
- "frontend"
frontend:
<img
onError={()=>{
console.log("inside the onError function")
setImgError(true)
}}
src={"http://localhost:9000/static/"+comment.file_name}
className='commentimage'
/>
Это не работает при использовании https. То есть, / и /api/ работают как ожидалось, но не /images/.
events{
}
http{
server {
listen 80;
server_name localhost lightchan.org www.lightchan.org;
root /usr/share/nginx/html;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
return 301 https://lightchan.org$request_uri;
}
server {
listen 443 default_server ssl http2;
listen [::]:443 ssl http2;
server_name localhost lightchan.org www.lightchan.org;
#ssl_certificate /etc/nginx/ssl/live/lightchan.org/fullchain.pem;
#ssl_certificate_key /etc/nginx/ssl/live/lightchan.org/privkey.pem;
ssl_certificate /etc/letsencrypt/live/lightchan.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/lightchan.org/privkey.pem;
location / {
proxy_pass http://frontend:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location ^~ /api/ {
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://backend:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location ^~ /images/ {
rewrite ^/images/(.*)$ /$1 break;
proxy_pass https://164.92.157.124/static/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
}
Мой docker-compose:
frontend:
build:
context: ../../
restart: always
volumes:
- '../../:/app'
- '/app/node_modules'
ports:
- "3000:3000"
depends_on:
- "backend"
environment:
- CHOKIDAR_USEPOLLING=true
stdin_open: true
tty: true
links:
- 'backend'
nginx:
build:
context: ../../nginx
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- volume1:/usr/share/nginx/html
- varwwwcertbot:/var/www/certbot
- certbotconf:/etc/letsencrypt
links:
- "backend"
- "db"
- "frontend"
certbot:
image: certbot/certbot:latest
volumes:
- varwwwcertbot:/var/www/certbot
- certbotconf:/etc/letsencrypt
Мой фронтенд в этом случае я не знаю, как ссылаться. У меня есть
<img
onError={()=>{
console.log("inside the onError function")
setImgError(true)
}}
src={"https://nginx:80/images/"+comment.file_name}
className='commentimage'
/>
Что выглядит неправильно. Я docker exec вошел в запущенный контейнер nginx и дважды проверил, что изображение, которое я хочу отобразить, существует в каталоге static (что так и есть). Если я пытаюсь перейти в каталог <DNS>/state/<image.extension>, меня перенаправляет обратно через мое фронтенд-приложение. Я попытался заменить строку
proxy_pass https://164.92.157.124/static/;
с
proxy_pass https://backend:3000/static/;
- но это будет проходить через мое приложение Django для статических файлов, а я хочу, чтобы NGINX обслуживал их просто как папку.
Есть идеи?