【发布时间】:2018-03-04 02:35:36
【问题描述】:
为了让我之后的部署和开发人员更容易,我使用他们的 Docker 容器服务在 Elastic Beanstalk 实例上部署了我们的 REST API。
除了获取连接到 API 的客户端 IP 以及我迄今为止尝试的所有尝试都导致返回相同的 Docker 容器 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 编写
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 证书有关。
有什么建议吗?
【问题讨论】:
-
你在你的 nginx http 部分缺少两个指令
real_ip_header X-Forwarded-For;和set_real_ip_from 0.0.0.0/0;,基本上你需要告诉 nginx 如何获取那个真实的 ip。我使用过0.0.0.0/0,但曾经可以使用发送请求的LB的IP
标签: docker nginx amazon-elastic-beanstalk