タグ: Apache

  • さくらインターネットのレンタルサーバで独自の404ページを指定する

    ウェブサイトの廃止に伴い、閉鎖のお知らせページを設定する。基本的に、エラーコード404のNot Foundばかりになるので、さくらのレンタルサーバで、404エラーページを独自に設定するようにしたメモ。

    さくらのレンタルサーバの管理画面では、404ページの設定はない。

    さくらのレンタルサーバでは、.htaccessを利用したウェブサーバの設定の上書きが可能。そのため、「.htaccess」を使って、404エラーのページを設定する。

    .htaccessの中身

    ErrorDocument 404 /404.html

    他に「.htaccess」で設定していることがなければ、この1行でよい。ファイルは作ってアップロードするか、管理画面のファイルマネージャーから作成して、書き込む。

    「404.html」は、設定したウェブサイトのフォルダのルートに置く。「/」でルートの階層を指定しているので。

  • 突然、Apache2.4の応答がなくなった

    休みで、のんびりと本をよんで勉強していたら、突然のアラート。調べてみると、サーバに対して、ping も飛ぶし、ssh接続もできた。死んでいるのは、Webサーバへのアクセスのみ。プロセスもみてみると、httpdはいる。ブラウザでは応答不能なので、正常に動作しておらず、ハングアップしたっぽい。(FreeBSD 13.1 release と Apache2.4 の組み合わせ)

    ↓ ps auxの結果

    root@ray:/var/log # ps aux | grep httpd
    root    925   0.0  0.9  48980  17712  -  Ss   25Jul22     1:44.07 /usr/local/sbin/httpd -DNOHTTPACCEPT
    www   22306   0.0  1.6  63636  33864  -  S    10:59       0:00.43 /usr/local/sbin/httpd -DNOHTTPACCEPT
    www   22307   0.0  1.6  63700  34020  -  S    10:59       0:00.43 /usr/local/sbin/httpd -DNOHTTPACCEPT
    www   22308   0.0  0.9  48980  17728  -  S    10:59       0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
    www   22309   0.0  0.9  48980  17728  -  S    10:59       0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
    www   22310   0.0  0.9  48980  17728  -  S    10:59       0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
    www   22311   0.0  0.9  48980  17728  -  S    10:59       0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
    root  22314   0.0  0.1  12844   2032  0  S+   10:59       0:00.00 grep httpd

    「-DNOHTTPACCEPT」がhttpdの引数としてあるけれど、どうやらこれは関係ないっぽい。これがついていても、Apacheは動いているというページがあるので。

    「httpd -k restart」をやってみたが、なかなか応答が帰ってこず。応答が帰ってきたあとも、ブラウザではアクセスできず。

    完全にhttpdプロセスが止まっていないことも考慮して、「httpd -k stop」「httpd -k stop」を行ってみたが駄目だった。エラーは出ているけれど、httpd自体は起動できているので、とりあえず無視。

    root@ray:/var/log # httpd -k start
    [Mon Aug 15 10:59:51.520174 2022] [core:warn] [pid 22319] (2)No such file or directory: AH00075: Failed to enable the 'httpready' Accept Filter
    [Mon Aug 15 10:59:51.520649 2022] [core:warn] [pid 22319] (2)No such file or directory: AH00075: Failed to enable the 'httpready' Accept Filter
    [Mon Aug 15 10:59:51.520656 2022] [core:warn] [pid 22319] (2)No such file or directory: AH00075: Failed to enable the 'dataready' Accept Filter
    [Mon Aug 15 10:59:51.520661 2022] [core:warn] [pid 22319] (2)No such file or directory: AH00075: Failed to enable the 'dataready' Accept Filter

    もう一度、restartで再起動させてみたら、今度は正常にブラウザでアクセスできた。とりあえず、障害としては復旧したのでよし。

    http/httpsでの疎通が取れなくなった時間のエラーログも確認してみたが、エラーログは記録されていなかった。調査はしたけれど、結局、原因不明。

    自分のサーバなので、休みでよかった。しかし、休みで家にいるときに、この不可解な現象は・・・己の未熟さを顧みて、勉強を続けろってことだろうか。

  • リバースプロキシを使ったWordPressのアクセスでハマる

    リバースプロキシの後ろにWordpressをおいて、リバースプロキシ経由でアクセスさせようとしたところ、ハマった。いろいろと試しているが、現在進行系で格闘中だ。

    事象としては、

    • インストール時に、Wordpressのホスト名が「127.0.0.1:8080」で登録されてしまい、ログインしようとすると、127.0.0.1にアクセスしようとしてしまい、アクセスできず。
    • 上記の問題は、DBを直接書き換えることで対処するが、トップページにアクセスすると、「127.0.0.1」にリダイレクトされる。
    • WordPressのCSSの一部と、画像が表示されない

    という具合だ。前がNginxで、後ろがApache2.4。WordpressをCDNで配信するときの設定も試したが、うまく行かず。たぶん、根本的に何かが欠けていると思われる。簡単と思っていたけれど、思わぬところでハマるものだ。最初から考え直し。

  • Magento2.3.5のインストール後に管理ページが404エラーになる

    Ubuntuに、Magento 2.3.5をインストールした後に、管理ページにアクセスしたところ、ページが404エラーになった。他にも、いくつかのページが404エラーになった。

    原因は、Apacheのmod_rewriteの設定がMagentoのディレクトリで有効になっていないからだった。

    Apacheには、mod_rewriteを入れているし、読み込ませてもいるが、肝心のMagentoのディレクトリで使うように設定されていなかったのが原因。

    • .htaccess がMagentoのフォルダになかった
    • apache.confで、.htaccessによる設定の上書きができないようになっていた

    対処としては、後述の参考ページの設定をいれただけだ。

    まずMagentoのインストールディレクトリに下記の .htaccessを保存する。

    ###############################################
    ## overrides deployment configuration mode value
    ## use command bin/magento deploy:mode:set to switch modes
    #   SetEnv MAGE_MODE developer
    ############################################
    ## uncomment these lines for CGI mode
    ## make sure to specify the correct cgi php binary file name
    ## it might be /cgi-bin/php-cgi
    #    Action php5-cgi /cgi-bin/php5-cgi
    #    AddHandler php5-cgi .php
    ############################################
    ## GoDaddy specific options
    #   Options -MultiViews
    ## you might also need to add this line to php.ini
    ##     cgi.fix_pathinfo = 1
    ## if it still doesn't work, rename php.ini to php5.ini
    ############################################
    ## this line is specific for 1and1 hosting
        #AddType x-mapp-php5 .php
        #AddHandler x-mapp-php5 .php
    ############################################
    ## default index file
        DirectoryIndex index.php
    <IfModule mod_php5.c>
    ############################################
    ## adjust memory limit
        php_value memory_limit 768M
        php_value max_execution_time 18000
    ############################################
    ## disable automatic session start
    ## before autoload was initialized
        php_flag session.auto_start off
    ############################################
    ## enable resulting html compression
        #php_flag zlib.output_compression on
    ###########################################
    ## disable user agent verification to not break multiple image upload
        php_flag suhosin.session.cryptua off
    </IfModule>
    <IfModule mod_php7.c>
    ############################################
    ## adjust memory limit
        php_value memory_limit 768M
        php_value max_execution_time 18000
    ############################################
    ## disable automatic session start
    ## before autoload was initialized
        php_flag session.auto_start off
    ############################################
    ## enable resulting html compression
        #php_flag zlib.output_compression on
    ###########################################
    ## disable user agent verification to not break multiple image upload
        php_flag suhosin.session.cryptua off
    </IfModule>
    <IfModule mod_security.c>
    ###########################################
    ## disable POST processing to not break multiple image upload
        SecFilterEngine Off
        SecFilterScanPOST Off
    </IfModule>
    <IfModule mod_deflate.c>
    ############################################
    ## enable apache served files compression
    ## http://developer.yahoo.com/performance/rules.html#gzip
        # Insert filter on all content
        ###SetOutputFilter DEFLATE
        # Insert filter on selected content types only
        #AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
        # Netscape 4.x has some problems...
        #BrowserMatch ^Mozilla/4 gzip-only-text/html
        # Netscape 4.06-4.08 have some more problems
        #BrowserMatch ^Mozilla/4\.0[678] no-gzip
        # MSIE masquerades as Netscape, but it is fine
        #BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
        # Don't compress images
        #SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
        # Make sure proxies don't deliver the wrong content
        #Header append Vary User-Agent env=!dont-vary
    </IfModule>
    <IfModule mod_ssl.c>
    ############################################
    ## make HTTPS env vars available for CGI mode
        SSLOptions StdEnvVars
    </IfModule>
    ############################################
    ## workaround for Apache 2.4.6 CentOS build when working via ProxyPassMatch with HHVM (or any other)
    ## Please, set it on virtual host configuration level
    ##    SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
    ############################################
    <IfModule mod_rewrite.c>
    ############################################
    ## enable rewrites
        Options +FollowSymLinks
        RewriteEngine on
    ############################################
    ## you can put here your magento root folder
    ## path relative to web root
        #RewriteBase /magento/
    ############################################
    ## workaround for HTTP authorization
    ## in CGI environment
        RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    ############################################
    ## TRACE and TRACK HTTP methods disabled to prevent XSS attacks
        RewriteCond %{REQUEST_METHOD} ^TRAC[EK]
        RewriteRule .* - [L,R=405]
    ############################################
    ## redirect for mobile user agents
        #RewriteCond %{REQUEST_URI} !^/mobiledirectoryhere/.*$
        #RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]
        #RewriteRule ^(.*)$ /mobiledirectoryhere/ [L,R=302]
    ############################################
    ## never rewrite for existing files, directories and links
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-l
    ############################################
    ## rewrite everything else to index.php
        RewriteRule .* index.php [L]
    </IfModule>
    ############################################
    ## Prevent character encoding issues from server overrides
    ## If you still have problems, use the second line instead
        AddDefaultCharset Off
        #AddDefaultCharset UTF-8
    <IfModule mod_expires.c>
    ############################################
    ## Add default Expires header
    ## http://developer.yahoo.com/performance/rules.html#expires
        ExpiresDefault "access plus 1 year"
        ExpiresByType text/html A0
        ExpiresByType text/plain A0
    </IfModule>
    ###########################################
    ## Deny access to root files to hide sensitive application information
        RedirectMatch 404 /\.git
        <Files composer.json>
            order allow,deny
            deny from all
        </Files>
        <Files composer.lock>
            order allow,deny
            deny from all
        </Files>
        <Files .gitignore>
            order allow,deny
            deny from all
        </Files>
        <Files .htaccess>
            order allow,deny
            deny from all
        </Files>
        <Files .htaccess.sample>
            order allow,deny
            deny from all
        </Files>
        <Files .php_cs>
            order allow,deny
            deny from all
        </Files>
        <Files .travis.yml>
            order allow,deny
            deny from all
        </Files>
        <Files CHANGELOG.md>
            order allow,deny
            deny from all
        </Files>
        <Files CONTRIBUTING.md>
            order allow,deny
            deny from all
        </Files>
        <Files CONTRIBUTOR_LICENSE_AGREEMENT.html>
            order allow,deny
            deny from all
        </Files>
        <Files COPYING.txt>
            order allow,deny
            deny from all
        </Files>
        <Files Gruntfile.js>
            order allow,deny
            deny from all
        </Files>
        <Files LICENSE.txt>
            order allow,deny
            deny from all
        </Files>
        <Files LICENSE_AFL.txt>
            order allow,deny
            deny from all
        </Files>
        <Files nginx.conf.sample>
            order allow,deny
            deny from all
        </Files>
        <Files package.json>
            order allow,deny
            deny from all
        </Files>
        <Files php.ini.sample>
            order allow,deny
            deny from all
        </Files>
        <Files README.md>
            order allow,deny
            deny from all
        </Files>
    ################################
    ## If running in cluster environment, uncomment this
    ## http://developer.yahoo.com/performance/rules.html#etags
        #FileETag none
    ############################################
    ## Add custom headers
    <IfModule mod_headers.c>
        Header set X-Content-Type-Options "nosniff"
        Header set X-XSS-Protection "1; mode=block"
    </IfModule>

    次に、/etc/apache/の中のconfファイル(vhosts.confやapache.confなどから適切なものを書き換え)に下記を追加する。ディレクトリは、Magentoをインストールしたディレクトリに変える。

    <Directory /var/www/html>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                allow from all
     </Directory>

    最後に、Apacheの再起動を行う。

    参考: https://qastack.jp/magento/89125/how-to-fix-magento-2-2-0-0-rc-admin-page-not-found-after-installation

  • Let’s Encryptの証明書更新に失敗していた話

    FreeBSDでLet’s Encryptを使ってWebサーバのSSL証明書を作っている。毎回、手作業で行うのはめんどくさいので、cronで自動的に実行させていた。自動更新させていたが、ある日、証明書の有効期限が切れているとブラウザが警告してきたので、調べたところ・・・pkgのアップデートを少し前にやったときに実行ファイルのバージョン(というかファイル名)が変わっていたようで、そのため、cronは実行されるがエラーになっていた模様。ついでにもともとシンボリックリンクだったはずだが、それも消えていた。

    もともと実行していたコマンド

    /usr/local/bin/certbot renew
    

    今のコマンド

    /usr/local/bin/certbot-2.7 renew
    

    凡ミス。pkgをアップデートするときは、気をつけないといけないな。

  • バーチャルホストで404ページの指定をする方法

    Apache24のバーチャルホストで、独自の404エラーのページを設定する方法。”.htaccess”でもできるが、サイトを閉鎖するときに適用したかったので、”VirtualHost”の設定としておこなった。

    バーチャルホストの設定の中にErrorDocumentの設定を書く。このとき、エラーページのHTMLファイルは、絶対パスで書く。(絶対URLで書いてはいけない。相対パスでも書いてはいけない。)

    ErrorDocument  エラーコード  エラーページのHTMLファイル(絶対パスで書く)
    

    設定例。

    
      DocumentRoot /var/www/blog
      ServerName xxxx.xenos.jp
      ErrorDocument 404 /404.html
    
    

    ※404以外のエラーも表示させるので、あれば、それぞれエラーコードと対応するエラーページを保存し、指定すればよい。

  • ウェブサーバのSSL設定のコンフィグを生成してくれるジェネレータ

    ウェブサーバのSSL設定のコンフィグを生成してくれるジェネレータを、Mozillaが公開している。 NginxもApacheもAWS ELBも生成してくれるので、便利。証明書のパスなどは自分で書き換える必要があるが、ベースになるコンフィグを作ってくれるので、楽。

    もちろん、必要に応じてチューニングは必要だが、ベースは重要。

  • セキュリティのためのログ分析入門

    読了。ログ分析の入門書という位置付けなので、ログ分析のターゲットがウェブで公開されているシステムになっている。そのため、社内のシステムのログ分析などについては応用しにくい。ただ、ウェブサーバを使うシステムであれば、分析を始めるためのきっかけになることが多数書いてあるので、方向性をきめたり、ログ分析を始めるキッカケにはよい本。

    サンプルでスクリプトが多く記載されているので、似たような環境であれば、同じようにログ分析を組めるのもよい。あとは、独自でログ分析をやってしまうと、他はどういうようにやっているのだろう?という疑問が生まれるが、一つのケーススタディというか比較先にも使える。そして、分析はやっぱり、スクリプトを書いて絞り込みというのが主流というのも心強い。汎用化できるところ、できないところ、ケースバイケースなので、迷いがち。それでよいとも言えるので。

    あと、R言語(R Studio)でのログ分析自動化の構築の解説もよい。よくを言えば、Elasticsearch+Kibanaについてあるとよかったけれど、それはそれで本を買えばよいか。

  • pkgでApacheを更新したら、WARNINGで起動せず

    FreeBSDのpkgで、まるっとアップデートしたら、Apache24が起動時に、WARNINGをはいて起動しなくなった。

    ■発生したエラー

    Mar 22 14:22:10 ray root: /etc/rc: WARNING: failed to start apache24
    Mar 22 14:22:10 ray kernel: pid 763 (httpd), uid 0: exited on signal 11 (core dumped)
    

    ■対応

    • OSの再起動したが、変わらず。
    • Apache24の起動も試したが変わらず。
    • 仕方ないので、一度、Apache24をアンインストール。依存していたパッケージもアンインストールされたので、mod_phpも再インストール。
       pkg delete apache24-2.4.29
       pkg install apache24-2.4.29
       pkg install mod_php56-5.6.32_1
      
    • 再インストール後、Apache24を起動させたところ、無事に起動した。
  • Apacheのログに、internal dummy connection が記録される

    Apacheのログに下記のようなローカルアドレスから、internal dummy connection のログが記録される。 このログは何か。

    127.0.0.1 - - [21/Jul/2017:09:39:57 +0900] "OPTIONS * HTTP/1.0" 200 - "-" 
    "Apache/2.4.6 (CentOS) PHP/5.4.16 (internal dummy connection)"

    答えは、Apache 2.2系から追加されたサーバの子プロセスを完全にシャットダウンする機能によって、 dummy connectionが行われて、ここで待ち状態のときに子プロセスが死んでいく、ということのようだ。

    ◆参考にしたページ

    http://d.hatena.ne.jp/dayflower/20060727/1153993531