【AB】自分用メモ

## 環境準備

(a) 必要なパッケージのインストール
```shell
sudo yum update -y
sudo yum install -y nginx curl
```
(b) nginxの起動と自動起動設定
```shell
sudo systemctl start nginx
sudo systemctl enable nginx
```
(c) nginxのステータス確認
```shell
sudo systemctl status nginx
```

 ## nginx設定

(a) 設定ファイルの編集
```shell:/etc/nginx/conf.d/my_website.conf
server {
    listen 80;
    server_name my-test-site.local;

    location / {
        root /usr/share/nginx/html;
        index index.html;
    }

    location /api/data {
        default_type application/json;
        add_header Cache-Control "no-store";
        return 200 '{"message": "Hello, world!"}';
    }

    location /dummy.txt {
        root /usr/share/nginx/html;
        add_header Cache-Control "no-store";
    }

    location /main.js {
        root /usr/share/nginx/html;
        add_header Cache-Control "no-store";
    }
}
```
(b) 設定反映と確認
```shell
sudo nginx -t
sudo systemctl reload nginx
```
## テスト用ファイルの作成

(a) index.html
```html:/usr/share/nginx/html/index.html
<!DOCTYPE html>
<html>
<head>
    <title>Realistic Test Page</title>
    <style>
        body { font-family: Arial, sans-serif; }
        pre { width: 100%; max-width: 600px; white-space: pre-wrap; word-wrap: break-word; }
    </style>
</head>
<body>
    <h1>Welcome to the realistic test page</h1>
    <pre id="dummy-text">Loading...</pre>
    <p>This is a realistic test page with dummy text loading and API calls.</p>
    
    <!-- JavaScriptファイルの読み込み -->
    <script src="main.js"></script>
    
    <p id="api-response">Loading API data...</p>
</body>
</html>
```
(b) main.js
```js:/usr/share/nginx/html
// main.js

// APIデータの取得
async function fetchData() {
    try {
        const response = await fetch("/api/data");
        const data = await response.json();
        console.log(data);
        document.getElementById("api-response").innerText = JSON.stringify(data);
    } catch (error) {
        console.error("API Error:", error);
    }
}

// ダミーテキストの取得
async function fetchDummyText() {
    try {
        const response = await fetch("/dummy.txt");
        const text = await response.text();
        document.getElementById("dummy-text").innerText = text.substring(0, 1000);
    } catch (error) {
        console.error("Dummy Text Error:", error);
    }
}

// 初期化
fetchData();
fetchDummyText();
```
(c) dummy.txt (500KB)
```shell:/usr/share/nginx/html
sudo bash -c 'base64 /dev/urandom | head -c 500000 > /usr/share/nginx/html/dummy.txt'
```

(d) 確認
```shell:bash
1. サーバーのステータス確認
curl -I http://my-test-site.local/

2. APIレスポンスの確認
curl http://my-test-site.local/api/data

3. ダミーテキストの先頭100バイト確認
curl -s http://my-test-site.local/dummy.txt | head -c 100
または
curl -r 0-99 http://my-test-site.local/dummy.txt

4. 全ページのソースコード確認
curl http://my-test-site.local/index.html

5. レスポンスヘッダーの確認
curl -I http://my-test-site.local/index.html

6. エラーログの確認
sudo tail -n 20 /var/log/nginx/error.log

7. ポート確認 (nginxの稼働確認)
sudo netstat -tulnp | grep 80
💡 補足
/etc/hostsに以下を追加していること:
127.0.0.1 my-test-site.local
nginx.confまたはmy_website.confにキャッシュ無効化が設定されていること:

location /dummy.txt {
    root /usr/share/nginx/html;
    add_header Cache-Control "no-store";
}
```





## WAF設定

リクエスト制限: 2リクエスト/秒
期間: 1秒
アクション期間: 1秒