在生产环境中部署使用docker构建的laravel时找不到404

时间:2019-06-19 11:00:40

标签: docker nginx

访问指定的URL时,出现

404错误。 我在生产环境中部署了使用docker构建的laravel。 我已经确认它可以在本地运行,我认为URL的规范很奇怪。 URL在本地使用localhost,在生产环境中使用获取的域。

.env

APP_NAME=Laravel
APP_ENV=production
APP_DEBUG=false
APP_KEY=<<APP_KEY>>
APP_URL=<<my_domain>>

LOG_CHANNEL=stack

docker-compose.yml

version: '3'
services:
  php:
    container_name: php
    build: ./docker/php
    volumes:
      - ./server:/var/www

  nginx:
    image: nginx
    container_name: nginx
    ports:
      - 81:81
    volumes:
      - ./server:/var/www
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php

  db:
    image: mysql:5.7
    container_name: db-host
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: database
      MYSQL_USER: test
      MYSQL_PASSWORD: test
      TZ: 'Asia/Tokyo'
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    volumes:
      - ./docker/db/data:/var/lib/mysql
      - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
      - ./docker/db/sql:/docker-entrypoint-initdb.d
    ports:
      - 3307:3307

default.conf

 server {
      listen 81;
        index index.php index.html;
        root /var/www/laravel/public;

        location / {
        root /var/www/laravel/public;
        index  index.html index.php;
        try_files $uri $uri/ /index.php$query_string;
        }

docker ps

CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                                         NAMES
A        nginx                "nginx -g 'daemon of…"   3 hours ago         Up About an hour    80/tcp, 0.0.0.0:81->81/tcp                    nginx
B        mysql:5.7            "docker-entrypoint.s…"   3 hours ago         Up 2 hours          3306/tcp, 33060/tcp, 0.0.0.0:3307->3307/tcp   db-host
C        tsurikatsu_web_php   "docker-php-entrypoi…"   4 hours ago         Up 2 hours          9000/tcp                                      php

我希望显示laravel项目,但实际输出是404错误

请帮助我。

1 个答案:

答案 0 :(得分:0)

根据我在docker-compose.yml文件中看到的内容,您正在将服务器81端口映射到nginx容器81端口,这意味着除非通过端口转发流量,否则您必须通过指定端口81来访问站点。 80到localhost:81。

如果您不对vultr服务器使用任何代理转发,并且端口80没有保留任何内容,那么我建议您尝试用Stream::filter替换nginx服务中的端口映射

如果这不是一个选择(某些东西已经使用了服务器上的端口80),那么无论何时请求特定的主机名,都应该将流量从端口80转发到端口81。