Laravel Docker Nginx不加载静态(公共)文件

14ifxucb  于 2023-04-20  发布在  Nginx
关注(0)|答案(1)|浏览(143)

我使用docker来运行我的laravel项目,我有一个应用程序(php)和nginx容器。
在本地,一切都正常,但一旦我在AWS EC2服务器上安装了docker,并将我的ECR docker容器拉到EC2服务器上,就没有静态内容加载了。
我已经运行了php artisan route:list和所有的web.php路由都在那里,似乎是工作,当我去我的域页面加载没有样式,因为所有的静态文件在公共目录返回404错误。
这是我的nginx容器的配置

server {
    listen 80;
    server_name {domain};
    root /var/www/html/public;

    index index.php index.html;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass subscription_manager_php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME /var/www/html/public$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

在EC2服务器上,我运行nginx,它代理到这个容器,这是我的配置

server {
    server_name {domain};

    location / {
        proxy_pass http://127.0.0.1:8003;
        proxy_set_header Host            $host;
        proxy_set_header X-Forwarded-For $remote_addr;
    }

    listen 80;
}

nginx服务器运行在端口:8003 BTW,以防被询问。
我以为集装箱上的这个位置块

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

将只加载任何url被传递,如{domain}/images/test.png,如果不存在,那么它将查看index.php以查看是否存在路由。

更新

这些是我正在运行的拉取和运行ECR容器的命令

aws ecr get-login-password --region eu-west-2 | docker login --username AWS --password-stdin {ecr-path}
docker pull {ecr-path}/subscription.manager/php:latest
docker pull {ecr-path}/subscription.manager/nginx:latest
docker rm -f subscription_manager_php || true
docker rm -f subscription_manager_nginx || true
docker network inspect subscription_manager_network >/dev/null 2>&1 || docker network create subscription_manager_network
docker run -d --network="subscription_manager_network" --name="subscription_manager_php" -v /home/ubuntu/.env.subscription_manager:/var/www/html/.env -v subscription_manager_php_storage:/var/www/html/storage/ {ecr-path}/subscription.manager/php:latest
docker run -d -p 8003:80 --network="subscription_manager_network" --name="subscription_manager_nginx" {ecr-path}/subscription.manager/nginx:latest
docker exec subscription_manager_php php artisan migrate --force
fzsnzjdm

fzsnzjdm1#

如果你使用docker-compose,在nginx容器的配置中添加以下行:

volumes_from:
   - {name-of-your-php-container}

假设你的php容器名为“php-blog”,ngnix配置应该是这样的:

nginx-far:
    build: nginx
    ports:
      - '8000:80'
    links:
      - php-blog
    volumes_from:
      - php-blog
    volumes:
      - ./logs/nginx/:/var/log/nginx

相关问题