laravelアプリの両方を実行しているawsマシンを入手し、インストールしようとしました beanstalk console 。これは、laravelアプリのnginx構成ファイルは次のようになります。
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;
}
}
これは、beanstalkアプリのnginx構成ファイルがどのように見えるかです。
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コンソールが8080ではなくポート80をリッスンする場合、問題なく動作します。 1515のような別のポートを試しましたが、それでも動作しませんでした。
また、localhost:8080が正常に機能し、b/cが実行されていることも知っています。
wget localhost:8080
beanstalkのHTMLサイトを返します。
覚えておくべきことの1つは、私の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
Shadiの回答に基づいて、AWSが実際に8080ポートをマシンにルーティングしていることを確認した後、問題はiptables
から判明しました。
ポートがブロックされているか、iptablesを使用していないかを確認する方法はわかりませんが、ポート8080を許可するコマンドは次のとおりです。
これは、OSレベルからポート8080へのアクセスを許可するiptablesコマンドです。
Sudo iptables -I INPUT 1 -i eth0 -p tcp --dport 8080 -j ACCEPT
(iptablesコマンドの参照については、この excellent post を参照してください。直接引用符はそのようにフォーマットされており、残りにも独自の説明を追加しました):
-I入力1:-Iフラグは、iptablesにルールを挿入するように指示します。これは、最後にルールを追加する-Aフラグとは異なります。 -Iフラグは、チェーンと、新しいルールを挿入するルールの位置をとります。
この場合、このルールをINPUTチェーンの最初のルールとして追加します。これにより、残りのルールが押し下げられます。これは基本的なものであり、後続のルールの影響を受けないため、これを最上位に配置します。
-i eth0:パケットが使用しているインターフェースが「eth0」インターフェース(イーサネット)である場合、ルールのこのコンポーネントは一致します。
-p tcp:これは単にtcpプロトコルを指定するだけです
-dport 8080:私たちが話しているポート
-j ACCEPT:これは一致するパケットのターゲットを指定します。ここでは、前述の基準に一致するパケットを受け入れて許可する必要があることをiptablesに通知します。
上記のリンクでも述べたように、次のコマンドを実行するだけです。
Sudo iptables -S
これは、設定に応じて、ルールのlotを出力します。追跡を切り抜けるには、このコマンドを実行するだけです
$ 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ルールが保持されます。詳細については、上記のリンクを参照してください
Localhost:8080が機能するため、外部からのリクエストは、そのポート8080でリッスンしているサーバーに到達しません。以下を確認してください