Задать вопрос
@yellow_pus

Как правильно указать путь к проекту в конфиге nginx?

Пытаюсь запихать проект на ларавель в докер, создал все нужные контейнеры, каждая из которых при запуске docker-compose up Выдают "ready to accept connection". Но когда пытаюсь непосредственно подключиться через браузер, то выдается ошибка 404 page not found. Насколько я понял, он не может найти index.php файлик, в public/ и насколько я понимаю, это из за nginx контейнера. Вот мои:
Docker-compose.yml (который находится в проекте, внутри папочки _docker)
nginx:
    build:
      context: docker/nginx
    container_name: ${COMPOSE_PROJECT_NAME}.nginx
    networks:
      - frontend
      - backend
    env_file:
      - application.env
    restart: unless-stopped
    depends_on:
      - php-fpm
    volumes:
      - ../:/app/
      - ./docker/nginx/sites/:/etc/nginx/sites-available/

Dockerfile (который находится _docker/nginx)
FROM nginx:alpine

ADD nginx.conf /etc/nginx/

RUN apk update \
    && apk upgrade \
    && apk add --no-cache bash \
    && adduser -D -H -u 1000 -s /bin/bash -Gwww-data www-data

CMD ["nginx"]

EXPOSE 80

app.conf (Который находится в _docker/nginx/sites)
upstream php-upstream {
    server php-fpm:9000;
}

server {
    charset utf-8;
    client_max_body_size 128M;

    listen 80; ## listen for ipv4
    #listen [::]:80 default_server ipv6only=on; ## listen for ipv6

    server_name _;
    root     /app/public;
    index    index.php;

    access_log  /dev/stdout;
    error_log   /dev/sterr;

    location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc|eot|ttf|otf|woff|woff2|svg)$ {
        expires 1M;
        access_log off;
        add_header Cache-Control "public";
        add_header Access-Control-Allow-Origin *;
    }

    # CSS and Javascript
    location ~* \.(?:css|js)$ {
        expires 1y;
        access_log off;
        add_header Cache-Control "public";
    }

    rewrite ^/index.php(?:/)(.*)$ /$1  permanent;
    # rewrite ^/index.php$ /  permanent;
    if ($request_uri ~* "^/index\.php$") {
        return 301 /;
    }

    location / {
        # Redirect everything that isn't a real file to index.php
        try_files $uri $uri/ /index.php$is_args$args;
    }

    # uncomment to avoid processing of calls to non-existing static files by Yii
    #location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
    #    try_files $uri =404;
    #}
    #error_page 404 /404.html;

    # deny accessing php files for the /assets directory
    location ~ ^/assets/.*\.php$ {
        deny all;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass php-upstream;
        try_files $uri =404;
    }

    location ~* /\. {
        deny all;
    }
}

Пожалуйста, помогите разобраться, какой путь и где я указал неправильно?
  • Вопрос задан
  • 751 просмотр
Подписаться 1 Средний 2 комментария
Решения вопроса 2
karabanov
@karabanov Куратор тега Docker
Системный администратор
- ./docker/nginx/sites/:/etc/nginx/sites-available/

sites-available - это Debian style, в sites-available помещают конфиги, а в sites-enabled симлинки на них. Так что даже если бы ты использовал образ Nginx на основе Debian ничего бы не заработало.

Посмотрим, что там в образе с Alpine:
docker run --rm -it nginx:alpine ls -1 /etc/nginx

conf.d
fastcgi.conf
fastcgi_params
mime.types
modules
nginx.conf
scgi_params
uwsgi_params

Ага conf.d - значит там ванильный Nginx
docker run --rm -it nginx:alpine ls -1 /etc/nginx/conf.d/

default.conf

Вот в conf.d и надо поместить конфиг вместо default.conf
Ответ написан
@yellow_pus Автор вопроса
В итоге всё заработало, как только я явно указал порты, ports: - 80:80
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы