日記帳
本ページはプロモーションが含まれています
カテゴリー
Links
blog(ブログ)マスター
アンドロイドの巣
ゼロから始めるベランダ菜園
タイトル
2024年11月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

タイトル

執筆:2024.08.07
編集:2024.08.07


[apache 2.x]

cgiスクリプト

通常 .cgiの1行目は絶対パス指定のため、違うOSに移動すると書き換えないと動作しません。

そのまま書き換えずにWindowsで .cgi を実行してくれるのが
ExecCGI windows

.cgiのアクションをこのアプリに書き換えてハンドラーを交換するだけで、OK。
apache設定に3行追加してapache再起動するだけ!とっても簡単!!

.Netで書いていましたが AIに指示書を書いて rustに書き換えてみました。
rust言語知らないのにできてしまいました!!
アイデアをAIにいい感じに指示するといい感じにコード作ってくれます。

少し手直ししましたがだいたいいい感じですね。
進歩しましたね。 .Net版は苦労して作ったのに・・・・。

レスポンス速度はどちらも同じくらいなのですが
実行サイズが大きくなってしまいましたね

機能は減ってしまいましたが、しばらく新しいほうを利用しようと思います!
2024.08.07

タイトル

執筆:2024.08.07
編集:2024.08.07


スクリプト言語で書くのが定番なんでしょうが、
バイナリスクリプトなら1個や数個で済むようなことが
スクリプト言語のフレームワーク使うと数千から数万個のファイルになるので嫌なんですね。

rustはCGIライブラリが貧弱で切り替え無理と判断しました。
CGIで運用するにはCGI全盛期に存在した言語でないと無理のようです。(1からごろごりかくならできますけどね)
Go言語は切り替えできるのとGoはrustより格段にコードが読みやすいのでGoで書いたほうがバグがなくメンテナンスしやすいように思います。

いくつかフレームワークのソースを確認しましたが
Ginは、動作できることをローカルサーバーで確認しました
他のフレームワークはできそうもない。

Gin でCGIするには?

本番運用はしていないので、非公式方法なのでなんらかの不具合がでるかもですが・・・、
その時は、素の http.cgi使うしかないですね。

DebugモードだとGinが余計な情報を出すので、インターナルサーバーエラーになる

対策
  リリースモードフラグを立てておく。
 デバッグは、CGIではなくセルフサーバーモード(デフォルト)で行う

gin.SetMode(gin.ReleaseMode) // リリースモードに設定



CGI環境かどうかを判定するには

対策
 CGI環境かどうかをCGI環境変数の有無で判定してコードを切り替える
 独自の判定ルールを追加する。本番でCGIで実行したいのにセルフサーバーモード(デフォルト)になると困りますからね。

CGI環境変数は規格で決まっています。なので判定は簡単です。仕様書に記載の変数を全部定義されているのかを確認するのが確実ですが
代表的なものだけでたいていは問題ないかと思います。

func main() {
// CGI環境変数が設定されているかで分岐する
if strings.HasPrefix(strings.ToUpper(os.Getenv("GATEWAY_INTERFACE")), "CGI/") {
// main_cgi() // 標準機能
main_cgi_gin() // 外部ライブラリ
} else {
// command line
if os.Getenv("REQUEST_METHOD") == "" {
main_serve_gin() // 外部ライブラリ
}
}
}



» 続きを読む

2024.08.07

タイトル

執筆:2024.04.20
編集:2024.04.20


自己証明書を作成するコマンド

openssl req -newkey rsa:4096 \
-x509 \
-sha256 \
-days 365 \
-nodes \
-out server.crt \
-keyout server.key \
-subj "/C=JP/CN=localhost" \
-addext "subjectAltName = DNS:localhost,DNS:*.internal,IP:192.168.1.1,IP:192.168.1.2"

太字を変更すればそのまま使えると思います。
IPアドレスは範囲指定はできないので一個ずつ指定します。
大量に指定する場合は、スクリプト等でテキスト形式で事前に準備したほうがいいと思います

細かい調整が必要な場合は、-subj に追加します.
/O=組織名

IPLIST=$(for i in {0..29}; do echo -n "IP:192.168.1.$i,"; done | sed 's/,$//')
IPLIST=$IPLIST,$(for i in {1..1}; do echo -n "IP:127.0.0.$i,"; done | sed 's/,$//')
#IPLIST=$IPLIST,IP:[::1]
...

#EXPIREDATE=2099-12-31
EXPIREDATE=$(date -d "1 years - 1days" '+%Y-%m-%d')
 PARAM_DAYS=$(( ( $(date -d $EXPIREDATE +%s) - $(date +%s) ) / 86400 +1 ))
#PARAM_DAYS=365

openssl req -newkey rsa:4096 \
-x509 \
-sha256 \
-days $PARAM_DAYS \
-nodes \
-out server.crt \
-keyout server.key \
-subj "/C=JP/O=組織名/CN=localhost" \
-addext "subjectAltName = DNS:localhost,DNS:*.internal,$IPLIST"

» 続きを読む

2024.04.20

タイトル

執筆:2024.03.03
編集:2024.03.03


LD_LIBRARY_PATH を .htaccess で 変更する方法

*.so.*がないとかエラーが出る場合は、LD_LIBRARY_PATH設定が正しくないかそのファイル自体がありません。

管理権限を持つ場合

http.confに以下を加える
AllowOverride FileInfo
# (参考) PassEnv LD_LIBRARY_PATH

.htaccessに以下を加える
SetEnv LD_LIBRARY_PATH "/usr/lib:/usr/local/lib:設定したいパスを追加する"
または
SetEnv LD_LIBRARY_PATH "設定したいパス:/usr/lib:/usr/local/lib"

管理権限がない場合

共有サーバーでは、上記の設定が許可されていないため次の方法で回避できる。
ただし、設定を間違うとセキュリティがあまくなるので注意しよう

» 続きを読む

2024.03.03

タイトル

執筆:2024.02.27
編集:2024.02.27


さくらインターネットのメールを
フィルターで仕分けする方法についてです。

方法は大きく2通りあります

  • クライアントでフィルターする場合「超簡単」
    IMAP受信でアプリのフィルターを使います

  • サーバーでフィルターする場合「高難易度」
    .mailfilter を書き換えます
    コントロールパネルから設定を変更すると上書きされて書き込んだ変更が消えるので注意です

» 続きを読む

2024.02.27



PR

[PR]