nginx

nginxはNginx, Inc.によって開発されているWebサーバー。
イベント駆動アプローチを採用しており、静的ファイル配信を得意とする。
多くのリクエストを簡単に捌けることから、リバースプロキシ用途やVPSなどで人気がある。
2条項BSDライセンスで公開されている。

こういった利点に対し、以下のような欠点もある。

PukiWiki を動かすときの注意

PukiWikiのパッケージには、設置した階層以下の全てで.htaccessの利用が許可されている場合のWebアクセス制御サンプルしか収録されていない。
このためnginxで運用するには、nginx.confなどで自らアクセス制御の設定を行い、部外秘のファイルを非公開にする必要がある。

Example 1

設定例1

server {
  listen 80;
  server_name wiki.example.org;

  root /var/www/wiki.example.org;
  location ~ (^/$) {
    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }
  location ~ ^/(skin|image)/ {
  }
  location / {
    return 404;
  }
}

「デフォルトの応答を404 Not Found」にしておいて「/ だけPHPとして実行可能」「/image/, /skin/ のみ HTTPアクセス可能」にする設定です。

「デフォルトの応答を404 Not Found」というのはつまり、 wiki/ や cache/, lib/, plugin/ のようなディレクトリには直接ブラウザからアクセスできないということです。

Example 2

設定例2

server {
	listen 80;
	listen [::]:80;

	server_name wiki.example.org;

	root /var/www/wiki.example.org/;
	index index.php;

	location / {
		try_files $uri $uri/ =404;
	}

	# deny .htaccess, .htpasswd, .gitignore and .git/
	location ^~ /. { deny all; }

	# deny directories
	location ~ ^/(attach|backup|cache|counter|diff|lib|plugin|wiki|wiki.en)/ { deny all; }

	# deny files
	location ~ \.(htaccess|ini\.php|lng\.php|skin\.php|txt|gz|tgz|zip)$ { deny all; }

	location ~ \.php$ {
		fastcgi_pass unix:/run/php/php7.0-fpm.sock;
		fastcgi_split_path_info ^(.+?\.php)(/.*)$;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		include fastcgi_params;
	}
}

危険性

pukiwiki.ini.phpにはadminパスワードが記載されている*1ため、絶対に漏らしてはいけない。
nginxでPukiwikiを動かす場合、pukiwiki.ini.phpがダウンロードできないことを必ず確認してください

"403 Forbidden"が返ってくるか、真っ白なページが表示される*3場合は問題ありません。

コメント



*1 平文パスワードではなくハッシュ化されている。しかし、総当たり攻撃に対して脆弱*2
*2 ストレッチングされていないため。またmd5/sha1を選択した場合はソルトさえ付与されていないため。
*3 スクリプトとして実行されてしまっているが、何もechoしないため問題にならない。

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-11-25 (土) 01:29:41
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 0.361 sec.

SourceForge