У меня есть машина aws, на которой запущено приложение laravel, и теперь я попытался установить консоль beanstalk. Вот как выглядит конфигурационный файл nginx приложения laravel:
include forge-conf/default/before/*;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name default;
root /home/forge/default/public;
# FORGE SSL (DO NOT REMOVE!)
# ssl_certificate;
# ssl_certificate_key;
ssl_protocols ..
ssl_ciphers ..
ssl_prefer_server_ciphers on;
ssl_dhparam ..
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.html index.htm index.php;
charset utf-8;
# FORGE CONFIG (DOT NOT REMOVE!)
include forge-conf/default/server/*;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
access_log off;
error_log /var/log/nginx/default-error.log error;
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
вот как выглядит конфигурационный файл nginx приложения beanstalk:
server {
listen 8080;
listen [::]:8080;
server_name beanstalk_server;
root /home/forge/beanstalk-console/public;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_log /var/log/nginx/default-error.log error;
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
когда я пытаюсь ударить server-ip:8080
, Я получаю сообщение об ошибке:
server-ip took too long to respond.
Я убедился, что это не вопрос разрешений, так как я обновил входящие правила для экземпляра aws следующим образом:
но все равно не повезло, я знаю, что это не проблема с самой консолью beanstalk, b / c, если я просто переключаю порты (т.е. если заставить консоль beanstalk слушать порт 80 вместо 8080, она работает нормально .. Я также попробовал другой порт, например 1515, но он все равно не работал) ..
также я знаю, что localhost: 8080 работает нормально, работает b / c
wget localhost:8080
возвращает html-сайт для beanstalk.
Следует иметь в виду, что моя машина aws также находится за балансировщиком нагрузки ... который пересылает http-запросы в балансировщик нагрузки на порт 80 на порт 80 машины ... но я не думаю, что это будет иметь какое-либо значение
что мне делать?
я проверил свой журнал доступа (tail -f /var/log/nginx/access.logtail -f /var/log/nginx/access.log
) и журналы ошибок ($ tail -f /var/log/nginx/error.log
) и ничего не нашел, когда попытался получить доступ к beanstalk
это результат моей команды netstat
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 11997/nginx -g daem
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 11997/nginx -g daem
tcp 0 0 10.0.17.158:80 10.0.1.251:19336 ESTABLISHED 11998/nginx: worker
tcp 0 0 10.0.17.158:80 10.0.17.87:62074 ESTABLISHED 11998/nginx: worker
tcp 0 0 10.0.17.158:80 10.0.17.101:59938 ESTABLISHED 11998/nginx: worker
tcp 0 0 10.0.17.158:80 10.0.17.101:60988 ESTABLISHED 11998/nginx: worker
tcp 0 0 10.0.17.158:80 10.0.1.21:63633 ESTABLISHED 11998/nginx: worker
tcp 0 0 10.0.17.158:80 10.0.1.21:62603 ESTABLISHED 11998/nginx: worker
tcp 0 0 10.0.17.158:80 10.0.17.87:63110 ESTABLISHED 11998/nginx: worker
tcp 0 0 10.0.17.158:80 10.0.1.251:20344 ESTABLISHED 11998/nginx: worker
tcp6 0 0 :::80 :::* LISTEN 11997/nginx -g daem
tcp6 0 0 :::8080 :::* LISTEN 11997/nginx -g daem
Кажется, порт 8080 не защищен файерволом .. см. команда:
netstat -ntlp | grep LISTEN
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:11300 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:587 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 11998/nginx: worker
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 11998/nginx: worker
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN -
tcp6 0 0 :::3306 :::* LISTEN -
tcp6 0 0 :::80 :::* LISTEN 11998/nginx: worker
tcp6 0 0 :::8080 :::* LISTEN 11998/nginx: worker
tcp6 0 0 :::22 :::* LISTEN -
tcp6 0 0 :::5432 :::* LISTEN -
Я также запустил nmap:
nmap 10.0.17.158
Starting Nmap 7.01 ( https://nmap.org ) at 2017-10-11 10:38 EEST
Nmap scan report for 10.0.17.158
Host is up (0.000068s latency).
Not shown: 995 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
3306/tcp open mysql
5432/tcp open postgresql
8080/tcp open http-proxy
Поскольку localhost: 8080 работает, запрос извне не достигает вашего сервера, который прослушивает этот порт 8080. Проверьте следующее.
Основываясь на ответе Шади, и после проверки того, что AWS действительно маршрутизирует порт 8080 на машину, проблема выяснилась. iptables
.
Я не уверен, как проверить, заблокирован ли порт или не использует iptables, но вот команда, которая разрешит порт 8080:
Это команда iptables, которая разрешает доступ к порту 8080 с уровня ОС:
sudo iptables -I INPUT 1 -i eth0 -p tcp --dport 8080 -j ACCEPT
(информацию о команде iptables см. в этом отличный пост, прямые кавычки отформатированы как таковые, а к остальному я добавил свои собственные пояснения):
-I INPUT 1: флаг -I сообщает iptables о необходимости вставить правило. Это отличается от флага -A, который добавляет правило в конец. Флаг -I принимает цепочку и позицию правила, в которую вы хотите вставить новое правило.
в данном случае мы добавляем это правило как самое первое правило цепочки INPUT. Это приведет к снижению остальных правил. Мы хотим, чтобы это было наверху, потому что это фундаментально, и на него не должны влиять последующие правила.
-i eth0: этот компонент правила соответствует, если интерфейс, который использует пакет, является интерфейсом "eth0" (ethernet).
-p tcp: это просто указание протокола tcp
- dport 8080: порт, о котором мы говорим
-j ACCEPT: указывает цель совпадающих пакетов. Здесь мы сообщаем iptables, что пакеты, соответствующие предыдущим критериям, должны быть приняты и пропущены.
Как уже упоминалось в приведенной выше ссылке, вы можете просто запустить следующее:
sudo iptables -S
это выведет много правил, в зависимости от вашей настройки. Чтобы прервать погоню, просто запустите эту команду
$ sudo iptables -S | grep "dport 8080"
-A INPUT -i eth0 -p tcp -m tcp --dport 8080 -j ACCEPT
так что оттуда вы можете сразу узнать, что происходит с портом 8080
Просто используйте iptables-persistent
пакет:
sudo apt-get update
sudo apt-get install iptables-persistent
Он сохранит правила iptables при новой установке, подробности см. По ссылке выше.