nginx索引指令在本地工作正常,但在ec2上给出404

时间:2017-08-12 20:00:22

标签: docker nginx amazon-ec2 docker-compose

我有一个我想使用docker-compose和nginx部署的Web项目。

在当地,我:

docker-compose build
docker-compose push

如果我docker-compose up,我可以访问localhost/并重定向到我的index.html

现在我的ec2实例(我安装了docker和docker-compose的常规ec2实例)我docker-compose pull,然后是docker-compose up。
所有容器都正确启动,我可以exec sh进入我的nginx容器,看到有一个/facebook/index.html文件。

  • 如果我转到[instance_ip]/index.html,一切都会按预期进行。
  • 如果我转到[instance_ip]/,我会收到404响应 nginx收到请求(我在访问日志中看到它)但没有重定向到index.html

为什么index指令无法重定向到我的index.html文件?

我试图:

  • 通过删除所有本地图像并从我的注册表中删除来在本地重现。
  • 杀死我的ec2实例并启动一个新实例。

但我得到的结果相同。
我正在使用docker-compose 1.11.1和docker 17.05.0。在ec2实例上它是docker 17.03.1并且我尝试了docker-compose 1.11.1和1.14.1(签名我有点绝望;))。

我的docker-compose文件中的摘录:

nginx:
    image: [image from registry]
    build:
      context: ./
      dockerfile: deploy/nginx.dockerfile
    ports:
        - "80:80"
    depends_on:
      - web

我的nginx图片从alpine开始,安装nginx,添加index.html文件并将我的conf文件复制到/etc/nginx/nginx.conf

这是我的nginx配置。我检查它是否存在于正在运行的容器上(本地和ec2上)。

# prevent from exiting when using `run` to launch container
daemon off;
worker_processes auto;
#
pid /run/nginx.pid;

events {
    worker_connections 768;
    # multi_accept on;
}

http {

    ##
    # Basic Settings

    sendfile off;
    types_hash_max_size 2048;


    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # SSL Settings
    ##

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;
    gzip_disable "msie6";

    server {
        error_log /var/log/nginx/file.log debug;

        listen          80 default_server;

        # root            /home/domain.com;

        # Bad developers use underscore in headers.
        underscores_in_headers on;

        # root should be out of location block
        root /facebook;
        location / {
            index index.html;
            # autoindex on;
            try_files $uri @app;
        }

        location @app {
            include uwsgi_params;
            # Using docker-compose linking, the nginx docker-compose service depends on a 'web' service.
            uwsgi_pass web:3033;
        }

    }
}

我不知道为什么容器在ec2实例上的行为不同。

任何指示赞赏!

0 个答案:

没有答案