【问题标题】:Symfony 2.6 on Docker nginx giving 404Docker nginx 上的 Symfony 2.6 给出 404
【发布时间】:2019-10-04 14:37:05
【问题描述】:

目前正在开发使用Symfony 2.6 构建的旧版应用程序(最初,该应用程序在开发和生产的 Centos7 上运行,但由于时间限制,我只需使其在本地运行,以便我可以继续使用功能请求)。

我将Docker 添加到项目中,因为我在管理本地计算机上的依赖项时遇到问题。

设置:

  • ubuntu 18.04
  • nginx
  • 码头工人 19.03

我目前的问题是: - 我在所有路线上都收到404。 - 我可以看到来自docker logs <container> -f 的日志(更新:这是 apache 日志)

日志:

192.168.176.1 - - [01/Oct/2019:14:56:17 +0000] "GET /user HTTP/1.1" 404 209 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"
192.168.176.1 - - [01/Oct/2019:14:57:51 +0000] "GET /user HTTP/1.1" 404 209 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"
192.168.176.1 - - [02/Oct/2019:05:31:59 +0000] "GET /user HTTP/1.1" 404 209 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"
//truncated

这是文件夹结构:

|app
|bin
|docker
    |app
        default
        Dockerfile
        php-fpm.conf
        start-container.sh
        supervisord.conf
|src
|vendor
|web
    app.php
    app_dev.php
    .htaccess
    //some other stuff
.env
.gitignore
composer.json
composer.lock
docker-compose.yml

这是./web/.htaccess

DirectoryIndex app.php

<IfModule mod_rewrite.c>
    RewriteEngine On

RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
    RewriteRule ^(.*) - [E=BASE:%1]

    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^app\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule .? - [L]

    RewriteRule .? %{ENV:BASE}/app.php [L]
</IfModule>

<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>
        RedirectMatch 302 ^/$ /app.php/
    </IfModule>
</IfModule>

这是./docker/app/default

server {
    listen 80 default_server;

    root /var/www/html/public;

    index index.html index.htm index.php;

    server_name _;

    charset utf-8;

    location = /favicon.ico { log_not_found off; access_log off; }
    location = /robots.txt  { log_not_found off; access_log off; }

    location / {
        try_files $uri $uri/ /app.php$is_args$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.1-fpm.sock;
    }

    error_page 404 /app.php;
}

这是./docker/app/Dockerfile

FROM ubuntu:18.04

LABEL maintainer="My name"

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update \
    && apt-get install -y gnupg tzdata \
    && echo "Asia/Dubai" > /etc/timezone \
    && dpkg-reconfigure -f noninteractive tzdata \
    && apt-get install -y software-properties-common \
    && add-apt-repository -y ppa:ondrej/php

RUN apt-get update \
    && apt-get install -y curl zip unzip git supervisor sqlite3 make \
       nginx php7.1-fpm php7.1-cli \
       php7.1-pgsql php7.1-sqlite3 php7.1-gd \
       php7.1-curl php7.1-memcached \
       php7.1-imap php7.1-mysql php7.1-mbstring \
       php7.1-xml php7.1-zip php7.1-bcmath php7.1-soap \
       php7.1-intl php7.1-readline php7.1-xdebug \
       php-msgpack php-igbinary \
    && php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer \
    && mkdir /run/php \
    && apt-get -y autoremove \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/\* /tmp/\* /var/tmp/\* \    //had to escape the * as it was commenting out the code in stackoverflow editor
    && echo "daemon off;" >> /etc/nginx/nginx.conf

RUN ln -sf /dev/stdout /var/log/nginx/access.log \
    && ln -sf /dev/stderr /var/log/nginx/error.log

ADD default /etc/nginx/sites-available/default
ADD supervisord.conf /etc/supervisor/conf.d/supervisord.conf
ADD php-fpm.conf /etc/php/7.1/fpm/php-fpm.conf
ADD start-container.sh /usr/bin/start-container
RUN chmod +x /usr/bin/start-container

ENTRYPOINT ["start-container"]

这是./docker-compose.yml

version: '3'
services:
  app:
    build: ./docker/app
    image: 'be/app:latest'
    networks:
      - appnet
    volumes:
      - './:/var/www/html:cached'
    ports:
      - '${APP_PORT}:80'
    working_dir: /var/www/html
  cache:
    image: 'redis:alpine'
    networks:
      - appnet
    volumes:
      - 'cachedata:/data'
  db:
    image: 'mysql:5.7'
    environment:
      MYSQL_ROOT_PASSWORD: '${DB_ROOT_PASSWORD}'
      MYSQL_DATABASE: '${DB_DATABASE}'
      MYSQL_USER: '${DB_USER}'
      MYSQL_PASSWORD: '${DB_PASSWORD}'
    ports:
      - '${DB_PORT}:3306'
    networks:
      - appnet
    volumes:
      - 'dbdata:/var/lib/mysql'
networks:
  appnet:
    driver: bridge
volumes:
  dbdata:
    driver: local
  cachedata:
    driver: local

补充说明:

  • 我使用Symfony 2.8Docker 添加到另一个遗留项目中,它正在工作。
  • 使用与本问题中提到的相同设置。

非常感谢任何帮助。

谢谢。

【问题讨论】:

  • 这听起来像是服务器故障问题

标签: docker symfony ubuntu nginx


【解决方案1】:

我对 nginx 配置不太熟悉,但我认为 root /var/www/html/public 对于旧的 symfony 来说看起来很奇怪,应该有 web 而不是 public

【讨论】:

  • 是的,实际上这就是问题所在。我更新了默认设置,它正在部分工作。 localhost:8090/login = 工作 localhost:8090 = 403 谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-28
  • 1970-01-01
  • 2021-09-26
  • 2018-07-25
  • 2018-11-26
  • 1970-01-01
相关资源
最近更新 更多