ホームページ >バックエンド開発 >PHPチュートリアル >Nginx および PHP-FPM 権限のセキュリティ構成
環境:
$ useradd -u 1201 -s /sbin/nologin -d /dev/null blog1🎜WordPress 圧縮パッケージを解凍し、ファイルの所有者を変更します。🎜 所有者の変更により、PHP-FPM はサイトの読み取りと書き込みの権限を持ちます。 files.🎜
CREATE DATABASE dbblog1;CREATE USER 'blog1'@'localhost' IDENTIFIED BY '<password>';GRANT ALL ON dbblog1.* TO 'blog1'@'localhost';FLUSH PRIVILEGE;🎜PHP-FPM 構成:🎜 🎜まずメイン構成 /etc/php/fpm-php5.6 /php-fpm.conf を変更します: 🎜 🎜プール定義内のすべての構成項目をコメントアウトします。つまり、デフォルトの wwwPool; インクルード項目を有効にします: 🎜
$ tar zxvf wordpress-4.4.2-zh_CN.tar.gz$ mv wordpress blog1$ chown -R blog1 blog1$ ls -alhd blog1drwxr-xr-x 5 blog1 nogroup 4.0K Feb 3 08:13 blog1🎜 各 Web サイトの独立した php-fpm 構成 (詳細な説明については、デフォルトの構成を参照してください): 🎜
; Include one or more files. If glob(3) exists, it is used to include a bunch of; files from a glob(3) pattern. This directive can be used everywhere in the; file.; Relative path can also be used. They will be prefixed by:; - the global prefix if it's been set (-p argument); - /usr/lib64/php5.6 otherwiseinclude=/etc/php/fpm-php5.6/etc/fpm.d/*.conf🎜 アクセス許可を制御し、サイト ファイルの読み取りと書き込みを行うようにユーザーを構成します 🎜 🎜 listen を構成します。 .owner/group を使用して、nginx が php-fpm と通信できるようにします。 🎜 🎜 chroot をサイト ディレクトリに設定して、コマンド pwdx で指定されたプロセスの現在の作業ディレクトリを表示できます。 🎜
$ cat /etc/php/fpm-php5.6/etc/fpm.d/blog1.conf[blog1]user = blog1 ; php-fpm子进程的uidgroup = nogrouplisten = /var/run/php-fpm-blog1.socklisten.owner = nginx ; sock通信文件的属主, 和nginx通信listen.group = nginx ; sock通信文件的属组, 和nginx通信listen.mode = 0660pm = dynamicpm.max_children = 5pm.start_servers = 2pm.min_spare_servers = 1pm.max_spare_servers = 3chroot = /var/www/blog1chdir = /🎜 Nginx 設定: 🎜
$ ps aux | grep phproot 5646 0.0 0.3 247836 7192 ? Ss 14:55 0:00 php-fpm: master process (/etc/php/fpm-php5.6/php-fpm.conf)blog1 5647 0.0 0.6 247944 13884 ? S 14:55 0:00 php-fpm: pool blog1blog1 5648 0.0 0.6 247812 13192 ? S 14:55 0:00 php-fpm: pool blog1blog2 5649 0.0 1.4 251840 29756 ? S 14:55 0:00 php-fpm: pool blog2blog2 5650 0.0 0.3 247812 6636 ? S 14:55 0:00 php-fpm: pool blog2root 10071 0.0 0.1 112700 2100 pts/4 S+ 15:52 0:00 grep --color php$ pwdx 56475647: /var/www/blog1🎜 fastcgi_param 設定に注意してください。それがデフォルトの場合: 🎜
server { listen 80; server_name blog1.tankywoo.com; index index.php; access_log /var/log/nginx/blog1_log main; error_log /var/log/nginx/blog1_error_log; root /var/www/blog1/; location ~ .php$ { try_files $uri =404; fastcgi_pass unix:///var/run/php-fpm-blog1.sock; include fastcgi.conf; fastcgi_param SCRIPT_FILENAME /$fastcgi_script_name; }}🎜 PHP-FPM (fastcgi) は、index.php、つまり /var/ www/blog1/inex.php.🎜 を読み取ります。 FPM は chroot で構成されており、このディレクトリは chroot の後のディレクトリです 🎜 🎜 つまり、/var/www/blog1/var/www/blog1/index は実際には .php を読み取られます 🎜 プロセス中に、いくつかのエラーが発生しました: 🎜 🎜php-fpm log:🎜 🎜 🎜php-fpm chroot FastCGI が stderr で送信されました: アップストリームから応答ヘッダーを読み取り中に「プライマリ スクリプトが不明です」🎜 🎜 🎜 php ファイルが見つかりません。理由は、fastcgi の SCRIPT_FILENAME 構成が構成されていないことです。 🎜 🎜 🎜データベース接続に失敗しました🎜 🎜 🎜その理由は、WordPress がデフォルトでソケット経由でデータベースに接続し、この時点で Web サイトが chroot されているため、sock ファイルが見つからないためです。🎜 🎜 方法 1 はマウントすることです。 sock ファイル: 🎜
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;🎜 ただし、この方法は完璧ではありません。 🎜 🎜方法 2 は、tcp、wp-config.php を介して MySQL に接続するように WordPress を変更することです: 🎜
$ mkdir -p /var/www/blog1/var/run/mysqld$ mount --bind /var/run/mysqld /var/www/blog1/var/run/mysqld🎜参考リンク: 🎜 🎜 🎜 Nginx と PHP-FPM の構成と最適化のヒントとコツ 🎜 🎜 複数の Web サイトを安全にホストする方法Ubuntu 14.04 の Nginx と Php-fpm 🎜 🎜 Nginx + PHP-FPM と chroot 🎜 🎜 Apache + PHP-FPM + chroot の結果「ファイルが見つかりません。」エラー 🎜 🎜 🎜 🎜 🎜