Мой стек — php/Symfony для серверной части, React/NextJS для внешнего интерфейса и MariaDB для базы данных. Я хотел использовать nginx для сервера.
Во-первых, мой интерфейс, кажется, работает с этой конфигурацией, поскольку переопределение правильное, и я могу получить доступ к своему веб-сайту через http:// my-app.com
Но когда я хочу отправлять запросы к своему серверу через интерфейс, я получаю ошибку CORS в Firefox (политика CORS Same Origin, без кода ошибки). Когда я хочу получить доступ к своему серверу через http://my-app.com:9000, как это было бы в dev, я получаю сообщение об ошибке: веб-сайт недоступен и т. д.
Значит, я здесь заблудился. Я думаю, что у меня может быть ошибка в моей конфигурации, но я не могу определить, где именно, и я застрял на этом несколько дней...
Вот мой файл docker-compose .yml:
Код: Выделить всё
services:
frontend:
build:
context: ./my-app-front
dockerfile: Dockerfile
container_name: my-app-front
ports:
- "3000:3000"
networks:
- bridge
backend:
build:
context: ./my-app-back
dockerfile: Dockerfile
container_name: my-app-back
volumes:
- backups:/var/backups/my-app
ports:
- "9000:9000"
networks:
- bridge
depends_on:
- db
environment:
DATABASE_URL: mysql://root:password@db:3306/db_name?serverVersion=mariadb-10.5.8
nginx:
image: nginx:stable-alpine
container_name: my-app-nginx
environment:
DATABASE_URL: mysql://root:password@db:3306/db_name?serverVersion=mariadb-10.5.8
ports:
- "80:80"
volumes:
- ./my-app/nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- frontend
- backend
- db
networks:
- bridge
db:
image: mariadb:10.5.8
container_name: my-app-db
environment:
MYSQL_USER: root
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: db_name
volumes:
- db_data:/var/lib/mysql
ports:
- "3306:3306"
networks:
- bridge
networks:
bridge:
driver: bridge
volumes:
db_data:
backups:
Код: Выделить всё
server {
listen 80;
server_name my-app.com;
add_header 'Access-Control-Allow-Origin' 'http://my-app.com' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, X-Requested-With, Accept' always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
location / {
proxy_pass http://my-app.com:3000;
proxy_http_version 1.1;
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-Proto $scheme;
proxy_buffering off;
}
location /assets/ {
root /var/www/src/public;
try_files $uri $uri/ =404;
}
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
Если я смогу предоставить дополнительную информацию, я буду рад!
Я пробовал несколько вариантов конфигурации, пока не появился этот, и думаю, что проблема заключается в томах и пути к ним...
Подробнее здесь: https://stackoverflow.com/questions/791 ... for-server