#author("2018-11-21T14:13:31+00:00","default:sysosa","sysosa") #author("2018-11-21T14:15:58+00:00","default:sysosa","sysosa") apache httpd 当方ではこちらを使う機会が多い。ただ一画面に複数のイメージ画像を表示させるのならnginxが有利と聞く。 ここでは構造式表示をタイル形式で表示するばあであろうと思われる[[RDKit/Cartridge/web]] [[Digest認証>httpd/Digest]] ここではメモ的なことを列挙する ***VirtualHost [#o33c7122] 一台のマシンで複数のwebサイトを用意するには?httpdの定義で作成可能。&size(10){今ではdockerを使うのもありなのでしょうか}; VirtualHostディレクティブを使用して複数のサイトを作る。 名前ベースです。なのでDNSでcnameらでサイトを作るが、指し示すIPは同じ。 弊サイトはddnsで1つのIPを頂いてweb.chapreon.jpを名前として登録している。例えばこれにcnameとして -alpha.chaperone.jp -beta.chaperone.jp -gamma.chaperone.jp を作り、すべてweb.chapreon.jpに繋がるようにするとする。 そしてhttpd.confにおいて #code(nonumber){{ : <VirtualHost *:80> ServerName web.chaperone.jp DocumentRoot "/var/www/html" </VirtualHost> <VirtualHost *:80> ServerName alpha.chaperone.jp DocumentRoot /var/www/alpha </VirtualHost> <VirtualHost *:80> ServerName beta.chaperone.jp DocumentRoot /var/www/beta </VirtualHost> <VirtualHost *:80> ServerName gamma.chaperone.jp DocumentRoot /var/www/gamma </VirtualHost> : }} とすれば、それぞれのリクエストのあったサイトごとにコンテンツ(/var/www/{html,alpha,beta,gamma})が応答するようになる ***proxy [#rf61f6aa] 内部のwebコンテンツを表示させたい場合 大抵はルーターなどで外部から直接内部へは繋げられない。そこで中継役proxyを立てて内部コンテンツを外部に流す。 &ref(2017y05m21d_223003288.png,nolink,noborder); ここでは、内部の 2nd.sybyl.local/abc/ コンテンツを外部で web.chaperone.jp/abc/ として提示する例を示す web.chaperone.jpで #code(nonumber){{ [root@c ~]# vi /etc/httpd/conf/httpd.conf : ProxyPass /abc http://2nd.sybyl.local/abc/ ProxyPassReverse /abc http://2nd.sybyl.local/abc/ [root@c ~]# }} とする ***VirtualHostにproxyを噛ませてsslで [#f4af38aa] 下記はweb.chaperone.jpとalpha.chaperone.jp(Proxy経由で内部のalpha.sybyl.local)をhttpsで公開する設定の例 -ProxyPass/ProxyPassReverseの相手先が「http」であること -SSLCertificateの3ファイルはcertbot で「-d web.chaperone.jp -d alpha.chaperone.jp」で用意される -alpha.sybyl.localにcertbot で「-d alpha.chaperone.jp」を用意する必要はない #code(nonumber){{ SSLCertificateFile /etc/letsencrypt/live/web.chaperone.jp/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/web.chaperone.jp/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/web.chaperone.jp/chain.pem <VirtualHost *:443> ServerName web.chaperone.jp:443 DocumentRoot "/var/www/html" </VirtualHost> <VirtualHost *:443> ServerName alpha.chaperone.jp:443 SSLProxyEngine on ProxyPass / http://alpha.sybyl.local/ ProxyPassReverse / http://alpha.sybyl.local/ SSLProxyCheckPeerCN off SSLProxyCheckPeerName off </VirtualHost> }} ***ログフォーマット変更 [#aacc4e60] 既存のアクセスログの日付部分が #code(nonumber){{ [16/Apr/2017:03:33:04 +0900] }} と表記される。っが、読みにくい、加え加工し辛いのでLogFormatを使ってもう一つログファイルを作ってみた &size(10){既存のログファイル(access_log)は、fail2ban向けに使用させるのでそのまま}; #code(nonumber){{ [root@c ~]# vi /etc/httpd/conf/httpd.conf : LogFormat "%a %{%Y-%m-%d %H:%M:%S}t \"%r\" %>s %b" common CustomLog "logs/common_log" common : [root@c ~]# }} httpdの再起動後に有効となり、 #code(nonumber){{ 192.168.0.10 2017-04-17 14:33:37 "GET /w/index.php?chaperone HTTP/1.1" 200 99814 }} なログを書き出すようになる。 ***apacheユーザが /tmp にファイルを置く [#w638e6e4] CentOS7では既定でapacheデーモンが/tmpにファイルを置く事ができないみたい 有効にするには PrivateTmp フラグを修正sる #code(nonumber){{ [root@c ~]# vi /lib/systemd/system/httpd.service : -PrivateTmp=true +PrivateTmp=false : [root@c ~]# [root@c ~]# systemctl daemon-reload [root@c ~]# systemctl restart httpd }} &color(magenta){PrivateTmp};を無効にする &color(white,blue){留意}; yum updateで更新すると、この書き換えた部分が元に戻ってしまうときがあるみたい。 その場合は、一旦現行のhttpdを停止して、オリジナルを/etc/systemd/systemにコピーして修正して、それを永続的に使用させる その場合は、一旦現行のhttpdを停止して、&color(magenta){無効にして};から オリジナルの httpd.service を/etc/systemd/system/にコピーして修正と読み込み(systemctl daemon-reload)を行う。 以降は、有効にして、起動させる。 #code(nonumber){{ [root@c ~]# systemctl stop httpd.service [root@c ~]# systemctl disable httpd.service Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service. [root@c ~]# cp /lib/systemd/system/httpd.service /etc/systemd/system/ [root@c ~]# vi /etc/systemd/system/httpd.service [root@c ~]# systemctl daemon-reload [root@c ~]# systemctl list-unit-files httpd.service UNIT FILE STATE httpd.service disabled 1 unit files listed. [root@c ~]# systemctl enable httpd.service Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /etc/systemd/system/httpd.service. [root@c ~]# systemctl start httpd.service }}