(CGI3)IBMiのWeb環境インストール

# ■概略
オープンソースエンジニア歴30年超の筆者が2023年からIBMiを学びだした学習記録です
IBMi標準のapache設定方法をまとめました

# <u>■CGI用ライブラリの作成</u>
CGI用のライブラリCGILIBにコンパイルしたPGMを置く  
このライブラリをapacheのscriptaliasで/cgi-binでアクセスできるように設定する  
また開発者ユーザプロファイルのJOBDにCGILIBを含むライブラリパスを設定する

crtlib_CGI.bash  
```
system "CRTLIB LIB(CGILIB) TEXT('IBMi CGI')"
system "CHGJOBD JOBD(TAKAMILIB/TAKAMIJOBD) INLLIBL(TAKAMILIB BKNLIB_FF CGILIB QGPL QTEMP)"

```
## <u>■IBM Web Administration for iで設定</u>
### <u>◯Web I/F</u>
2通りのアクセス方法がある
＊IBM Web Administration for i(IBMiのWebサーバの設定をWeb I/Fで確認する)  
　http://{IP}:2001/HTTPAdmin  
　ID / PW は QSECOFRを使用する(＊PGMRや＊SECADMでは権限不足)  
  
＊IBM Navigation for i(IBMiの各種設定をWeb I/Fで確認する)  
　http://{IP}:2001 → ようこそ → IBMiタスクページ で  
　IBM Web Administration for i : http をクリックする  
  
### <u>◯起動と自動起動</u>
　IBM Web Administation for iで、  
　[管理]-[HTTPサーバ]-サーバ[APACHEDFT -Apache] で[▷]ボタンで起動する  
　[管理]-[HTTPサーバ]-サーバ[APACHEDFT -Apache]-サーバエリア[グローバル構成]で、  
　[一般サーバ構成]-[自動始動] : [はい] に設定して[OK]で自動起動になる  
　[一般サーバ構成]-[listenするIPアドレスとポート] : [＊8080] に変更する  
　※弊社環境では80で別プログラムが稼働しているため 

### <u>◯漢字コード</u>
　[拡張]-[設定]-[グローバル・サーバ設定]-[コード化文字セットID] 1208  
　※漢字コード参考URL : https://www.ibm.com/support/pages/node/1171264  
　　・apacheの設定(上記)でコード化文字セットID=1208を設定する  
　　・CGIのディレクトリでCGIJobCcsid 5035を設定する  
　　メニューから設定しなくてもhttpd.confで設定してもよい  

### <u>◯ドキュメントルート</u>
　APACHEDFTの標準設定では、ドキュメントルートは IFSの/www/apachedft/htdocs  

### <u>◯設定ファイル</u>
　APACHEDFTの標準設定では、設定は IFSの/www/apachedft/conf/httpd.conf  
　IBM Web Administration for iで設定変更し、reloadしてもよいが、  
　httd.confを直接編集し、IBM Web Administration for iでreloadしてもよい  

### <u>◯新規に作成する場合</u>
http://{IP}:2001/HTTPAdmina

[HTTPサーバの作成]
```  
HTTP サーバーの作成
サーバー名:	APACHEDFT
サーバー記述:	 
サーバー・ルート:	/www/apachedft
文書ルート:	/www/apachedft/htdocs
IP アドレス:	すべての IP アドレス
ポート:	8080
ログ・ディレクトリー:	/www/apachedft/logs
アクセス・ログ・ファイル:	access_log
エラー・ログ・ファイル:	error_log
ログの保守:	7 日
```  
```  
[サーバプロパティ]-[一般サーバ構成]-[一般設定]  
　自動始動 : はい  
　文書ルート : /www/apachedft/htdocs  
　IPアドレスとポート : * 8080  
[サーバプロパティ]-[一般サーバ構成]-[拡張] 
　クライアントCCSID : 1208   
[サーバプロパティ]-[コンテナ管理]-[ディレクトリ]  
　ディレクトリ /QSYS.LIB/CGILIB.LIB/ を[追加]  
[サーバプロパティ]-[URLマッピング]-[別名]  
　スクリプト別名	/cgi-bin/	/QSYS.LIB/CGILIB.LIB/  
```  

# ■httpd.confを直接編集する
IFSにbashとvimをインストールしておけば、httpd.confを直接編集できる
ユーザープロファイル毎に別URLを作成する
<table border=0>
<tr><td>ユーザプロファイル</td><td>ライブラリ</td><td>URL</td></tr>
<tr><td>なし</td><td>CGILIB</td><td>http://{サーバ}:8080/cgi-bin/</td></tr>
<tr><td>takami</td><td>TAKAMILIB</td><td>http://{サーバ}:8080/~takami/cgi-bin/</td></tr>
</table>

### <u>◯httpd.conf</u>
/www/apachedft/conf/httpd.conf  
```
# Configuration originally created by Create HTTP Server wizard on Tue Jun 18 13:13:34 JST 2024
Listen *:8080 http
DocumentRoot /www/apachedft/htdocs
TimeOut 30000
KeepAlive Off
TraceEnable On
AddLanguage en .en
# Log
LogFormat "%h %T %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{Cookie}n \"%r\" %t" cookie
LogFormat "%{User-agent}i" agent
LogFormat "%{Referer}i -> %U" referer
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log combined
LogMaint logs/access_log 7 0
LogMaint logs/error_log 7 0
# Env
SetEnvIf "User-Agent" "Mozilla/2" nokeepalive
SetEnvIf "User-Agent" "JDK/1\.0" force-response-1.0
SetEnvIf "User-Agent" "Java/1\.0" force-response-1.0
SetEnvIf "User-Agent" "RealPlayer 4\.0" force-response-1.0
SetEnvIf "User-Agent" "MSIE 4\.0b2;" nokeepalive
SetEnvIf "User-Agent" "MSIE 4\.0b2;" force-response-1.0

DirectoryIndex index.html
AccessFileName .htaccess
<Directory />
    Require all denied
</Directory>

# DocRoot
<Directory /www/apachedft/htdocs>
    #Require all granted
    Require ip 10. 192.168. 172.
</Directory>

# UserDir
UserDir public_html
UserDir disabled root
<Directory /home/*/public_html>
    AllowOverride FileInfo AuthConfig Limit Indexes
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
    Require ip 10. 192.1. 192.168. 172.
</Directory>

# CGI
AddCharset UTF-8 .html .pgm
DefaultNetCCSID 1208
ServerName 127.0.0.1
AccessFileName .htaccess
ScriptAlias /cgi-bin/ /QSYS.LIB/CGILIB.LIB/
<Directory /QSYS.LIB/CGILIB.LIB/>
    CGIJobCcsid 5035
    AllowOverride None
    SetHandler cgi-script
    Options +ExecCGI
    Require ip 10. 192.1. 192.168. 172.
</Directory>
ScriptAlias /~takami/cgi-bin/ /QSYS.LIB/TAKAMILIB.LIB/
<Directory /QSYS.LIB/TAKAMILIB.LIB/>
    CGIJobCcsid 5035
    AllowOverride None
    SetHandler cgi-script
    Options +ExecCGI
    Require ip 10. 192.1. 192.168. 172.
</Directory>
```