docker - Docker nginx 上的 Symfony 2.6 给出 404
问题描述
目前正在使用构建的遗留应用程序Symfony 2.6
(最初,该应用程序在 dev 和 prod 上都在 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
附加说明:
- 我
Docker
使用 . 添加到另一个遗留项目Symfony 2.8
,它正在工作。 - 使用与此问题中提到的相同的设置。
很感谢任何形式的帮助。
谢谢你。
解决方案
我对 nginx 配置不太熟悉,但我认为 root /var/www/html/public 对于旧的 symfony 来说看起来很奇怪,应该有 web 而不是 public
推荐阅读
- python - 在预期的 Flask 窗口中绘图
- c - C Windows API 使用 SetWindowsHookEx() 等待鼠标或键盘输入
- javascript - 根据属性名称将对象值添加到分数
- python - 比较两个单行 PySpark 数据帧并修改它们?
- flutter - Flutter 中的可滚动导航栏
- c++ - C++ Singleton 没有为此文档加载任何符号
- sql - 如何获取 SQLite3 中的行索引?
- oracle - 而不是使用 Oracle 序列触发
- html - 如何使用 HTML / CSS / JavaScript 完成这些类型的圆形按钮?
- ruby-on-rails - Rails 6 - 参数未传递以插入数据库