在Elastic Beanstalk / Docker Nginx / PHP-FPM实例中访问客户端IP

时间:2017-09-22 13:29:19

标签: docker nginx elastic-beanstalk

为了让我更容易部署和开发人员,我使用他们的Docker Container服务在Elastic Beanstalk实例上部署了我们的REST API。

除了获取连接到API的客户端IP以及我到目前为止尝试的所有尝试之外,所有工作都很有效,导致返回相同的Docker Container IP或HTTP 499错误消息。

Nginx配置

server {

    listen 80;

    server_name api.zecofrontend.local
    index index.php index.html;

    root /var/www/public;

    location / {
        try_files $uri /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        # fastcgi_param REMOTE_ADDR $http_x_real_ip;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

Docker Compose

version: '2'
services:
    web:
        image: nginx:latest
        ports:
            - "80:80"
        volumes:
            - ./src:/var/www
            - ./vhost.local.conf:/etc/nginx/conf.d/site.conf
        links:
            - app
        depends_on:
            - app
    app:
        image: php7.1-fpm-base
        volumes:
            - ./src:/var/www

运行上面的配置,返回一个172.18.0.1 IP地址,它是自己的docker容器/主机的IP地址。

我为本地和Elastic Beanstalk部署的实例配置了不同的配置,但唯一的区别与SSL证书有关。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

AWS ELB会自动为每个请求添加一些标头。查看http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/x-forwarded-headers.html#x-forwarded-for

上的文档

在您的情况下,您需要的是使用X-Forwarded-For,其中包含通过ELB访问网站的客户端的IP。