#author("2023-11-24T16:12:26+00:00","","") #author("2023-11-24T16:29:41+00:00","","") * nginx [#t46ab049] [[nginx>Wikipedia:Nginx]]はNginx, Inc.によって開発されているWebサーバー。~ イベント駆動アプローチを採用しており、静的ファイル配信を得意とする。~ 多くのリクエストを簡単に捌けることから、リバースプロキシ用途やVPSなどで人気がある。~ [[2条項BSDライセンス>Wikipedia:BSDライセンス]]で公開されている。 こういった利点に対し、以下のような欠点もある。 - .htaccessを利用できない - CGIを利用できない(FastCGI, SCGI, uWSGIなどで代替する必要がある) ** PukiWiki を動かすときの注意 [#z92f5f91] [[PukiWiki]]のパッケージには、設置した階層以下の全てで[[.htaccess]]の利用が許可されている場合のWebアクセス制御サンプルしか収録されていない。~ このためnginxで運用するには、nginx.confなどで自らアクセス制御の設定を行い、部外秘のファイルを非公開にする必要がある。 ** Example 1 [#s8b3bd4c] 設定例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/ のようなディレクトリには直接ブラウザからアクセスできないということです。 「デフォルトの応答を404 Not Found」というのはつまり、 wiki/ や cache/, lib/, plugin/ のようなディレクトリには直接ブラウザからアクセスできないということです。 ** Example 2 [#mbcbcaa8] 設定例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; } } ** 危険性 [#z014943f] pukiwiki.ini.phpにはadminパスワードが記載されている((平文パスワードではなくハッシュ化されている。しかし、総当たり攻撃に対して脆弱((ストレッチングされていないため。またmd5/sha1を選択した場合はソルトさえ付与されていないため。))。))ため、絶対に漏らしてはいけない。~ nginxでPukiwikiを動かす場合、''pukiwiki.ini.phpがダウンロードできないことを必ず確認してください''。 "403 Forbidden"が返ってくるか、真っ白なページが表示される((スクリプトとして実行されてしまっているが、何もechoしないため問題にならない。))場合は問題ありません。 ** コメント [#qae1e38f] - Qiita に書こうかなと思いましたがとりあえずこちらに公開しました。~ 「偉そうなこと言ってるけどお前の nginx.conf も間違ってるよ!」などあれば指摘してください。 -- [[bee]] &new{2016-11-20 (日) 02:37:49}; - "危険性"節を修正。.php なので deny しなくてもスクリプトとして実行されますね…。 -- [[bee]] &new{2016-11-20 (日) 05:30:47}; - nginxいいですね。PukiWikiでPHPとしての実行が必要なのは /index.php ( と /skin/pukiwiki.css.php ) だけなのでホワイトリスト方式にしてもよさそうです。以下、デフォルトの応答を404 Not Foundにしておいて「/ と /skin/*.php だけ実行可能」「/image/, /skin/ のみ HTTPアクセス可能」にする設定です。あまり一般的ではないかも -- [[umorigu]] &new{2016-11-22 (火) 00:50:15}; server { listen 80; server_name wiki.example.org; root /var/www/wiki.example.org; location ~ (^/$)|(^/skin/.+\.php$) { # 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; } } -- 本当は skin/ 以下を静的なファイルだけにできると良いのですがデフォルトの構造はそうなっていません。(カスタマイズはもちろん可能です) - 分かりやすくするために順番を変えてみました。「/ と /skin/*.phpはPHPとして実行」「/image, /skinはファイルをそのまま返す」「それ以外は404 Not Found」の設定です -- [[umorigu]] &new{2016-11-23 (水) 00:33:51}; - (unix: /... の文字列もURLとして弾かれてしまうんですね...) -- [[umorigu]] &new{2016-11-23 (水) 00:38:28}; - ホワイトリスト方式のほうが綺麗ですねー。流石です。 -- [[bee]] &new{2016-11-24 (木) 03:50:17}; - ホワイトリスト方式を試させてもらったのですが、最初のlocationは以下としないとindex.phpにアクセスしたときに動作しないのではないでしょうか。-- [[pojiro]] &new{2017-08-15 (火) 22:30:17};~ location ~ (^/$)|(^/index\.php$)|(^/skin/.+\.php$) - はい。その通りです。むしろ、/index.php でアクセスさせないための設定です -- [[umorigu]] &new{2017-08-16 (水) 21:10:12}; - pukiwiki.ini.php の $script_directory_index = 'index.php'; が必要ですよね。 -- [[takotakot]] &new{2018-06-04 (月) 06:13:19}; - より安全な「ホワイトリスト方式」を設定例1として独立させました -- [[umorigu]] &new{2023-11-25 (土) 01:07:27}; #comment()