# マークダウン練習 # h1 ## h2 ### h3 #### h4 - 1 - 2 - 3 - 4 - 5 # 課題 - なし -  -  -  -  # 数字 1. ichi 2. ni 3. san 4. shi 6. shi 7. go 8. roku リンク [Yahoo!](https://yahoo.com/) 画像 ![オープンキャンパス](https://poverty-prevent ion.or.jp/_nuxt/logo.DIk4RSHf.png) シビックテックさいたま --- ここにテキストを打つ ## 課題 - 箇条書き - 箇条書き ---- ## 自己紹介 - なまえ(名字) - 作ってみたいアプリ --- - 太田 - 熊谷市のオープンデータが一覧できるアプリ --- 10/07 https://jamboard.google.com/d/1L1crOPJVIcRqsPpadweg1LhWW1SYdL-7q_4AgKVjC78/viewer?f=0   - アイデアシート https://docs.google.com/presentation/d/1RmZ-X6r15Tovp9u667rP6fEr5TZx3c7CUxxtmnTsHJE/edit#slide=id.g15d33d011b0_0_0 ### シェルスクリプトだけでWebサーバーを構築する方法は以下の通りです: 1. 基本的なHTTPサーバーの立ち上げ: ```bash while true; do nc -l 4000 -w 1 | ( read request echo -e "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<h1>Hello, World</h1>" ) done ``` このスクリプトは4000番ポートでリクエストを待ち受け、シンプルなHTMLレスポンスを返します[2]。 2. 静的ファイルの提供: ```bash #!/bin/bash while true; do nc -l 4000 | ( read request file_path=$(echo "$request" | cut -d' ' -f2) file="static${file_path}" if [ -f "$file" ]; then echo -e "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n" cat "$file" else echo -e "HTTP/1.1 404 Not Found\r\nContent-Type: text/html\r\n\r\n404 Not Found" fi ) done ``` このスクリプトは`static`ディレクトリ内のHTMLファイルを提供します。存在しないファイルへのリクエストには404エラーを返します[2]。 3. リクエストの解析とルーティング: より複雑なリクエスト処理を行うには、リクエストヘッダーを解析し、適切なレスポンスを生成するロジックを追加します。 4. セキュリティ考慮事項: - ポート番号を80や443に変更する場合は、root権限が必要です。 - 本番環境では、適切なエラーハンドリングとセキュリティ対策を実装してください。 5. パフォーマンスの最適化: - バックグラウンドプロセスを使用して複数のリクエストを同時に処理できます。 - キャッシュメカニズムを実装して、頻繁にアクセスされるコンテンツの応答時間を改善できます。 このアプローチは教育目的や小規模なプロジェクトには適していますが、本番環境では既存のWebサーバーソフトウェア(Apache、Nginxなど)の使用をお勧めします[1][3]。これらのソフトウェアは、セキュリティ、パフォーマンス、スケーラビリティの面で優れており、多くの機能を提供します。 Citations: [1] https://www.seplus.jp/dokushuzemi/blog/2021/01/automatic_build_with_shellscript.html [2] https://qiita.com/wf-yamaday/items/f890f3523eeacbe71153 [3] https://www.seplus.jp/dokushuzemi/secollege/%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%AB%E3%82%88%E3%82%8Bweb%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E8%87%AA%E5%8B%95%E6%A7%8B%E7%AF%89%E5%85%A5%E9%96%80.html [4] https://www.youtube.com/watch?v=4W579Lqn-ew [5] https://qiita.com/picker/items/0466c55f9a03ebb0bd90 [6] https://zenn.dev/togetine/articles/6c9db2db7a9dd9 [7] https://www.fabshop.jp/webserver-apache/ [8] https://deviceplus.jp/raspberrypi/how-to-build-web-server-with-raspberry-pi/