Memo/Linux/Apache

http://dexlab.net/pukiwiki/index.php?Memo/Linux/Apache
 

Memo/Linux

Apache

'Memo/Linux/Apache/' には、下位層のページがありません。


IPv6でしかListenしていない場合

  • 環境
    • CentOS7.x 64bit
    • httpd-2.4.6-45.el7.centos.4.x86_64
  • デフォルトではなぜかtcp6(IPv6)のみlistenしている
    1. netstat -nat | grep :80
    2. tcp6       0      0 :::80                   :::*                    LISTEN
  • 変更:
    1. sudo vim /etc/httpd/conf/httpd.conf
    2. ----
    3. Listen 0.0.0.0:80
    4. ----
    5. sudo service httpd restart
    6.  
    7. # tcp(IPv4)でlistenするようになった
    8. netstat -nat | grep :80
    9. tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN

Traceメソッドを無効化する

  1. sudo vi /etc/httpd/conf/httpd.conf
  2. ----
  3. TraceEnable off
  4. ----
  5. sudo service httpd restart
  • 確認: 405ならOK
    1. curl -X TRACE 127.0.0.1
    2. ...
    3. <title>405 Method Not Allowed</title>

バージョン番号等を隠す

  • セキュリティ上、OSやアプリのバージョン番号が分かると攻撃しやすいので隠す
  • CentOS6.x, httpd-2.2
    • デフォルト設定:ブラウザでの404ページの例
      1. Apache/2.2.15 (CentOS) Server at 192.168.1.10 Port 80
    • バージョン番号等を隠す
      1. vim /etc/httpd/conf/httpd.conf
      2. ----
      3. ServerTokens ProductOnly
      4. ServerSignature Off
      5. ----
      6. service httpd restart

SSLv3.0を無効にする(POODLE脆弱性対応)

  1. vim /etc/httpd/conf.d/ssl.conf
  2. ----
  3. SSLEngine on
  4. # SSLv3の無効化(POODLE脆弱性対応)
  5. SSLProtocol all -SSLv2 -SSLv3
  6. # ELB Security Policy-2015-05: http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-security-policy-table.html
  7. SSLCipherSuite 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:AES256-GCM-SHA384:AES256-SHA256:AES256-SHA:DES-CBC3-SHA'
  8. # 暗号化方式をサーバで指定 (Apache 2.1以上)
  9. SSLHonorCipherOrder On
  10. # SSL圧縮を無効(Apache 2.2.24以上)
  11. SSLCompression off
  12. ----
  13. service httpd configtest
  14. service httpd restart
  • 省略されたSSL Cipherの確認。mod_sslのデフォルト
    1. openssl ciphers -v 'ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP'
    2.  
    3. ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD
    4. ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(256) Mac=AEAD
    5. ...

アクセスログにレスポンスタイムとロードバランサのアクセス元IPを追加

ロードバランサ配下にあるapacheの場合、アクセスログに残るIPはロードバランサのIPになる。アクセス元IPも残したい場合。
mod_rpafを使う方法もある。

  • AWS ELBのバックエンドサーバにapacheが入っていると仮定して、アクセスログに以下の項目を追加したい場合
    • %D: リクエストを処理するのにかかった時間、マイクロ秒単位
    • %{X-Forwarded-For}i: 複数IPがカンマ区切り。例: アクセス元IP, ELB IP
    • %{X-Forwarded-Proto}i: プロトコル。 https, http
      1. # /check.html: load balancer health check
      2. SetEnvIf Request_URI "/check.html" no_log
      3. LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" %D \"%{X-Forwarded-For}i\" \"%{X-Forwarded-Proto}i\"" elb-combined
      4. ErrorLog logs/www.example.com-error_log
      5. CustomLog logs/www.example.com-access_log elb-combined env=!no_log

LDAP認証

  • CentOS6.3 x86_64 へインストールとNameVirtualHost? + リバースプロキシ(80 > 10080)の場合の設定
    1. yum install httpd mod_ssl mod_authz_ldap
    2.  
    3. vim /etc/httpd/conf.d/authz_ldap.conf
    4. ----
    5. LoadModule authz_ldap_module modules/mod_authz_ldap.so
    6. # 証明書のチェック(SSL自己証明書の場合はOFF。ldapsを使う場合にも影響)
    7. LDAPVerifyServerCert Off
    8. # LDAP問い合わせキャッシュ秒
    9. #LDAPOpCacheTTL 1
    10. ----
    11.  
    12. vim /etc/httpd/conf.d/vhost_base.conf
    13. ----
    14. NameVirtualHost *:80
    15.  
    16. <VirtualHost *:80>
    17.     ServerAdmin root@localhost
    18.     ServerName 127.0.0.1
    19.     DocumentRoot /var/www/html
    20.  
    21.     # no_log: load balancer health check
    22.     SetEnvIf Request_URI "/check.html" no_log
    23.     ErrorLog logs/error_log
    24.     CustomLog logs/access_log combined env=!no_log
    25.     <Directory />
    26.         Options -Indexes FollowSymLinks
    27.         AllowOverride All
    28.     </Directory>
    29. </VirtualHost>
    30. ----
    31.  
    32. vim /etc/httpd/conf.d/example.com.conf
    33. ----
    34. <VirtualHost *:80>
    35.     ServerAdmin root@localhost
    36.     ServerName example.com
    37.     ServerAlias www.example.com
    38.     DocumentRoot /var/www/vhost/example.com/public_html
    39.  
    40.     # no_log: load balancer health check
    41.     SetEnvIf Request_URI "/check.html" no_log
    42.     ErrorLog logs/example.com-error_log
    43.     CustomLog logs/example.com-access_log combined env=!no_log
    44.  
    45.     ProxyPass / http://localhost:10080/
    46.     ProxyPassReverse / http://localhost:10080/
    47.  
    48.     <Proxy *>
    49.         AllowOverride None
    50.  
    51.         AuthType Basic
    52.         AuthName "Auth LDAP"
    53.         AuthBasicProvider ldap
    54.         AuthLDAPUrl "ldaps://ldapserver:639/ou=users,dc=example,dc=com?uid"
    55.         AuthLDAPBindDN "cn=connector,ou=admin,dc=example,dc=com"
    56.         AuthLDAPBindPassword "********"
    57.         AuthzLDAPAuthoritative off
    58.         Require valid-user
    59.     </Proxy>
    60.  
    61.     <Directory />
    62.         Options -Indexes FollowSymLinks
    63.         AllowOverride All
    64.     </Directory>
    65. </VirtualHost>
    66. ----

mod_rewriteとserver-statusの併用

  1. RewriteCond %{REQUEST_URI} =/server-status
  2. RewriteRule ^.*$ /server-status [L]

高速化


BASIC認証にワンタイムパスワードを使う


一般ユーザ権限でapacheを起動


mod_rpaf でロードバランサ経由のアクセス元IPをログに残す

  • リバースプロキシや、Amazon ELB等でアクセス元IPが、リバースプロキシやロードバランサになってしまう。
  • HTTPヘッダに 「X-Forwarded-For」がある場合、これをアクセス元IPに置換するモジュール
  • Amazon ELBはSSL Termination時は「X-Forwarded-For」ヘッダが付くため使える。TCP:443の時は「X-Forwarded-For」ヘッダは付かないので使えない。
  • mod_rpafを使ったIPアドレスのアクセス制限 オリジナルのmod_rpaf-0.6ではRHEL 6/CentOS 6/Amazon Linux 2011.09(httpd 2.2.22以降)でアクセス制限は使えず「RewriteCond?」なら可能
    1. RewriteCond %{REMOTE_ADDR} !^XXX\.XXX\.XXX\.XXX$
    2. RewriteRule ^.*$ - [F,L]
  • もしくはhtaccess で特定のファイルのみパスワードを要求しない
  • basic認証の時、特定のIPアドレスの場合はリダイレクト
    • httpd.conf
      1.     RewriteEngine on
      2.     RewriteCond %{REMOTE_ADDR} ^127\.0\.0\.1$ [OR]
      3.     RewriteCond %{REMOTE_ADDR} ^xxx\.xxx\.xxx\.xxx$
      4.     RewriteRule ^/$ /noauth/ [R=302]
    • parent/.htaccess
      1. AuthType Basic
      2. AuthUserFile /var/www/vhost/example.com/.htpasswd
      3. AuthName "password"
      4. Require valid-user
    • parent/noauth/.htaccess
      1. Satisfy any
      2. order allow,deny
      3. allow from all
  • https://github.com/ttkzw/mod_rpaf-0.6
    • ドットで終わるサブネットの記法対応。APR-IPV6バグ修正
    • RHEL 6/CentOS 6/Amazon Linux 2011.09(httpd 2.2.22以降)でアクセス制御ができない問題対応
      1. yum -y install gcc rpm-build httpd-devel checkinstall --enablerepo=rpmforge
      2. cd /tmp/
      3. git clone https://github.com/ttkzw/mod_rpaf-0.6.git
      4. cd mod_rpaf-0.6/
      5. make
      6.  
      7. # ソースからインストール
      8. make install
      9.  
      10. # checkinstallを使う場合
      11. checkinstall -R --backup=no --deldoc=yes --fstrans=no --default
      12. rpm -ivh /root/rpmbuild/RPMS/x86_64/mod_rpaf-0.6-1.x86_64.rpm
      13.  
      14. cp mod_rpaf.conf /etc/httpd/conf.d/rpaf.conf
      15.  
      16. vi /etc/httpd/conf.d/rpaf.conf
      17. ----
      18. RPAFenable On
      19. RPAFsethostname Off
      20. RPAFproxy_ips 192.168.1.100 10.
      21. ----
      22.  
      23. service httpd restart
  • CentOS5.8 x86_64 オリジナル+パッチでビルド
    • filemod_rpaf_degtine.patch ipv6 対応パッチ
    • filemod_rpaf-2.0.c.classA.patch ドットで終わるサブネットの記法対応
      1. yum -y install gcc rpm-build httpd-devel checkinstall --enablerepo=rpmforge
      2. cd /usr/src/redhat/
      3. wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
      4. tar xvfz mod_rpaf-0.6.tar.gz
      5.  
      6. patch -p0 < mod_rpaf_degtine.patch
      7. patch -p0 < mod_rpaf-2.0.c.classA.patch
      8.  
      9. cd mod_rpaf-0.6
      10. perl -p -i -e 's#^APXS2=.+#APXS2=/usr/sbin/apxs#' "Makefile"
      11. make rpaf-2.0
      12.  
      13. # ソースからインストールする場合
      14. make install-2.0 
      15.  
      16. # rpmパッケージを作成する場合
      17. checkinstall -R --backup=no --deldoc=yes --fstrans=no --default
      18.  
      19. cat >> /etc/httpd/conf.d/rpaf.conf << EOS
      20. LoadModule rpaf_module modules/mod_rpaf.so
      21.  
      22. <IfModule mod_rpaf.c>
      23. RPAFenable On
      24. RPAFsethostname Off
      25. RPAFproxy_ips 192.168.1.100 10.
      26. </IfModule>
      27. EOS
      28.  
      29. service httpd restart

mod_tofu画像のリサイズ


特定URLだけbasic認証を除外する

  • Satisfy Anyを使う
  • .htaccessでmod_rewriteを使っている場合は、URLが書き換えられてしまうので、.htaccess側で指定する
  • /registers だけ除外する
    1. # vi .htaccess
    2. ----
    3. AuthUserFile /var/www/vhost/example.com/.htpasswd
    4. AuthName "Password"
    5. AuthType Basic
    6. Require valid-user
    7.  
    8. Satisfy Any
    9. SetEnvIf Request_URI "/registers" allow_url
    10. Order Deny,Allow
    11. Deny from all
    12. allow from env=allow_url
    13. ----

sudoを使う


Apache Killer脆弱性対策

  • CustomLogはサーバ設定ファイル, バーチャルホスト内でしか有効にならないので注意
  • Apache 2.2
    cat >> /etc/httpd/conf.d/range-CVE-2011-3192.conf << 'EOS'
    # Apache 2.2
    # Drop the Range header when more than 5 ranges.
    # CVE-2011-3192
    SetEnvIf Range (?:,.*?){5,5} bad-range=1
    RequestHeader unset Range env=bad-range
    
    # We always drop Request-Range; as this is a legacy
    # dating back to MSIE3 and Netscape 2 and 3.
    RequestHeader unset Request-Range
    
    # optional logging.
    CustomLog logs/range-CVE-2011-3192.log common env=bad-range
    CustomLog logs/range-CVE-2011-3192.log common env=bad-req-range
    EOS
    
    service httpd graceful
  • Apache Pre 2.2 and 1.3
    cat >> /etc/httpd/conf.d/range-CVE-2011-3192.conf << 'EOS'
    # Apache Pre 2.2 and 1.3
    # Reject request when more than 5 ranges in the Range: header.
    # CVE-2011-3192
    #
    RewriteEngine on
    RewriteCond %{HTTP:range} !(bytes=[^,]+(,[^,]+){0,4}$|^$)
    # RewriteCond %{HTTP:request-range} !(bytes=[^,]+(?:,[^,]+){0,4}$|^$)
    RewriteRule .* - [F]
    
    # We always drop Request-Range; as this is a legacy
    # dating back to MSIE3 and Netscape 2 and 3.
    RequestHeader unset Request-Range
    EOS
    
    service httpd graceful
  • テスト。不正なRangeリクエストを生成して、rangeが削除か「0-」に書き換えられているかをチェック
  • サーバ設定ファイル, バーチャルホスト内に記載した場合はログ(/var/log/httpd/range-CVE-2011-3192.log)もチェック
    cat >> /var/www/html/h.php << 'EOS'
    <?php
    $headers = apache_request_headers();
    var_export($headers);
    EOS
    
    curl \
    -H "HEAD / HTTP/1.1" \
    -H "Range: bytes=0-,5-0,5-1,5-2,5-3,5-4,5-5,5-6,5-7,5-8,5-9,5-10,5-" \
    -H "Request-Range: bytes=0-,5-0,5-1,5-2,5-3,5-4,5-5,5-6,5-7,5-8,5-9,5-10,5-" \
    -H "Connection: close" \
    http://127.0.0.1/h.php

.htaccess tips


ワイルドカードSSL自己証明書

  • *.example.com のワイルドカード自己証明書を作成する。Firefoxでは例外として追加すれば動作可能。他のバーチャルホストでも「<VirtualHost? *:443>」〜「</VirtualHost? >」をコピペすれば同じ。
  • 本物は SSL証明書 RapidSSL 2600円 ワイルドカード 18000円 (RapidSSL Strategic Partner) が安い
  • Blog: 名前ベースのバーチャルホストに オレオレ ワイルドカード証明書でSSL対応してみた。 ? Neo Titans
    1. openssl genrsa -aes256 2048 > server.key
    2. パスワードは適当
    3.  
    4. openssl rsa -in server.key -out server-nopass.key
    5. パスワード無しに変換
    6.  
    7. openssl req -new -x509 -days 3653 -text -key server-nopass.key > server.crt
    8.  
    9. Country Name (2 letter code) [GB]:JP
    10. State or Province Name (full name) [Berkshire]:
    11. Locality Name (eg, city) [Newbury]:
    12. Organization Name (eg, company) [My Company Ltd]:
    13. Organizational Unit Name (eg, section) []:
    14. Common Name (eg, your name or your server's hostname) []:*.example.com
    15. Email Address []:webmaster@example.com
    16.  
    17. mv server-nopass.key /etc/pki/tls/private/wild.example.com.key
    18. mv server.crt /etc/pki/tls/certs/wild.example.com.crt
    19.  
    20. vim /etc/httpd/conf.d/sample.example.com.conf
    21. ----
    22. <VirtualHost *:443>
    23.     ServerAdmin webmaster@example.com
    24.     ServerName sample.example.com
    25.  
    26.     SSLEngine on
    27.     SSLCertificateFile /etc/pki/tls/certs/wild.example.com.crt
    28.     SSLCertificateKeyFile /etc/pki/tls/private/wild.example.com.key
    29.     SetEnv HTTPS on
    30.  
    31.     DocumentRoot /var/www/vhost/sample.example.com/public_html
    32.     ErrorLog logs/sample.example.com-ssl_error_log
    33.     CustomLog logs/sample.example.com-ssl_access_log combined env=!no_log
    34.  
    35.     <Directory />
    36.         Options -Indexes FollowSymLinks
    37.         AllowOverride All
    38.     </Directory>
    39. </VirtualHost>

SSL証明書

  • 基本的に1台のWEBサーバ(1GlobalIP)でNameVirtualHost?だと1つのSSL証明書しか使えない
  • *.example.com のようなワイルドカードSSL証明書を使う
  • 秘密鍵の作成
    1. openssl genrsa -out www.example.com.key 2048
  • CSRの作成。ワイルドカード証明書なら「Common Name: *.example.com」
    1. openssl req -new -key www.example.com.key -out www.example.com.csr
    2.  Country Name (2 letter code) [AU]:JP
    3.  State or Province Name (full name) [Some-State]:Tokyo
    4.  Locality Name (eg, city) []: Higashi Ikebukuro, Toshima-ku
    5.  Organization Name (eg, company) [Internet Widgits Pty Ltd]: Example Corp
    6.  Organizational Unit Name (eg, section) []: Network Administration
    7.  Common Name (eg, YOUR name) []: www.example.com
    8.  Email Address []:
    9.  A challenge password []:
    10.  An optional company name []:
  • CSRファイルの確認
    1. openssl req -in CSRファイル -text
  • 証明書ファイルの確認
    1. openssl x509 -in 証明書ファイル -text
  • IIS向けのPKCS#12形式への変換。crtファイルとパスフレーズ無しkeyファイルが必要
    1. openssl pkcs12 -export -out www.example.com.p12 -in www.example.com.crt -inkey www.example.com.key

同時接続数の制限


ab(ApacheBench?)

  • hostを指定
    1. ab -n 1 -c 1 -H "host: example.jp" http://127.0.0.1/
  • User-Agentを指定
    1. ab -n 1 -c 1 -H "User-agent: DoCoMo/2.0 P905i(c100;TB;W24H15)" http://example.jp/
    2.  
    3. "ApacheBench/2.0.40-dev, DoCoMo/2.0 P905i(c100;TB;W24H15)"
  • Apache 2.2.11のabなら、そのままUser-agentを表示してくれるらしい
  • 両方指定
    1. ab -n 1 -c 1 -H "host: example.jp" -H "User-agent: DoCoMo/2.0 P905i(c100;TB;W24H15)" http://127.0.0.1/

「Could not reliably determine the server's fully qualified domain name」ワーニング

hostsにFQDNが設定されていないと、apache再起動や「httpd -S」等で表示されるワーニング

  • hostsに適当なFQDNを指定する。
  • 「hostname --fqdn」で表示されればOK
  • ServerAlias?等で名前を指定する
  • 再起動
    $ sudo vi /etc/hosts
    ----
    127.0.0.1               web1.jp
    ----
    
    $ sudo vi /etc/httpd/conf.d/vhost00_ipaddr.conf
    ----
        ServerAlias web1.jp
    ----
    $ sudo /sbin/service httpd graceful 

パフォーマンスチューニング

  • apacheパフォーマンスチューニング
    # vi /etc/httpd/conf/httpd.conf
    ----
    KeepAlive On
    HostnameLookups Off
    ----
  • プロセス数を調整する場合 以下コマンドで、prefork.cと表示されれば、prefork.cモード
    # httpd -l
    
    # vi /etc/httpd/conf/httpd.conf
    ----
    <IfModule prefork.c>
    # default 8
    StartServers       4
    # default 5
    MinSpareServers    3
    # default 20
    MaxSpareServers   10
    # default 256
    ServerLimit      128
    # default 256
    MaxClients       128
    # default 4000
    MaxRequestsPerChild  400
    </IfModule>
    ----
    # service httpd restart
    

RewriteRule?の使い方

  • /test/?var=foo のアクセスを /test.php?id=test&var=foo に渡したい場合
    • RewriteLoglevel? 0にすれば、ログは出力されない
      RewriteEngine On
      RewriteLog "/tmp/rewrite.log"
      RewriteLoglevel 2
      
      RewriteCond %{REQUEST_URI} ^/ctg/
      RewriteRule ^/test/([^\/]*) /test.php?id=$1&%{QUERY_STRING}
  • GETが欲しい時は以下を付ける
    %{QUERY_STRING}

アクセスログの記録に特定条件を指定する

  • access_logに大量ロボットや、死活確認のnagiosのログがでてきて見にくい場合。
  • httpd.conf のログ設定を変更 mod_setenvif
    -CustomLog logs/access_log combined
    +SetenvIf Remote_Addr 10\.0\.1\.(1|252|253) bigip
    +CustomLog logs/access_log combined env=!bigip

SSL自己証明書

お試しでHTTPSサーバを立ててみたいときとか。実験用。 ブラウザによっては毎回認証するか聞いてくる(Opera9.02)

  • 環境
    • CentOS release 6.2 (Final) x86_64
  • 秘密鍵等の作成
    1. # 秘密鍵の作成
    2. openssl genrsa -aes128 1024 > server.key
    3.  
    4. # パスフレーズ無しの秘密鍵へ変換
    5. openssl rsa -in server.key > server-nopass.key
    6.  
    7. # 公開鍵の作成
    8. openssl req -new -key server-nopass.key > server.csr
    9.  
    10. -----
    11. Country Name (2 letter code) [XX]: JP
    12. State or Province Name (full name) []: Tokyo
    13. Locality Name (eg, city) [Default City]: Akasaka, Minato-ku
    14. Organization Name (eg, company) [Default Company Ltd]: Example Inc.
    15. Organizational Unit Name (eg, section) []: Example Section
    16. Common Name (eg, your name or your servers hostname) []: www.example.com
    17. Email Address []:
    18.  
    19. Please enter the following 'extra' attributes
    20. to be sent with your certificate request
    21. A challenge password []:
    22. An optional company name []:
    23. ----
    24.  
    25. # デジタル証明書の作成
    26. openssl x509 -in server.csr -days 365 -req -signkey server-nopass.key > server.crt
    27.  
    28. # デフォルトパスへコピー
    29. cp server.crt /etc/pki/tls/certs/
    30. cp server-nopass.key /etc/pki/tls/private/
    31. chmod 600 /etc/pki/tls/private/server-nopass.key /etc/pki/tls/certs/server.crt
  • mod_ssl等の設定
    1. yum -y install mod_ssl
    2.  
    3. vi /etc/httpd/conf.d/ssl.conf
    4. ----
    5. DocumentRoot "/var/www/html"
    6. ServerName www.example.com:443
    7. SSLCertificateFile /etc/pki/tls/certs/server.crt
    8. SSLCertificateKeyFile /etc/pki/tls/private/server-nopass.key
    9. ----
    10.  
    11. service httpd restart

SSL証明書を導入しているにもかかわらず、Operaで認証ダイアログが出る場合

サブドメインまで有効なSSL証明書(*.foo.com)をインストールしてあっても、Opera9.0では「SSL証明書とドメイン名が異なっています。」と毎回ダイアログが出る。
IE6.0やFirefox1.5では表示されない。
その場合は、apacheのServerName?が適切に設定するかを確認する。

  • /etc/httpc/conf/httpd.conf
    #ServerName localhost.localdomain:80
    DocumentRoot "/var/www/html"
    ServerName bar.foo.com
  • /etc/httpd/conf.d/ssl.conf
    DocumentRoot "/var/www/html"
    #ServerName www.example.com:443
    ServerName bar.foo.com:443
  • 再起動
    # service httpd graceful

緩やかな再起動

親プロセスを殺さずに、新しい子プロセスから新しい設定を適用する事ができます。
よってサービスを停止せずに新しい設定を適用できます。

Basic認証の.htpasswdを管理するcgi

コンテンツタイプを設定する

たとえば、*.php、*.inc、*.cls、*.classファイルをphpとして実行させたい場合は以下のように設定します。

  • 編集
    vi /etc/httpd/conf.d/php.conf
  • 特定のファイルのみ設定
    <Files ~ "\.(php|inc|class|cls)$">
    </Files>
  • 特定のディレクトリのみ設定
    <Directory "パス">
       AddType application/x-httpd-php .php
       AddType application/x-httpd-php .inc
       AddType application/x-httpd-php .cls
       AddType application/x-httpd-php .class
    </Directory>
    

htmlファイルで、charsetを指定しても文字化けする場合は?

Apacheがデフォルトでhttp headerにcharsetを指定している場合があります。
以下のようにデフォルトでUTF-8が設定されていると文字化けしました。

AddDefaultCharset UTF-8
  • 変更
    # vi /etc/httpd/conf/httpd.conf
  • 先頭に#をつけてコメントアウトして保存
    # AddDefaultCharset UTF-8
  • Apache再起動
    # service httpd restart

同時接続数を得る

以下の結果が、httpd.confのMaxClients?を上回っているならば、MaxClients?を要調整。

$ netstat -a | grep http | wc -l

ログ解析ツール

  • Analog
    基本的な事はできる感じだが、形式が古い。
  • Webalizer
    割と高機能。円グラフ等出力機能あり。開発止まっているらしい。

比較サイト
http://awstats.sourceforge.net/docs/awstats_compare.html

ファイル一覧を見えるようにする/ディレクトリインデックス

  • httpd.confを編集し、AllowOverride? のnoneを消し、Optionsに書き換える。
    1.  <Directory />
    2.     Options FollowSymLinks
    3.     AllowOverride Options
    4.  </Directory>
  • ディレクトリ一覧を出したいディレクトリに以下の.htaccessファイルを作成する。
  • .htaccess
    1. Options Indexes

その他


添付ファイル: filemod_rpaf-2.0.c.classA.patch 397件 [詳細] filemod_rpaf_degtine.patch 679件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-06-19 (月) 19:50:28 (398d)