为了让我更容易部署和开发人员,我使用他们的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证书有关。
有什么建议吗?
答案 0 :(得分:0)
AWS ELB会自动为每个请求添加一些标头。查看http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/x-forwarded-headers.html#x-forwarded-for
上的文档在您的情况下,您需要的是使用X-Forwarded-For,其中包含通过ELB访问网站的客户端的IP。