今日はもう一つ! nginxの設定について | わたくしが あらゆるネタを書き綴るっ

わたくしが あらゆるネタを書き綴るっ

日頃のつぶやきや                                                              時には役立つ情報を書くかも?

今作成中のサイトのサーバーなのですが、
今まではオーソドックスなapacheを使っていました!
ただ、将来的に大きくなってセッション数が増えてくると
apacheでは少し荷が重いということで
「nginx」というのを使うことにしました!
しかし、apacheと違ってまったくわかりません。

かなり苦労しました笑
分かっている人なら簡単なのでしょうが、サーバー管理は初めてでして...

簡単なところははしょって、はまったところを書いていきます。
インストールとかは比較的簡単です。

とりあえず僕の環境としては、nginx上でPerlを動かしています!
それについて書きます。

まず、apacheとちがってnginxはそのままcgiを使えません。
そのため、fastcgiというのを使います。

fastcgiもとりあえずインストールしちゃいましょう!

それでは設定を

#vim /etc/nginx/sites-enabled/default
標準の環境ではここに設定ファイルがあるはず!

server {
include /etc/nginx/mime.types;
listen 80 default;
server_name localhost;

access_log /var/log/nginx/localhost.access.log;

location / {
root /var/www/;
index sns.cgi index.html index.htm;
gzip off;
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
fastcgi_index sns.cgi;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
}


location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico)$ {
root /var/img;
access_log off;
expires 30d;
  }
}

細かいディレクトリとかは各自の環境に合わせてください
あと、location /の中にcgi実行の命令を入れてしまっていますが、
僕のサイトの構成上htmlは使わないし、sns.cgiがメインプログラムなのでこのようにしています。

これで、http://example.com/のようにアクセスしたときに、
直接sns.cgiを実行してあげるというわけです!

単純にcgiファイルだったときに飛ばす方法がわからなかったので
強引にこうしただけなのですが...

さて、しかしこれでは問題が発生してしまいます。
すべてのアクセスが原則としてcgiとして実行されてしまうので
画像の表示が出来なくなってしまいました!

ここまでで既に数時間試行錯誤していたのですが、
とりあえずCGIが動いただけでもかなりの進歩です!
しかしせっかくここまでやったので画像も表示したい...

ひたすら調べて頑張りました!
上記にはもう答え書いてあるのですが
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico)$ {
root /var/img;
access_log off;
expires 30d;
  }


これでなんとか表示できるようになりました!

.jpgとか .jpegとか .gifとか
画像の拡張子が指定されて実行されたときは
画像ディレクトリに飛ばして画像表示するよ!って感じだと思います。
これならfastcgiの実行もないので正常に表示するのだと思います!

画像のディレクトリは
/var/www/ではなく
/var/img/にしています
cgiと同じ場所に画像を格納しておくのなら
/var/www/でもいいとおもいますが、
一応別のディレクトリにしています!

文で書き起こすとあっという間なのですが、
ここまでやるのにほんと何時間もかかってます笑

nginxはphpとあわせて使うのが多いみたいで
なかなかnginxとperlの組み合わせの資料がないんですよね...
英語のドキュメントはいっぱいあるのですが、僕にはわかりません。

なのでひたすら
nginx perl 設定
とか
nginx perl fastcgi
とか
nginx perl サーバー
とか
色々調べまくりました!

最終的には色々やってるうちに
/var/run/に
fcgiwrap.socketという
fastcgiを使う用のソケットが出来ていたようなので
それを使うことで解決しました!
しかし画像の問題もひたすら試行錯誤しました。

nginx 画像 表示できない
とか
nginx perl 画像 表示
とか
perl 画像 表示できない
とか
とにかくひたすら調べました!
しかし、全然ヒットしませんでした笑

まぁ僕が強引にすべてのアクセスをcgi処理するということをした結果の
副産物として起きていたことですからね。

最終的には画像を指定した場合は普通に出力するようにして解決したというわけです!

後はperl側で
<img src=./aaa.png>のように指定してあげれば
自動的に
/var/img/aaa.pngを参照してくれるので
正常に表示できるというわけです!

nginxとperlの日本語ドキュメントは本当に少ないので、
同じように迷っている方が居たら助けになれたらなとおもい書いてみました!

本当にわけもわからず試行錯誤していますが、
よかったら見守ってあげてください!