![Ubuntu 16.04 で Passenger を使用して Nginx で提供される Rails 4 アプリのコンテンツ リッピング ボットを排除する](https://rvso.com/image/756232/Ubuntu%2016.04%20%E3%81%A7%20Passenger%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%20Nginx%20%E3%81%A7%E6%8F%90%E4%BE%9B%E3%81%95%E3%82%8C%E3%82%8B%20Rails%204%20%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84%20%E3%83%AA%E3%83%83%E3%83%94%E3%83%B3%E3%82%B0%20%E3%83%9C%E3%83%83%E3%83%88%E3%82%92%E6%8E%92%E9%99%A4%E3%81%99%E3%82%8B.png)
私たちの Rails アプリは、IP アドレスを使用して荒らし行為を行っているボットからのリクエストで溢れています。すべてのリクエストで例外通知エラー メッセージが表示されます。
オリジナルの Nginx サーバー ブロック:
server {
server_name example.com www.example.com *.example.com;
passenger_enabled on;
rails_env production;
root /home/deploy/cm/public;
passenger_app_root /home/deploy/cm;
passenger_friendly_error_pages on;
index index.html index.htm;
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
if ($scheme != "https") {
return 301 https://$host$request_uri;
} # managed by Certbot
}
server {
if ($host = www.example.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = example.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name example.com www.example.com *.example.com;
return 404; # managed by Certbot
}
444.html ファイルをパブリック ディレクトリに配置し、これを Nginx サーバー ブロックの先頭に追加しました。
server {
listen 80;
server_name _;
return 444;
}
これにより、エラー メッセージの数に変化はありませんでした。エラー メッセージには次のものが含まれます。
* SERVER_PORT : 443
* SERVER_PROTOCOL : HTTP/1.1
* SERVER_SOFTWARE : nginx/1.18.0 Phusion_Passenger/6.0.6
誰かがドメイン名の代わりに IP アドレスを使用した場合に 444 を返すようにサーバー ブロックを変更するにはどうすればよいですか?
答え1
これを設定の先頭に置きます:
server {
listen 80 default_server;
return 444;
}