smnb@Dig23:~$ sudo apt install apache2
smnb@Dig23:~$ sudo systemctl status apache2 # server status check
(修正前) | (修正後) | |
SSLCertificateFile | /etc/ssl/certs/ssl-cert-snakeoil.pem | /etc/ssl/private/testssl.crt |
SSLCertificateKeyFile | /etc/ssl/private/ssl-cert-snakeoil.key | /etc/ssl/private/testssl.key |
smnb@Dig23:~$ sudo ufw enable
smnb@Dig23:~$ sudo ufw status
仮想ホストの設定ファイル | /etc/apache2/sites-available/ |
モジュールの設定ファイル | /etc/apache2/mods-available/ |
その他上記以外の細かい設定 | conf.d/ |
Listen 80 <IfModule ssl_module> Listen 443 </IfModule> <IfModule mod_gnutls.c> Listen 443 </IfModule>
$ grep -r LoadModule /etc/apache2/* | grep cgi_module /etc/apache2/mods-available/proxy_scgi.load:LoadModule proxy_scgi_module /usr/lib/apache2/modules/mod_proxy_scgi.so /etc/apache2/mods-available/cgi.load:LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so /etc/apache2/mods-available/proxy_fcgi.load:LoadModule proxy_fcgi_module /usr/lib/apache2/modules/mod_proxy_fcgi.so
$ grep -r cgi-bin /etc/apache2/* /etc/apache2/conf-available/serve-cgi-bin.conf: ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ /etc/apache2/conf-available/serve-cgi-bin.conf: <Directory "/usr/lib/cgi-bin"> /etc/apache2/conf-available/localized-error-pages.conf:#ErrorDocument 404 "/cgi-bin/missing_handler.pl" /etc/apache2/sites-available/default-ssl.conf: #Include conf-available/serve-cgi-bin.conf /etc/apache2/sites-available/default-ssl.conf: <Directory /usr/lib/cgi-bin> /etc/apache2/sites-available/000-default.conf: #Include conf-available/serve-cgi-bin.conf /etc/apache2/sites-enabled/000-default.conf.org: #Include conf-available/serve-cgi-bin.conf /etc/apache2/sites-enabled/000-default.conf~: #Include conf-available/serve-cgi-bin.conf
$ grep -r -A 4 "<Directory \"/usr/lib/cgi-bin" /etc/apache2/* /etc/apache2/conf-available/serve-cgi-bin.conf: <Directory "/usr/lib/cgi-bin"> /etc/apache2/conf-available/serve-cgi-bin.conf- AllowOverride None /etc/apache2/conf-available/serve-cgi-bin.conf- Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch /etc/apache2/conf-available/serve-cgi-bin.conf- Require all granted /etc/apache2/conf-available/serve-cgi-bin.conf- </Directory>
#include <stdio.h> int main(int argc,char ** argv){ /* http header */ /* content type : HTML*/ printf("Content-type: text/html; charset=utf-8\n"); /* inhibit browser to cache */ printf("Pragma: no-cache\n"); printf("Cache-Control: no-cache\n"); /* end of header */ printf("\n"); /* contents */ printf("<html><head><title>テスト</title><head>"); printf("<body>テスト出力でんがな。</body></html>"); return EXIT_SUCCESS; }
sudo cp hello_cgi /usr/lib/cgi-bin/hello_cgi.cgi xdg-open http://localhost/cgi-bin/hello_cgi.cgi
xdg-open "http://localhost/cgi-bin/&a.cgi?m=10&n=12"CGIスクリプトは、これを環境変数の QUERY_STRING から読み出す。
char *p = getenv("QUERY_STRING"); if (p!=NULL){ long m,n; if(sscanf(s_dt,"m=%ld&n=%ld",&m,&n)==2){ printf("mxn=%ld),m*n); } }
<FORM METHOD="POST" ACTION="cgi_post.cgi">していすれば、各パラメータを&区切りの NAME=VALUE 文字列で得られる
変数名 | 意味 |
AUTH_TYPE | 認証方式(例えば MD5, Basicなど) |
CONTENT_LENGTH | 標準入力から読み込み可能なデータのバイト数(METHOD=POSTの時) |
CONTENT_TYPE | クライアントから送られてきたデータのタイプ。フォームからMETHOD=POSTで送信した場合は、application/x-www-form-urlencoded となる。 |
GATEWAY_INTERFACE | ゲートウェイプロトコル名称(例えばCGI/1.1) |
HTTP_ACCEPT | ブラウザがサポートする Content-type: のリスト。すべてを許可する場合、*/* となる。 |
HTTP_FORWARDED | この要求をフォワードしたプロキシサーバーの情報。送信されない場合もある。 |
HTTP_REFERER | そのCGIを呼び出したページのURL。送信されない場合や、たまに、全く別のURLを差していることもある。 |
HTTP_USER_AGENT | ブラウザに関する情報(Mozilla/4.01 [ja] (Win95; I) など) |
HTTP_X_FORWARDED_FOR | この要求をフォワードしたプロキシサーバーのIPアドレス。 |
PATH_INFO | パス情報。たとえば、「cgi-bin/xxx.cgi/taro/xxx.htm」というURLでCGIスクリプトを呼び出した場合、PATH_INFOには「/taro/xxx.htm」が格納される。 |
PATH_TRANSLATED | PATH_INFOで指定したファイルの、サーバー上の絶対パス名。 |
QUERY_STRING | 「http://サーバー名/CGIスクリプト名?データ」というURLを要求した場合のデータ部分。 |
REMOTE_ADDR | クライアントのIPアドレス(例えば10.0.0.1) |
REMOTE_HOST | クライアントのホスト名(例えば abc32.abc.co.jp) |
REMOTE_IDENT | クライアント側のユーザーID |
REMOTE_USER | クライアント側のユーザー名 |
REQUEST_METHOD | METHODで指定したデータ取得手段。GET, POST, HEAD, PUT, DELETE, LINK, UNLINKなどの種類がある。 |
SCRIPT_NAME | CGIスクリプトの名前。 |
SERVER_NAME | サーバー名 |
SERVER_PORT | サーバーのポート番号(例えば80) |
SERVER_PROTOCOL | サーバーのプロトコル名(例えばHTTP/1.0) |
SERVER_SOFTWARE | サーバーのソフトウェア名(例えば NCSA/1.3) |