最後のスラッシュ

nginxにしたら、cgiを呼ぶときに最後に/をつけると動かなくなった。

apacheの時は動いていたのに。

スラッシュがついていると、ディレクトリ指定とみなしているようで、
その後にデフォルトのファイル名、index.cgiをつけてしまうのだ。

とりあえず、下記をnginxの設定に追記して、最後のスラッシュは削除するようにした。

rewrite ^(.+)/$ $1;

apacheからnginxへの移行@centos6.6@さくらのVPS【完結編】

やっとできた。

nginxそのものはcgi実行をサポートしていない。

だから、追加でcgi実行機能をインストールし、それを実行するスクリプトを作って実行する必要がある。

そのスクリプトが書いてなかった。


さあ、PageSpeed Insights の結果は、・・・・0.24秒。

変わらず。apacheのときでも0.24秒が出たことはあった。


ただし、あきらかにこっちの方が速い。




thanks to

http://nullpopopo.blogcube.info/2013/07/nginx-perlcgi.html

https://www.linode.com/docs/websites/nginx/nginx-and-perlfastcgi-on-centos-5/


iptablesの設定をコマンドで追加

私はいつも /etc/sysconfig/iptables をviで直接編集している。

さっき、いつもやらないがコマンドで設定した。

てっきり、コマンドで設定したら上記のファイルに書かれると思っていたが、開いてみるとかかれていない。

設定が反映していないのかと思ったが、iptables -L などで見るとちゃんと有効になっている。

どういうこと?

wwwをつけないとアクセスできない

nginxに移行しようとしていて気づいたのだが、
いつの間にか、urlにwwwをつけないとアクセスできなくなっていた。

そんなところに影響するような設定変更は何もしていないのに。

自宅のパソコンから example.com (仮名)にpingを打つと帰ってくるから、
DNSの問題ではない。

http://example.com/ だとアクセスできなくなっている。

http://www.example.com/ としないと。


おかしいな・・・

なんでだろう・・・


apacheの設定しか考えられない。

実はこないだoom-killerが発動してhttpdが落ちており、再起動した。

そのときに何か保存していない設定が戻ってしまったのか・・・。


クソー、nginxの移行がすんなりいかないと思ったら、今までできてたことができなくなってしまった・・・




iptablesのせいだった。

この前追加した、特定の文字列を含むアクセスを停めるつもりの設定を消したら治った。


でも、あれがないとウザいアクセスが大量に来るんだよな・・・

apacheからnginxへの移行@centos6.6@さくらのVPS

予想以上に難航。

fastcgiとかなんとか。

インストールでコケまくる。

とりあえず、下記ページには助けられた。

http://github.tiankonguse.com/blog/2015/01/19/cgi-nginx-three/


てこずりそうなので、apacheはあげておいて、
nginxは違うポート番号で動かす。



続きは以下で

apacheからnginxへの移行@centos6.6@さくらのVPS【完結編】

iptablesで特定の文字列へのアクセスを拒否する

-A INPUT -m string --to 60 --algo bm --string "wiki" -j DROP


なんかうまくいかないのでマネしないでください。



cssの最適化

adsenseのスコアカードで、cssの最適化がされていないと指摘された。

改善策として、cssの一部をインライン、つまりhtmlファイルの中に直接書いて、
css全体はあとから読むようにする、ということが書いてあった。

そのときは、以下のようにhtmlファイルのheadの部分に、cssファイルをリンクさせていた。

<head>
<link rel="stylesheet" type="text/css" href="http://example.com/css/mycss.css">
</head>


別ファイルを読みに行くのだから時間がかかるだろうとは思うが、
その内容をhtmlの中に直接書くのはイヤだ。

adsenseが言うには、全部ではなくて、初期表示に必要な一部だけ、ということなのだが、
どれが必要でどれが必要でないか判断がつかない。


とりあえず、cssをキャッシュするように、apacheを設定してみた。
apacheで、mod_expireというモジュールを有効にする。

/etc/httpd/conf/httpd.conf

で、下記の行がコメントアウトされていなければよい。

LoadModule expires_module modules/mod_expires.so

そして、下記のように、各ファイルについて有効期限を設定する。
ここに設定した期限が経過するまでは、クライアントはサーバに直接アクセスせず、
キャッシュを参照するそうだ。


<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType image/png "access plus 1 months"
ExpiresByType image/jpeg "access plus 1 months"
ExpiresByType image/gif "access plus 1 months"
ExpiresByType text/css "access plus 12 months"
ExpiresByType text/javascript "access plus 1 weeks"
ExpiresByType application/x-javascript "access plus 1 weeks"
ExpiresByType application/x-shockwave-flash "access 1 years"
ExpiresDefault "access plus 1 days"
</IfModule>

私のサイトは画像を一切使っていない。

今回指摘されたのも、cssについてだけだ。

とりあえず、12 monthsで設定してみた。ここがあまり短いと、警告は消えない。



そして、htmlファイルのheadに記載しているcssファイルへのリンクを、
bodyの後ろ、もっというと、</html>の前に持ってくる。

これをやると、cssを読む前にコンテンツを読み込み、cssを読んだら内容が反映される。

部分的なインライン記述をしなくても、adsenseの警告はこれで消えた。



上記のExpireなんたらの記述は.htaccessに書く方法もあるらしいのだが、
基本的に.htaccessは使わないほうがよさそうなので、httpd.confに書いた。

iptableがftpを通さない

vsftpdをインストールした後、iptablesを有効にしているとftpできなかった。

原因はよくわからず、ftpはあまり使わないので放置していた。

下記の設定が必要であった。

/etc/sysconfig/iptables-config

IPTABLES_MODULES="ip_conntrack_ftp ip_nat_ftp"


こんなこと、1台目ではやった覚えがないけどな・・・

mod_perl

googleアドセンスのスコアカードで、私のサイトのあるページの応答速度が0.26秒であった。

200ミリ以下が理想だそうだ。

apacheの不要なモジュールを停めてみたりしたが効果がない。


mod_perlを入れてみる。


yum -y install mod_perl


/etc/httpd/conf.d/perl.conf

で、必要な設定をコメントアウト


LoadModule perl_module modules/mod_perl.so

PerlSwitches -w

PerlSwitches -T

Alias /perl /var/www/perl
<Directory /var/www/perl>
    SetHandler perl-script
    PerlResponseHandler ModPerl::Registry
    PerlOptions +ParseHeaders
    Options +ExecCGI
</Directory>

<Location /perl-status>
    SetHandler perl-script
    PerlResponseHandler Apache2::Status
    Order deny,allow
    Deny from all
    Allow from .example.com
</Location>


httpd再起動。
速くなったように感じるが、アドセンスの評価は変わらず。


ssl

http://wiki.centos.org/HowTos/postfix_sasl

yum install mod_ssl

yum install crypto-utils genkey --days 365 mail.example.com ※自分のメールサーバ名

ちょっと時間がかかる。


と思ったが、すごくかかる。

collecting random dataで。

全然進まない。

これは、30分くらいかかるか。