2012-06-04 SSHフォワーディング
SSHフォワーディング
特定のIPホストからでしかSSHやsftp,ftpの許可をしていない。
そんな時に活躍するのがSSHフォワーディング。回線もセキュアになります。
$ ssh -L <ローカルポート番号>:<転送先ホスト>:<転送先ポート番号> <ユーザ名>@<リモートホスト>
例えば
$ ssh -L 2222:you_want_to_connect.com:22 yourname@ssh_host.com
としてsshに接続して127.0.0.1(localhost)の2222ポートに対してyou_want_to_connect.com:22に接続するように接続してやります。
はじめは分かりにくいですが分かれば簡単。いつでも一行書けばセキュアな回線で接続が可能になりますね。
2012-06-03 symfony1.4からmemcachedを使う方法 - 基本編
symfony1.4からmemcachedを使う方法 - 基本編
symfonyでmemcachedを利用する方法を簡単にまとめました。
nginx + php5でmemcachedを利用するという方法です。
http://labs.unoh.net/2010/05/symfonydoctrine.html
に詳しくあるのですが更に詳細はこちらを参照ください。
nginx, php-fastcgiでphp5,symfony1.4を動かせていることを前提とします。
http://kmusiclife.hatenablog.com/entry/20111105/1320467309
http://kmusiclife.hatenablog.com/entry/20120509/1336538654
などを参考にしてください。
# apt-get install memcached # apt-get install php5-memcache # apt-get install php5-memcached # /etc/init.d/php-fastcgi restart # /etc/init.d/nginx restart
config/ProjectConfiguration.class.php
public function configureDoctrine(Doctrine_Manager $manager)
{
$servers = array(
array(
'host' => '127.0.0.1',
'port' => 11211,
'persistent' => true),
);
$cacheDriver = new Doctrine_Cache_Memcache(array(
'servers' => $servers,
'compression' => false)
);
$manager->setAttribute(Doctrine_Core::ATTR_QUERY_CACHE, $cacheDriver);
$manager->setAttribute(Doctrine_Core::ATTR_QUERY_CACHE_LIFESPAN, 60); // 結果キャッシュのデフォルトの存続秒数 sec
$manager->setAttribute(Doctrine_Core::ATTR_RESULT_CACHE, $cacheDriver);
$manager->setAttribute(Doctrine_Core::ATTR_RESULT_CACHE_LIFESPAN, 60); // クエリーキャッシュのデフォルトの存続秒数 sec
}
Doctrineからの利用
$this->table_names = Doctrine_Core::getTable('table_name')
->createQuery('a')
->where('a.id =? ', $id)
->useResultCache(true)
->execute();
2012-05-10 macportでnginx/php5.4/phpmyadminを動かすまでザザーッと
macportでnginx/php5.4/phpmyadminを動かすまでザザーッと
php5.4のインストール
$ sudo port install php54 $ sudo port install php54-cgi $ sudo port install php54-mbstring $ sudo port install php54-curl $ sudo port install php54-mcrypt $ sudo port install php54-mysql
うちで出たエラーは下記の通り。対処も同時に。
エラー対処:
$ sudo port install php54 Error: Target org.macports.activate returned: Image error: /opt/local/bin/captoinfo is being used by the active ncursesw port. Please deactivate this port first, or use 'port -f activate ncurses' to force the activation. $ sudo port -f uninstall ncursesw
エラー対処:
$ sudo port install php54 Log for perl5 is at: /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_ports_lang_perl5/perl5/main.log $ sudo port installed perl $ sudo port -f perl5 @5.8.9_0 $ sudo port -f perl5 @5.12.3_1+perl5_12 $ sudo port -f perl5.8 @5.8.9_3 $ sudo port -f perl5.12 @5.12.4_0
spawn-fcgi/nginxのインストール
$ sudo port install nginx $ sudo port install spawn-fcgi
mysql5のインストール
$ sudo port install mysql5-server $ sudo /opt/local/bin/mysql_install_db5
普通に起動するとエラーが出るので下記のように設定変更。
_mysqlの権限を与える必要があります。
$ sudo cd /opt/local/var/db/mysql5 $ sudo chown _mysql:_mysql mysql $ sudo /opt/local/lib/mysql5/bin/mysqld_safe & # mysql5起動
mysql5の起動とパスワードの設定
$ sudo /opt/local/lib/mysql5/bin/mysqld_safe & $ sudo /opt/local/lib/mysql5/bin/mysqladmin -u root password 'new-password'
spawn-cgiを使ってphp-cgiの待ち構え設定
$ sudo vim /bin/php-fastcgi-start
ファイルphp-fastcgi-startの内容:
#! /bin/bash
/opt/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 3 -f /opt/local/bin/php-cgi54
$ sudo /bin/php-fastcgi-start
php.initの設定
$ sudo cd /opt/local/etc/php54 $ sudo cp php.ini-development php.ini $ sudo vim /opt/local/etc/php54/php.ini
pdo_mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock mysqli.default_socket = /opt/local/var/run/mysql5/mysqld.sock date.timezone = Asia/Tokyo
nginxの設定
$ sudo cd /opt/local/etc/nginx $ sudo mv nginx.conf.example nginx.conf $ sudo mv fastcgi_params.example fastcgi_params $ sudo mv scgi_params.example scgi_params $ sudo mv mime.types.example mime.types $ sudo mv uwsgi_params.example uwsgi_params $ sudo vim /opt/local/etc/nginx/nginx.conf
ファイルnginx.confの内容:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include /opt/local/etc/nginx/mime.types;
sendfile on;
keepalive_timeout 65;
#gzip on;
include /opt/local/etc/nginx/sites-enabled/*;
}
$ sudo mkdir /opt/local/etc/nginx/sites-enabled $ sudo vim /opt/local/etc/nginx/sites-enabled/localhost
ファイルlocalhostの内容:
server {
listen 80;
server_name localhost;
access_log /opt/local/var/log/nginx/localhost.log;
error_log /opt/local/var/log/nginx/localhost.error.log;
root /opt/local/var/www;
index index.php;
location /phpmyadmin {
alias /opt/local/share/phpmyadmin;
index index.php;
}
location ~ /phpmyadmin/.*\.php$ {
include /opt/local/etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /opt/local/share/$uri;
}
location ~ ^/.+\.php(/.*)?$ {
set $script $uri;
set $path_info "";
if ($uri ~ "^(.+\.php)(/.+)") {
set $script $1;
set $path_info $2;
}
fastcgi_pass 127.0.0.1:9000;
include /opt/local/etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_NAME $script;
fastcgi_param SCRIPT_FILENAME /opt/local/var/www$script;
fastcgi_param PATH_INFO $path_info;
}
}
nginx起動
$ sudo /opt/local/sbin/nginx
phpmyadminの準備
visit:
http://www.phpmyadmin.net/home_page/downloads.php
$ sudo cd /opt/local/share $ sudo wget http://downloadhost/phpMyAdmin-3.5.1-all-languages.tar.gz $ sudo tar zxvf phpMyAdmin-3.5.1-all-languages.tar.gz $ sudo mv phpMyAdmin-3.5.1-all-languages phpmyadmin $ sudo mv config.sample.inc.php config.inc.php $ sudo vim config.inc.php
メモ:nginxやphp-cgi, mysqlの落とし方など
$ sudo nginx -s reload $ sudo killall php-cgi54 $ sudo /opt/local/bin/mysqladmin5 -u root shutdown
2012-05-09 nginxの各アプリケーション設定(symfony1.4, phpmyadmin)
nginxの各アプリケーション設定(symfony1.4, phpmyadmin)
phpmyadmin:
location /phpmyadmin {
alias /usr/share/phpmyadmin/;
index index.php;
}
location ~ ^/phpmyadmin/.+\.php$ {
root /usr/share/phpmyadmin/;
rewrite /phpmyadmin/(.*\.php?) /$1 break;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/phpmyadmin$fastcgi_script_name;
}
symfony1.4:
nginx0.9x
location / {
if (-f $request_filename) {
expires max;
break;
}
if ($request_filename !~ "\.(js|htc|ico|gif|jpg|png|css)$") {
rewrite ^(.*) /index.php last;
}
}
location /sf/ {
root /usr/share/php/data/symfony/web;
}
location ~ \.php($|/) {
set $script $uri;
set $path_info "";
if ($uri ~ "^(.+\.php)(/.+)") {
set $script $1;
set $path_info $2;
}
fastcgi_pass 127.0.0.1:9000;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME /var/www/symfony1.4/web$script;
fastcgi_param PATH_INFO $path_info;
fastcgi_param SCRIPT_NAME $script;
}
nginx1.x
location /sf/ {
root /usr/share/php/data/symfony/web;
}
location / {
root /var/www/symfony1.4/web/;
index index.php;
if (-f $request_filename) {
expires max;
break;
}
if ($request_filename !~ "\.(js|htc|ico|gif|jpg|png|css)$") {
rewrite ^(.*) /index.php last;
}
}
location ~ \.php($|/) {
set $script $uri;
set $path_info "";
if ($uri ~ "^(.+\.php)(/.+)") {
set $script $1;
set $path_info $2;
}
fastcgi_pass 127.0.0.1:9000;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_NAME $script;
fastcgi_param SCRIPT_FILENAME /var/www/symfony1.4/web$script;
fastcgi_param PATH_INFO $path_info;
}
参考:
2012-03-19 nginx + rapid-ssl導入 - わかりやすいよ
nginx + rapid-ssl導入 - わかりやすいよ
nginx + rapid-sslの導入方法を書きます。SSLって何かとめんどくさいイメージありますが、ファイルがどれがどれかわからなくなるから問題なのです。仕組みがわかっていてもファイルがどれがどれかわからなくなります。この時点でめんどくさいですね。でも簡単になるように説明します。
なんでめんどくさい書き方したブログしかないんだよ(・∀・) という不満があったので。
1.Rapid-SSLで暗号鍵を作成
でSSLを取得します。年間で2,600円ですね。
https://www.rapid-ssl.jp/tools/makePkeyCsr2048.php
ダイレクトアクセスできない場合はトップページ> 新規お申し込み > お申込みフォーム > CSR作成ツールより
で2048ビットの秘密鍵の作成を行います。このツールを使ったほうが楽で確実です。
- 秘密鍵のパスワード - コモンネーム(Common Name) [ 例) ssl.yourdomain.com ] - 正式英語組織名 [ 例) Hentai, Inc. ] - 部門名 [ 例) Design ] - 市区町村名 [ 例) Kanazawa-shi ] - 都道府県名 [ 例) Ishikawa ]
コモンネームはSSL接続の際のURL(FQDN)になります。ここ注意ね。
・秘密鍵 (cert.key ※1)
-----BEGIN RSA PRIVATE KEY----- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -----END RSA PRIVATE KEY-----
・CSR (cert.csr)
-----BEGIN CERTIFICATE REQUEST----- BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB -----END CERTIFICATE REQUEST-----
の2つが表示されます。
cert.key, cert.csrとしてファイルに保存してください。
/etc/nginx/ssl に私は保存しました。
2.Rapid-SSLで登録支払い・メールの確認
https://www.rapid-ssl.jp/ssl/orderForm.php
のオーダーフォームより必要事項を入力。
CSRの貼り付けの項目では上記のcert.csrの内容を貼り付け。
ショッピングの感覚でクレジット決済まで進みます。
承認メールアドレスという項目は postmaster@yourhost.com などでメールを受け取る必要があります。こちらは怠らずおこなってください。
IDがメールで届き、メールが本当に届いているかの確認を行います。
https://www.rapid-ssl.jp/rapidssl-support/ssl-support.htm
でステータスの確認を行います。
メールに書かれているURLをクリックし
RapidSSLのサイトより認証作業を行います。
のような感じになります。
ステータス = 証明書発行完了
になるまでがんばってください。
3.メールの確認、暗号キーのメールの受取り
【通知】 SSL サーバ証明書発行完了のお知らせ
というメールが届くはずです。私はこのようなタイトルでした。
内容は
SSLサーバ証明書:
-----BEGIN CERTIFICATE----- CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC -----END CERTIFICATE-----
中間証明書:
-----BEGIN CERTIFICATE----- DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD -----END CERTIFICATE-----
の2つです。確認できればOKです。
4.サーバ証明書+中間証明書を合体 (・∀・)
nginxではメールで届いた2つの証明書:SSLサーバ証明書、中間証明書をひとつにまとめたファイルにします。
合体証明書 ( cert.pem ※2 )
-----BEGIN CERTIFICATE----- CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD -----END CERTIFICATE-----
としてcert.pemを/etc/nginx/sslに保存。
ここすごく重要なので何度も読みなおすように。
5.ファイルの確認
cert.key ※1とcert.pem ※2がしっかりと手元にあるか確認してください。
cert.key ※1= Rapid-ssl登録時にWEBサイトで作成したものです(秘密鍵)。 cert.pem ※2= メールで送られてきた証明書を2つ合体させたものです(合体証明書)。
この2つがあればnginxのSSLサーバは動きます。
本記事では下記に保存したとして進めてあります。
/etc/nginx/ssl/cert.key /etc/nginx/ssl/cert.pem
6.サーバ設定
nginxのconfファイルを書き換えます。
server {
listen 443;
server_name yourdomain.com;
ssl on;
# 秘密鍵 (cert.key ※1)
ssl_certificate_key /etc/nginx/ssl/cert.key;
# 合体証明書 (cert.pem ※2)
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/ssl_yourdomain.com.log;
error_log /var/log/nginx/ssl_yourdomain.com.error.log;
root /var/www/yourdomain.com;
index index.php;
}
nginx -tコマンドなどを入力すると
# nginx -t Enter PEM pass phrase: 2012/03/19 00:00:00 [info] 00000#0: the configuration file /etc/nginx/nginx.conf syntax is ok 2012/03/19 00:00:00 [info] 00000#0: the configuration file /etc/nginx/nginx.conf was tested successfully
パスワード入力が求められます。Rapid-ssl登録時のものを入力しましょう。
エラーがなければあとは普通に再起動です。
その他:
symfony1.4をnginxでSSL化するときのnginx.confファイル例です
fastcgi_param HTTPS on は見落としがちですので注意してください。
server {
listen 443;
server_name yourdomain.com;
ssl on;
# 秘密鍵 (cert.key ※1)
ssl_certificate_key /etc/nginx/ssl/cert.key;
# 合体証明書 (cert.pem ※2)
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/ssl_yourdomain.com.log;
error_log /var/log/nginx/ssl_yourdomain.com.error.log;
root /var/www/yourdomain.com;
index index.php;
location / {
if (-f $request_filename) {
expires max;
break;
}
if ($request_filename !~ "\.(js|htc|ico|gif|jpg|png|css)$") {
rewrite ^(.*) /index.php last;
}
}
location /sf/ {
root /usr/share/php/data/symfony/web;
}
location ~ \.php($|/) {
set $script $uri;
set $path_info "";
if ($uri ~ "^(.+\.php)(/.+)") {
set $script $1;
set $path_info $2;
}
fastcgi_pass 127.0.0.1:9000;
include /etc/nginx/fastcgi_params;
fastcgi_param HTTPS on; # PHPで_SERVER[HTTPS]のため
fastcgi_param SCRIPT_FILENAME /var/www/yourdmain.com/web$script;
fastcgi_param PATH_INFO $path_info;
fastcgi_param SCRIPT_NAME $script;
}
}
nginx起動時に求められるパスワードを自動化するには?:
# cp cert.key cert.key.org # openssl rsa -in cert.key.org -out cert.key
参考になる:
2012-01-22 Symfony2の簡単チュートリアル(環境整備込み)
Symfony2の簡単チュートリアル(環境整備込み)
まだまだ現役のSymfony1.4.6ですがそろそろサポートも終わり、Symfony2が一般的になる日も近いような気がしてきているこのごろです。Symfony2はSymfony1.4.6と互換性がないといっていいでしょう。1.4.6で利用しているデータベースをSymfony2でモデルと生成して利用するというのが今後の流れになるでしょう。早めにSymfony2に触れておきましょう。
色々とチュートリアルがあるけれども意外と動かなかったり。とりあえずここで書いてあるものは私の環境ではしっかりと動作させたもののみ掲載しています。Debian6.0.3 さくらVPSの上でVPN経由で動かしました。
Symfony2の環境整備
symfony2はPHP5.3.xで動作します。Debian6 SqueezeではPHP5.3が入ります。
Debian5 Lenny等の場合は
http://www.debian.org/releases/stable/i386/release-notes/ch-upgrading.ja.html
などを参考になりますが、Squeezeでのmysqlのバージョンアップで多くが何故かトラブります。
Squeezeではnginxのバージョンも上がりますのでSqueezeへのバージョンアップをお勧めします。
http://d.hatena.ne.jp/Kmusiclife/20120118/1326871846
nginxでsymfony2を動作させます。今のところ下記の設定で動作しています。
app.phpやapp_dev.phpのコントロールもこの辺でできます。
location / {
root /path/symfony2/web;
index index.html index.htm index.php;
}
location ~ \.php|\.html$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /path/symfony2/web$fastcgi_script_name;
}
location ~ \.cgi$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:8999;
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME /path/symfony2/web$fastcgi_script_name;
}
なお、nginxなどの細かい設定は
http://d.hatena.ne.jp/Kmusiclife/searchdiary?word=%2A%5Bnginx%5D
を参考にしてください。
その他、gitなど必要となるソフトも幾つかありますのでその都度確認してください。
Symfony2の簡単チュートリアル
$ wget http://symfony.com/download?v=Symfony_Standard_Vendors_2.0.9.tgz -O Symfony_Standard_Vendors_2.0.9.tgz $ tar zxvf Symfony_Standard_Vendors_2.0.9.tgz $ mv Symfony symfony2 $ cd symfony2
download完了です
$ php app/check.php # 問題がなければ次へ $ php bin/vendors install # vendorの場合は --reinstall を追加
localhost以外からアクセスする場合は
$ vim web/app_dev.php
/* コメントアウトします
if (!in_array(@$_SERVER['REMOTE_ADDR'], array(
'127.0.0.1',
'::1',
))) {
header('HTTP/1.0 403 Forbidden');
exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
}
*/
ブラウザよりアクセスします。
にアクセスします。
Whoops, looks like something went wrong.
などのエラーが出た場合はcacheのパーミッションに問題があることが多いです。
$ chmod -R 777 app/cache app/logs
でcacheのパーミッションを与えます。
welcomeのページが表示されればOKです。
http://hostname/app_dev.php/_configurator
よりデータベースなどの基本設定を行います。
おそらく書き込みエラーが出るので
$ chmod -R 777 app/config/parameters.ini
再度更新してリクエストを送り直せば更新されます。
Doctrine(model)を作成します。
$ php app/console doctrine:generate:entity --entity=AcmeDemoBundle:Product --fields="name:string(255) price:float description:text" --format=yml
を行うことによって
src/Acme/DemoBundle/Entity/Product.php src/Acme/DemoBundle/Resources/config/doctrine/Product.orm.yml
の2つのファイルが作られます。 doctrine:generate:entityで--format=ymlを付けないとProduct.orm.ymlファイルが作成されませんので注意です。
$ php app/console doctrine:database:create $ php app/console doctrine:schema:update --force
でデータベースにテーブルを作りモデルと同期させます。
// src/Acme/DemoBundle/Controller/DemoController.phpなどで
use Acme\DemoBundle\Entity\Product;
public function indexAction()
{
$product = new Product();
$product->setName('Foo bar');
$product->setPrice(100.00);
$product->setDescription('This is test description.');
$em = $this->getDoctrine()->getEntityManager();
$em->persist($product);
$em->flush();
echo $product->getId();
}
とテストコードが動けば問題ないでしょう。
http://hostname/app_dev.php/demo/
などでアクセスできると思います(環境によって異なります)。
この辺のはなしは
http://docs.symfony.gr.jp/symfony2/book/doctrine.html
にもあります。ただ、私はこのチュートリアルではしっかりと動作しませんでした。
2011-11-07 nginxでperl/CGIを利用する方法です on debian6
nginxでperl/CGIを利用する方法 on debian6
下記環境はdebian6です。debian5ではaptでspawn-fcgi, fcgiwrapパッケージは提供されていないのでソースなどからインストール必要があります。
nginxでperl/CGIを動かしました。nginxではcgiを動かす構造そのものは持っていません。phpもphp-fastcgi使います。CGIを動かすためにfastcgi wrapperを使います。
動かし方には2つの方法があります。
1つはUNIX Socketを使う方法、もう一つはTCP Socketを使う方法です。php-fastcgiをTCP Socketで動かしているのであればTCP Socketを使ったほうが管理しやすいかもしれません。
nginxはすでにインストールされているものとします。spawn-fcgiもすでにインストールされていれば下記のapt-get install spawn-fcgiを省いてください。
spawn-fcgiはdebian6でパッケージとして提供されています。debian5ではソースからのインストールが必要です。 http://redmine.lighttpd.net/projects/spawn-fcgi よりspawn-fcgiをインストールしてください。fcgiwrapも提供されていません。fcgiwrapの代わりにfastcgi-wrapper.plを使います。debian5に関しては別途記述します。
# apt-get update # apt-get upgrade # apt-get install fcgiwrap spawn-fcgi
fcgiwrapはnginxからのリクエストをcgiとして実行するラッパーです。
1.UNIX Socketを使ってCGIを実行する方法
/var/www/defaultをWEBサーバのrootとして設定しています。
nginx.conf excerpt:
http {
include /etc/nginx/mime.types;
sendfile on;
keepalive_timeout 65;
tcp_nodelay on;
gzip on;
server {
listen 80 default;
server_name server_name_;
access_log /var/log/nginx/default.log;
error_log /var/log/nginx/default.error.log;
location / {
root /var/www/default;
index index.html index.htm index.php;
}
location ~ \.cgi$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
}
/etc/init.d/fcgiwrap excerpt:
# FCGI_APP Variables FCGI_CHILDREN="1" FCGI_SOCKET="/var/run/$NAME.socket" FCGI_USER="www-data" FCGI_GROUP="www-data"
2.TCP Socketを使ってCGIを実行する方法
/var/www/defaultをWEBサーバのrootとして設定しています。
nginx.conf excerpt:
http {
include /etc/nginx/mime.types;
sendfile on;
keepalive_timeout 65;
tcp_nodelay on;
gzip on;
server {
listen 80 default;
server_name server_name_;
access_log /var/log/nginx/default.log;
error_log /var/log/nginx/default.error.log;
location / {
root /var/www/default;
index index.html index.htm index.php;
}
location ~ \.cgi$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:8999; # php-fastcgiは9000を使うことが多いみたいね
fastcgi_index index.cgi;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
}
/etc/init.d/fcgiwrap excerpt:
# FCGI_APP Variables
FCGI_CHILDREN="1"
FCGI_PORT="8999"
FCGI_ADDR="127.0.0.1"
FCGI_USER="www-data"
FCGI_GROUP="www-data"
最後にnginxとfcgiwrapの(再)起動を忘れずに
# /etc/init.d/fcgiwrap restart # /etc/init.d/nginx restart
debian5などfcgiwrapがパッケージとして利用しない場合(TCP Socket)
fastcgi-wrapper.plを使って8999ポートでTCP Socket接続します。
http://www.ruby-forum.com/topic/145858
よりfastcgi-wrapper.plをダウンロードしています。
ライセンスが明確になっていないのでここでは公開していません。
# cd /usr/bin # wget http://www.ruby-forum.com/attachment/1583/fastcgi-wrapper.pl # chmod 755 /usr/bin/fastcgi-wrapper.pl # apt-get install libcgi-fast-perl
fastcgi-wrapper.plのコメントアウトをつけ変える。
$socket = FCGI::OpenSocket( "127.0.0.1:8999", 10 ); #use IP sockets # $socket = FCGI::OpenSocket( "/var/run/nginx/perl_cgi-dispatch.sock", 10 );
fastcgi-wrapper起動スクリプト:
# vim /etc/init.d/fastcgi-wrapper
fastcgi-wrapperの編集:
#!/bin/bash
### BEGIN INIT INFO
# Provides: fastcgi-wrap
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the fastcgi-wrap
# Description: starts the fastcgi-wrap
### END INIT INFO
TARGET_SCRIPT=/usr/bin/fastcgi-wrapper.pl
FASTCGI_USER=www-data
RETVAL=0
PIDFILE=/var/run/fastcgi-wrapper.pid
case "$1" in
start)
su - $FASTCGI_USER -c $TARGET_SCRIPT
pgrep -u $FASTCGI_USER fastcgi-wrapper > $PIDFILE
RETVAL=$?
;;
stop)
killall -9 fastcgi-wrapper.pl
echo '' > $PIDFILE
RETVAL=$?
;;
restart)
killall -9 fastcgi-wrapper.pl
echo '' > $PIDFILE
su - $FASTCGI_USER -c $TARGET_SCRIPT
pgrep -u $FASTCGI_USER fastcgi-wrapper > $PIDFILE
RETVAL=$?
;;
*)
echo "Usage: fastcgi-wrapper {start|stop|restart}"
exit 1
;;
esac
exit $RETVAL
console output
# chmod 755 /etc/init.d/fastcgi-wrapper # update-rc.d fastcgi-wrapper defaults
nginx.confはTCP Socketと同じなので8999ポートでpassしてやってください。
参考:
http://wiki.nginx.org/Fcgiwrap
http://wiki.nginx.org/SimpleCGI
http://library.linode.com/web-servers/nginx/perl-fastcgi/ubuntu-11.04-natty?format=print
2011-11-05 nginx x fastcgiでphp5を動かす on debian
nginxでphp5を利用する方法です。apache2からようやく乗り換えました。
fastcgiが一番ややこしかったのでメモしておきます。下記環境はdebian5です。
環境はさくらVPS上のdebianです。
1.nginx, php5関係のインストール
# apt-get update # apt-get upgrade # apt-get install nginx php5-cli php5-cgi php5-gd spawn-fcgi
debian5ではspawn-fcgiはaptから入れられません。
http://redmine.lighttpd.net/projects/spawn-fcgi
よりソースからspawn-fcgiをインストールしてください。
# wget http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz # tar zxvf spawn-fcgi-1.6.3.tar.gz # cd spawn-fcgi-1.6.3 # ./configure # make # make install
2.php-fastcgiの作成と編集(spawn-fcgiのwrapper)
# vim /usr/bin/php-fastcgi
#! /bin/sh /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 6 -u www-data -f /usr/bin/php5-cgi # /usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 6 -u www-data -f /usr/bin/php5-cgi
# chmod 755 /usr/bin/php-fastcgi
ソースからspawn-fcgiを入れた場合のパスは/usr/local/bin/spawn-fcgiになります。
またphp5-cgiが存在しなくともエラーは出ませんので注意してください。
3./etc/init.d/php-fastcgiを作成
2で設定したようにfastcgiはデーモンとして駐在します。fastcgiを起動スクリプト。
/etc/init.d/ 以下に を作成
# vim /etc/init.d/php-fastcgi
#!/bin/bash
### BEGIN INIT INFO
# Provides: php-fastcgi
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the php-fastcgi
# Description: starts the php-fastcgi
### END INIT INFO
PHP_SCRIPT=/usr/bin/php-fastcgi
FASTCGI_USER=www-data
RETVAL=0
PIDFILE=/var/run/php5-cgi.pid
case "$1" in
start)
su - $FASTCGI_USER -c $PHP_SCRIPT
pidof php5-cgi > $PIDFILE
RETVAL=$?
;;
stop)
killall -9 php5-cgi
echo '' > $PIDFILE
RETVAL=$?
;;
restart)
killall -9 php5-cgi
su - $FASTCGI_USER -c $PHP_SCRIPT
pidof php5-cgi > $PIDFILE
RETVAL=$?
;;
*)
echo "Usage: php-fastcgi {start|stop|restart}"
exit 1
;;
esac
exit $RETVAL
console output
# chmod 755 /etc/init.d/php-fastcgi # update-rc.d php-fastcgi defaults # /etc/init.d/php-fastcgi start
起動すると
spawn-fcgi: child spawned successfully: PID: 0000
というメッセージが出ます。
2142 ? Ss 0:00 /usr/bin/php5-cgi 2143 ? S 0:00 /usr/bin/php5-cgi 2144 ? S 0:00 /usr/bin/php5-cgi 2145 ? S 0:00 /usr/bin/php5-cgi 2146 ? S 0:00 /usr/bin/php5-cgi 2147 ? S 0:00 /usr/bin/php5-cgi 2148 ? S 0:00 /usr/bin/php5-cgi
デーモンとしてphp5-cgiが駐在します。
4.nginxの設定
# mkdir /var/www/yourhostname.com # chown -R www-data:www-data /var/www/yourhostname.com # vim /etc/nginx/nginx.conf
nginx.confの内容
user www-data;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
sendfile on;
keepalive_timeout 65;
tcp_nodelay on;
gzip on;
server {
listen 80;
server_name yourhostname.com;
access_log /var/log/nginx/yourhostname.com.log;
error_log /var/log/nginx/yourhostname.com.error.log;
location / {
root /var/www/yourhostname.com;
index index.html index.htm index.php mtview.php;
}
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/yourhostname.com$fastcgi_script_name;
}
}
}
設定ファイルの説明はそれほど必要ではないと思います。
ApacheでいうDirectoryIndexesがindex項目になり、DocumentRootがroot項目に。
ここではテンプレートだけを載せておきます。詳細は検索してください。
私が実験した環境では自動で起動しないようになっていましたので
# update-rc.d nginx defaults
nginxの起動
# /etc/init.d/nginx start # nginxの起動
2130 ? Ss 0:00 nginx: master process /usr/sbin/nginx 2131 ? S 0:00 nginx: worker process
としてnginxが駐在します。
nginxの設定ファイルのリロード、構文チェックは下記のとおりです。
リロード:nginx -t 構文チェック:nginx -s reload
あとは/var/www/yourdomain.comにindex.phpなどでphpを動かすだけです。
エラーが出たときに
「No input file specified.」のエラー
fastcgi_param SCRIPT_FILENAME /var/www/yourhostname.com$fastcgi_script_name; のパスが間違っている場合。php cgiの場所が不明のエラー。
参考:
http://library.linode.com/web-servers/nginx/php-fastcgi/ubuntu-10.04-lucid
http://wiki.nginx.org/FcgiExampleJa
http://hima-j.in/linux/sakura-vps-ubuntu-10-04-nginx-php-fastcgi-web-server/
2011-02-14
exim4 x gmailのスマートホストによるメール送信(メール送信はこれが便利かな)
sendmailを使いたいが信頼度の高いsmtp経由させてメールを送信させたい。exim4のスマートホストなら簡単に設定ができます。
http://highfrontier.ldblog.jp/tag/GMail
からほとんど引用させてもらっています。私も試してしっかりと動いたのでメモ+自分用保存で掲載させて頂きました。
# dpkg-reconfigure exim4-config
1. General type of mail configuration: スマートホストでメール送信; SMTP または fetchmail で受信する
2. System mail name: localhost
3. IP-addresses to listen on for incoming SMTP connections: 127.0.0.1
4. Other destinations for which mail is accepted: localhost
5. Machines to relay mail for:
6. IP address or host name of the outgoing smarthost: smtp.gmail.com:587
7. Hide local mail name in outgoing mail? <No>
8. DNS クエリの数を最小限に留めますか (ダイヤルオンデマンド)? <No>
9. ローカルメールの配送方式: /var/mail/ 内の mbox 形式
10. Split configuration into small files? <Yes>
の順番でうまくいきます。下記のスクリーンショットを貼っておきます。
設定が終わると
# vi /etc/exim4/passwd.client
gmail-smtp.l.google.com:youraccount@gmail.com:yourpassword *.google.com:yourassount@gmail.com:yourpassword smtp.gmail.com:yourassount@gmail.com:yourpassword
の内容です。削ってもいい部分ありますが。
ローカルのユーザとgmailを結びつけるには下記の設定を行います。
# vim /etc/exim4/email-addresses
内容は
yourasount@localhost: yoursccount@gmail.com
最後にexim4を再起動します。
# /etc/init.d/exim4 restart
Google Appsの独自ドメインでもアカウント名の部分(上記ではyouraccount@gmail.comの部分)を
自分のドメインにすることで対応が可能です。
2010-11-16
bind9の基本的なセキュリティを備えた設定
Web System, Servers, MacOS/Linux/FreeBSD
ネームサーバのセキュリティ、DNSリフレクション、DNS ampなどを使って悪用されたりすることが多いと言われています。
http://web-tan.forum.impressrd.jp/e/2009/01/15/4414
http://www.atmarkit.co.jp/fwin2k/win2ktips/781dnsamp/dnsamp.html
基本的な設定ができていれば問題はないはずなのですがなかなか慣れないとbindの設定は難しいものです。recursionの設定とLOGさえしっかりと行っておくと万が一の対応も出来るかと思います。本当に基本的な設定、ゾーンファイルの定義などはここでは説明していません。ゾーンファイルの書き方、設定の仕方はgoogleなどで検索してみてください。bindの基本的な設定は下記のとおり。
/etc/bind/named.confファイル
include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.logging"; include "/etc/bind/named.conf.zones"; include "/etc/bind/named.conf.local";
/etc/bind/named.conf.zonesファイル
acl localnet {
127.0.0.1;
};
view "internal" {
match-clients { localnet; };
recursion yes;
allow-recursion { localnet; };
allow-query { localnet; };
allow-transfer{ localnet; };
zone "." {
type hint;
file "/etc/bind/db.root";
};
zone "localhost" {
type master;
file "/etc/bind/db.local";
};
zone "127.in-addr.arpa" {
type master;
file "/etc/bind/db.127";
};
zone "0.in-addr.arpa" {
type master;
file "/etc/bind/db.0";
};
zone "255.in-addr.arpa" {
type master;
file "/etc/bind/db.255";
};
};
view "external" {
match-clients{ any; };
allow-query { any; };
recursion no;
zone "yourdomain.com" {
type master;
file "/etc/bind/yourdomain.com.zone";
};
};
/etc/bind/named.conf.optionsファイル
options {
directory "/var/cache/bind";
recursion no;
allow-query { none; };
allow-transfer{ none; };
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
};
/etc/bind/named.conf.loggingファイル
logging {
channel "log_default"{
file "/var/log/named/named.log" versions 7 size 10m;
severity info;
print-time yes;
print-category yes;
};
channel "log_security" {
file "/var/log/named/security.log" versions 3 size 10m;
severity info;
print-time yes;
print-category yes;
};
category default { "log_default"; };
category security { "log_security"; };
category client { "log_security"; };
};
設定ファイルの構文チェックは
# named-checkconf
で行います。
設定してもこれをどうテストするかというのも重要です。テスト、デバック方法がわからないというケースが意外と多くあるように思います。
# tcpdump -n udp and port 53 // パケットの閲覧 # tail -f /var/log/named/security.log // namedログファイルの閲覧 # dig yourdomain.com @nameserver.com // 実際にDNSへの問い合わせ nameserver.comへ問い合わせ
ゾーン設定のテンプレもついでにのせておきます。
google appsの設定をサンプルにしておきました。
/etc/bind/yourdomain.com.zoneファイル
$TTL 3600
@ IN SOA ns1.yourdomain.com. info.yourdomain.com. (
2011110601
3600
900
36000
3600
)
IN NS ns1.yourdomain.com.
;
IN MX 1 aspmx.l.google.com.
IN MX 5 alt1.aspmx.l.google.com.
IN MX 5 alt2.aspmx.l.google.com.
IN MX 10 aspmx2.googlemail.com.
IN MX 10 aspmx3.googlemail.com.
;
IN A 0.0.0.0
ns1 IN A 0.0.0.0
www IN A 0.0.0.0
;
mail IN CNAME ghs.google.com.
docs IN CNAME ghs.google.com.
calendar IN CNAME ghs.google.com.
sites IN CNAME ghs.google.com.
start IN CNAME ghs.google.com.
;
google._domainkey 86400 IN TXT ("v=DKIM1; k=rsa; p=XXXXXXXXXXXXX")
ゾーン設定ファイルの詳細なチェックは
# named-checkconf -z
などで出来ます。
2010-10-08
さくらVPSにDebianを入れて運用する方法
さくらVPNが980円/月という格安で非常に高いスペック、しかも当たり前ですがroot権限付きです。
CentOSが標準ですが使い慣れたDebianを入れて運用する方法をまとめました。同じ方法でubuntuもfreebsdも簡単にはいります。
流れは簡単で
1 さくらから送られてくる情報を待つ(rootパスワードが書かれたメールが来るまで待ちましょう)
2 さくらVPSコントロールパネル、リモートコンソールから作業
https://secure.sakura.ad.jp/vpscontrol/main/
https://secure.sakura.ad.jp/vpscontrol/main/console
3 CentOSの設定情報の確認とメモ
4 debian OS(netboot)をDownload
5 VNCコンソールの利用(viを利用しやすいため)
https://secure.sakura.ad.jp/vpscontrol/main/vnc
6 grub.confの書き換え
7 再起動
8 debianのインストール
9 debian各設定
という流れです。
急ぎがちですがさくらから送られてくるrootパスワードとIPアドレスが書かれているメールが届いてから作業を行ないましょう。
1 さくらから送られてくる情報を待つ
急ぎがちですがさくらから送られてくるrootパスワードとIPアドレスが書かれているメールが届いてから作業を行ないましょう。
2 さくらVPSコントロールパネル、リモートコンソールから作業
さくらからrootパスワードが送られてくれば下記からVPSサーバの利用ができます
3 CentOSの設定情報の確認とメモ
初期に入っているCentOSの設定情報を控えます。控える内容は
ifconfig -a
hostname
/etc/resolv.conf
/etc/sysconfig/network-scripts/ifcfg-eth0
の内容です。
IPアドレス、ネットマスク、ゲートウェイ、DNSサーバくらい分かっていれば問題ないです。
ネットマスクが 255.255.254.0 ですので間違えないようにしてください。
cat /etc/resolv.conf
#cat /etc/resolv.conf nameserver xxx.xxx.xxx.xxx nameserver xxx.xxx.xxx.xxx search sakura.ne.jp
ifconfig -a
ifconfig -a
eth0 Link encap:Ethernet HWaddr 52:54:00:00:74:14
inet addr:xxx.xxx.xxx.xxx Bcast:xxx.xxx.xxx.xxx Mask:255.255.254.0
inet6 addr: ff::ff:ff:ff:0000/00 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1358 errors:0 dropped:0 overruns:0 frame:0
TX packets:52 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:87903 (85.8 KiB) TX bytes:4445 (4.3 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
sit0 Link encap:IPv6-in-IPv4
NOARP MTU:1480 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
/etc/sysconfig/network-scripts/ifcfg-eth0
# cat /etc/sysconfig/network-scripts/ifcfg-eth0 ifcfg-eth0 DEVICE=eth0 IPADDR=xxx.xxx.xxx.xxx NETMASK=255.255.254.0 GATEWAY=xxx.xxx.xxx.xxx ONBOOT=yes
hostname
www0000u.sakura.ne.jp
とにかくメモっておきましょう。
4 debian OS(netboot)をDownload
debian OSをdownloadします。/boot/debianで作業します
# mkdir /boot/debian # cd /boot/debian # wget http://ftp.jp.debian.org/debian/dists/lenny/main/installer-i386/current/images/netboot/debian-installer/i386/initrd.gz # wget http://ftp.jp.debian.org/debian/dists/lenny/main/installer-i386/current/images/netboot/debian-installer/i386/linux
リモートコンソールでヤンクできるのかな?
どうやってコピーしていいのか分からなかったので手打ちしました。
5 VNCコンソールの利用(viを利用しやすいため)
リモートコンソールではviが使えるの?使えなかったのでさくらvpsの
VNCコンソールでサーバを触ります。
https://secure.sakura.ad.jp/vpscontrol/main/vnc
AppletによるVNCクライアントです。
6 grub.confの書き換え
起動用のgrub.confの書き換えです
# /boot/grub # vi /boot/grub/grub.conf
/boot/grub/grub.conf
title debian install root (hd0,0) kernel /debian/linux ro root=LABEL=/ console=tty0 console=ttyS0,115200n8r initrd /debian/initrd.gz
console=ttyS0,115200n8rはさくらvpsのリモートコンソールを利用するためです
さくらの「よくある質問(FAQ)」ページは移転しました|さくらインターネット
7 再起動
CentOSを再起動します
# sync # sync # sync # reboot
8 debianのインストール
再起動中前にgrubの起動OSの選択画面で
debian install を選択します。間違えてCentOSを起動してしまった場合は
さくらvpsのコントロールパネルからでも立ち上がったCentOSからでも再起動してください。
Debianが立ち上がればあとは普通にDebian OSをインストールするだけ。
言語は英語版でしか入れれず(おそらく)、キーボードは日本語(Standard)を必ず選択してください。
インストール時にIPアドレスなどの入力があるのでキーボードは使い慣れた日本語が良いと思います。
なお、タイムゾーン、ロケールなど後に設定できますので適当でもかまいません。
9 debian各設定
debianが入ってしまえばあとは簡単。
# apt-get update # apt-get upgrade # dpkg-reconfigure tzdata # タイムゾーンの再設定 # dpkg-reconfigure locales # ロケールの再設定 # dpkg-reconfigure exim4-config # EXIM4の再設定
25番ポートはさくらのほうで住所の確認、支払いの確認が出来次第利用ができるようになります。
したがって、25番ポートは無料利用期間は利用できません。






















