質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

Q&A

解決済

2回答

6373閲覧

go言語のアプリケーションのweb公開に関して

rrh

総合スコア15

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

0グッド

0クリップ

投稿2018/12/23 08:50

編集2018/12/23 10:28

go言語で書いた簡単なアプリをwebサーバを使って公開したい

go言語で書いた簡素なアプリをさくらVPSを使って公開しようとしているのですが、詰まってしまったので質問させていただきます。

net/httpモジュールを使用して、

http.ListenAndServe(":8080", nil)

のようにして8080ポートに対するリクエストを捌いてレスポンスを返すプログラムを作成しました。
htmlはServeHTTP関数の中でテンプレートを生成する形にしてあります。

main関数

func main() { var addr = flag.String("addr", ":8080", "アプリケーションのアドレス") flag.Parse() //フラグの解釈 r := newRoom() //ルート http.Handle("/", &templateHandler{filename: "chat.html"}) http.Handle("/room", r) //チャットルーム開始 go r.run() //WEbサーバ開始 log.Println("Webサーバを開始します。 ポート : ", *addr) if err := http.ListenAndServe(*addr, nil); err != nil { log.Fatal("ListenAndServe:", err) } }

試したこと

アプリをローカルでgo run したのちにブラウザ上でhttp://IPアドレス:8080を叩くと正常にテンプレートが表示され、アプリが動作しました。

このビルド済みの実行ファイルをサーバの/var/www/cgi-bin/ 下に置き、httpd.confでcgi設定をした後に http://サーバIPアドレス/cgi-bin/実行ファイル を叩くと Internal Server Error となります。

当方goでのアプリ作成もapacheを使用するのも初めてで、どこが原因でこけているのか見当がいまいちつきません。

net/httpモジュールを使ったgoアプリをapacheで公開した方などがいれば、お力を貸して頂きたいと思っています。

わかりにくい点等は聞いてくださって構いません。
よろしくお願いします。

エラー詳細

httpdのerror_logを見ると

[Sun Dec 23 19:15:10.804514 2018] [cgi:error] [pid 26719] [client 27.139.124.76:53028] AH01215: 2018/12/23 19:15:10 Web\xe3\x82\xb5\xe3\x83\xbc\xe3\x83\x90\xe3\x82\x92\xe9\x96\x8b\xe5\xa7\x8b\xe3\x81\x97\xe3\x81\xbe\xe3\x81\x99\xe3\x80\x82 \xe3\x83\x9d\xe3\x83\xbc\xe3\x83\x88 : :8080 [Sun Dec 23 19:15:15.816465 2018] [cgi:error] [pid 26708] [client 27.139.124.76:53029] AH01215: 2018/12/23 19:15:15 Web\xe3\x82\xb5\xe3\x83\xbc\xe3\x83\x90\xe3\x82\x92\xe9\x96\x8b\xe5\xa7\x8b\xe3\x81\x97\xe3\x81\xbe\xe3\x81\x99\xe3\x80\x82 \xe3\x83\x9d\xe3\x83\xbc\xe3\x83\x88 : :8080 [Sun Dec 23 19:15:15.816550 2018] [cgi:error] [pid 26708] [client 27.139.124.76:53029] AH01215: 2018/12/23 19:15:15 ListenAndServe:listen tcp :8080: bind: address already in use [Sun Dec 23 19:15:15.816715 2018] [cgi:error] [pid 26708] [client 27.139.124.76:53029] End of script output before headers: chat.cgi

のようになっております。
8080番ポートの「address already in use」エラーに関しては、lsof -i:8080 で8080番が空いていることを確認後にURLを叩いても出てくる状況です。

またURL叩いて一定時間経過後に

[Sun Dec 23 19:17:10.861682 2018] [cgi:warn] [pid 26719] [client 27.139.124.76:53028] AH01220: Timeout waiting for output from CGI script /var/www/cgi-bin/chat.cgi

というエラーが新たに追加されます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2018/12/23 09:10

Webサーバーのエラーログにメッセージが記録されていると思いますので、記録されているメッセージを質問を編集して追記していただけないでしょうか?
rrh

2018/12/23 10:19

エラー詳細の箇所に追記させて頂きました。 拙い説明で恐縮ですがよろしくお願いします。
rrh

2018/12/23 10:20

chat.cgiという名前のファイルがgoアプリのビルド後のファイルです。
guest

回答2

0

ありがとうございます。
まずはサーバソフトウェアなしで動作確認をしてからapacheを使ってみようと思います。

投稿2018/12/24 07:41

rrh

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Goの中で「Webサーバを開始」と書いてるようにGoで作ったそのアプリ自体がWebサーバーとして動いてる。
この辺りの概念は中々理解できない人が多い。

最初はApacheはいらないので
VPS上でGoアプリを起動して
http://VPSのIP:8080/で表示できるか確認するところから。

投稿2018/12/23 11:33

kawax

総合スコア10377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rrh

2018/12/24 07:34

ありがとうございます。 まずはサーバソフトウェアなしで動作確認をしてからapacheを使ってみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問