У меня есть задача с двумя контейнерами на fargate: один java и один php / nginx.
Контейнер java отображает свой внутренний порт 80 на внешний порт 8080 и Контейнер php сопоставляет свой внутренний порт 80 с внешним портом 8081.
Задача использует сетевой режим awsvp c. Согласно документации aws , они должны иметь возможность общаться друг с другом через локальный хост, как только они окажутся в дальней сети.
Я пытался проверить это, когда контейнер Java отправляет запрос в контейнер PHP, используя "localhost: 8081":
public boolean isPHPReachable() {
System.out.println("Attempting to make request to PHP");
try {
final URL url = new URL("http://localhost:8081/test");
final HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
final int status = con.getResponseCode();
System.out.printf("Get request to PHP resulted in a %d: %s", status, con.getResponseMessage());
return status == 200;
} catch (final IOException err) {
err.printStackTrace();
return false;
}
Код php должен быть удар такой:
<?php
if ($_GET['q'] === 'test') {
echo('healthy');
die;
}
'q' устанавливается nginx (см. конфигурацию ниже).
Тем не менее, я вижу, что журналы cloudwatch показывают ошибку, когда Java пытается отправить PHP запрос:
22:55:04
Attempting to make request to PHP
22:55:04
java.net.ConnectException: Connection refused (Connection refused)
Я пытался связаться с контейнером PHP напрямую, но у меня истекло время ожидания. Это не происходит, когда я пытаюсь достичь Java.
Потенциальная проблема 1: Nginx неправильно настроен
Я подозреваю, что это может быть проблема nginx , Тем не менее, я не могу воспроизвести проблему, когда я создаю контейнер PHP на моем локальном компьютере - это доступно, когда я пингую localhost: 8081.
Проблема возникает только в Fargate.
Вот моя конфигурация:
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
# Reject requests not matching any server block
listen 80 default_server;
server_name "";
return 410;
}
server {
listen 80;
root /var/www/public_html;
server_name localhost;
index index.php;
set_real_ip_from 0.0.0.0/0; # we trust that the webserver is firewalled
real_ip_header X-Forwarded-For;
set $webroot $document_root;
error_page 404 410 /404_empty.html;
autoindex off;
# Disable server signature
# (i.e. remove "nginx 1.10" or similar from error pages and response headers)
server_tokens off;
#################
# PHP locations #
#################
location / {
rewrite ^/(.*)$ /sites/all/index.php?q=$1;
error_page 404 /sites/all/index.php;
}
}
2. Неверно настроенные группы безопасности:
Я не верю, что это так. Группа безопасности, прикрепленная к этому контейнеру, разрешает входящие TCP-запросы на любой порт из любого пункта назначения. Он также разрешает все исходящие запросы.
Кто-нибудь обнаружил немедленную проблему? Любые советы по отладке?