簡體   English   中英

Docker 中的 Nginx + PHP-FPM + MySql 和子文件夾中的 Opencart 的“404 not found”

[英]"404 not found " for Nginx + PHP-FPM + MySql in Docker and Opencart in subfolder

我在 docker 容器中運行了 Nginx、PHP-FPM 和 MySQL。 我想在子文件夾“public”中安裝 Opencart 3 以供將來開發。 但是當我嘗試安裝 OC3 時,我從 nginx 收到 404 錯誤。 同時,服務器正在工作,容器相互 ping,我可以顯示 phpinfo() 並且很明顯一切正常。 錯誤在哪里?

碼頭工人-compose.yml

version: '3.7'

services:
  ktt_nginx:
    build: ./docker/nginx
    container_name: ktt_nginx
    ports:
      - '86:80'
    volumes:
      - ./docker/nginx/conf:/etc/nginx/conf.d
      - .:/var/www/html
      - ./docker/nginx/log/:/var/log/nginx
      - /tmp:/tmp
    depends_on:
      - ktt_php
    networks:
      - ktt-net

  ktt_php:
    build: ./docker/php
    container_name: ktt_php
    volumes:
      - .:/var/www/html
      - /tmp:/tmp
      - ~/.composer:/var/www/.composer
    depends_on:
      - ktt_mysql
    networks:
      - ktt-net

  ktt_mysql:
    image: mysql:5.7
    container_name: ktt_mysql
    ports:
      - "3386:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=kttdb
      - MYSQL_USER=opencart
      - MYSQL_PASSWORD=root
    volumes:
      - ktt_mysql_data:/var/lib/mysql
    networks:
      - ktt-net

  ktt_pma:
    image: phpmyadmin/phpmyadmin
    container_name: ktt_pma
    environment:
      - PMA_ARBITRARY=1
    restart: always
    ports:
      - 8086:80
    volumes:
      - /sessions
    depends_on:
      - ktt_mysql
    networks:
      - ktt-net

networks:
  ktt-net:

volumes:
  ktt_mysql_data:

服務器配置文件

server {
    server_name localhost;
    root /var/www/html/public;

    location / {
        # try to serve file directly, fallback to index.php
        try_files $uri /index.php$is_args$args;
    }

    location ~ ^/index\.php(/|$) {
        fastcgi_pass ktt_php:9000;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;

        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        # Prevents URIs that include the front controller. This will 404:
        # http://domain.tld/index.php/some-path
        # Remove the internal directive to allow URIs like this
        internal;
    }

    # return 404 for all other php files not matching the front controller
    # this prevents access to other php files you don't want to be accessible.
    location ~ \.php$ {
        return 404;
    }

    error_log /var/log/nginx/project_error.log;
    access_log /var/log/nginx/project_access.log;
}

nginx Dockerfile

FROM nginx:latest

RUN apt-get update && apt-get install mc -y
RUN usermod -u 1000 nginx && groupmod -g 1000 nginx

我再次不得不處理配置 Opencart 以在 Docker 容器內工作。 現在我能夠進行正確的系統配置。 因此,OpenCart 3 的配置示例。

docker-compose.yml

version: "3.3"

services:
  cart30_nginx:
    image: nginx:latest
    container_name: cart30_nginx
    ports:
      - "83:80"
    volumes:
      - .:/var/www/html
      - ./docker/nginx/conf:/etc/nginx/conf.d:rw
      - ./docker/nginx/log/:/var/log/nginx
      - /tmp:/tmp
    depends_on:
      - cart30_mysql
    networks:
      - cart30-net

  cart30_fpm:
    build: ./docker/php-fpm
    container_name: cart30_fpm
    ports:
      - "9000"
      - "80:80"
    volumes:
      - .:/var/www/html
      - ./docker/php-fpm/php.ini-production:/usr/local/etc/php/php.ini:rw
    depends_on:
      - cart30_mysql
    networks:
      - cart30-net

  cart30_mysql:
    build: ./docker/mysql
    cap_add:
      - SYS_NICE
    container_name: cart30_mysql
    ports:
      - "3306:3306"
    volumes:
      - ./docker/mysql/data:/var/lib/mysql:rw
      - ./docker/mysql/sql:/tmp/sql:rw
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=opencart
      - MYSQL_USER=root
      - MYSQL_PASSWORD=123456
    networks:
      - cart30-net

networks:
  cart30-net:

碼頭工人/mysql/Dockerfile

FROM mysql:5.7.32

RUN usermod -u 1000 mysql

docker/nginx/conf/server.conf

server {
    listen 80;
    listen [::]:80;
    root /var/www/html;
    index index.php index.html index.htm;
    server_name opencart30.loc;

    location / {
    try_files $uri $uri/ =404;
    }

    location ~ [^/]\.php(/|$) {
        fastcgi_pass cart30_fpm:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    error_log /var/log/nginx/project_error.log;
    access_log /var/log/nginx/project_access.log;
}

碼頭工人/php-fpm/Dockerfile

FROM php:7.4-fpm

RUN apt-get update && apt-get install -y \
curl \
wget \
unzip \
git \
libfreetype6-dev \
libjpeg62-turbo-dev \
libxslt-dev \
libicu-dev \
libmcrypt-dev \
libpng-dev \
zlib1g-dev \
libzip-dev \
libxml2-dev \
mediainfo \
libonig-dev \
libpq-dev \
graphviz \
mc \
sudo \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) gd \
&& docker-php-ext-install pdo_mysql \
&& docker-php-ext-install mysqli \
&& docker-php-ext-install zip \
&& docker-php-ext-install bcmath \
&& docker-php-ext-install sockets \
&& docker-php-source delete \
&& usermod -u 1000 www-data && groupmod -g 1000 www-data

RUN docker-php-ext-configure intl
RUN docker-php-ext-install intl
RUN docker-php-ext-install xsl
RUN docker-php-ext-install soap
RUN yes | pecl install xdebug-2.9.8

RUN chsh -s /bin/bash www-data

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer --version=1.10.19

ADD php.ini /usr/local/etc/php/conf.d/40-custom.ini
#RUN echo "www-data:root" | chpasswd $$ && adduser www-data sudo

WORKDIR /var/www/html
USER www-data

CMD ["php-fpm"]

碼頭工人/php-fpm/php.ini

memory_limit = 2G

always_populate_raw_post_data = -1

post_max_size=30M

upload_max_filesize=30M

cgi.fix_pathinfo = 1

fastcgi_split_path_info = 1

max_execution_time = 18000

flag session.auto_start = off

zlib.output_compression = on

suhosin.session.cryptua = off

display_errors = On

max_input_vars = 2000

zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_connect_back=0
xdebug.remote_handler=dbgp
xdebug.remote_autostart=1
xdebug.remote_port=9000
xdebug.idekey=PHPSTORM
xdebug.remote_host=172.17.0.1

確保您對包含 opencart 的文件夾具有正確的權限

chmod -R 777 /var/www/html

html下的opencart文件夾

/var/www/html/opencart

現在嘗試從瀏覽器運行 opencart。

這對我有用。

就我而言,$document_root 錯誤,因為 nginx 的文檔根目錄與 php-fpm 不同。

nginx的文件根目錄:\/usr\/share\/nginx\/html\/

php:8-fpm 的文檔根目錄:\/var\/www\/html

fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM