サーバー設定 · 6 min read · Sep 13, 2025

完璧なサーバー - OpenSUSE 12.3 x86_64 (nginx, Dovecot, ISPConfig 3) - ページ 4

10 Nginx、PHP5 (PHP-FPM)、および Fcgiwrap のインストール

Nginx は OpenSUSE 用のパッケージとして利用可能で、以下のようにインストールできます。

zypper install nginx

もし Apache2 がすでにシステムにインストールされている場合は、今すぐ停止してください…

systemctl stop apache2.service

… そして Apache のシステム起動リンクを削除します:

systemctl disable apache2.service

次に、nginx のシステム起動リンクを作成し、起動します:

systemctl enable nginx.service  
systemctl start nginx.service

(もし Apache2 と nginx の両方がインストールされている場合、ISPConfig 3 インストーラーはどちらを使用するか尋ねます - この場合は nginx と答えてください。もしこれらのうちの一方のみがインストールされている場合、ISPConfig は必要な設定を自動的に行います。)

nginx の vhosts で IPv6 アドレスを使用したい場合は、ISPConfig で IPv6 vhosts を作成する前に以下を行ってください:

/etc/sysctl.conf を開き…

vi /etc/sysctl.conf

… そして次の行を追加します net.ipv6.bindv6only = 1:

| [...] net.ipv6.bindv6only = 1 |

その後、変更を有効にするために…

sysctl -p

nginx で PHP5 を動作させるために PHP-FPM を使用します (PHP-FPM (FastCGI プロセスマネージャ) は、特に忙しいサイトに役立つ追加機能を持つ PHP FastCGI の代替実装です) これを以下のようにインストールします:

zypper install php5-fpm

PHP-FPM を開始する前に、/etc/php5/fpm/php-fpm.conf.default を /etc/php5/fpm/php-fpm.conf に名前変更します:

mv /etc/php5/fpm/php-fpm.conf.default /etc/php5/fpm/php-fpm.conf

PHP のセッションディレクトリの権限を変更します:

chmod 1733 /var/lib/php5

次に /etc/php5/fpm/php-fpm.conf を開き…

vi /etc/php5/fpm/php-fpm.conf

… そして error_log を /var/log/php-fpm.log に変更します:

| [...] error_log = /var/log/php-fpm.log [...] |

OpenSUSE 12.3 では PHP-FPM 用の php.ini ファイルがないため、CLI php.ini をコピーします:

cp /etc/php5/cli/php.ini /etc/php5/fpm/

次に /etc/php5/fpm/php.ini を開き…

vi /etc/php5/fpm/php.ini

… そして cgi.fix_pathinfo を 0 に設定します:

| [...] ; cgi.fix_pathinfo は CGI に対して *実際の* PATH_INFO/PATH_TRANSLATED サポートを提供します。 PHP の ; 以前の動作は PATH_TRANSLATED を SCRIPT_FILENAME に設定し、PATH_INFO が何であるかを理解しませんでした。 ; PATH_INFO に関する詳細は CGI 仕様を参照してください。 これを 1 に設定すると、PHP CGI は仕様に従ってパスを修正します。 0 の設定は PHP を以前のように動作させます。 デフォルトは 1 です。 スクリプトを修正して PATH_TRANSLATED ではなく SCRIPT_FILENAME を使用する必要があります。 ; http://php.net/cgi.fix-pathinfo cgi.fix_pathinfo=0 [...] |

次に php-fpm のシステム起動リンクを作成し、再起動します:

systemctl enable php-fpm.service  
systemctl restart php-fpm.service

PHP-FPM はポート 9000 で FastCGI サーバーを実行するデーモンプロセスです。次の出力で確認できます。

netstat -tapn
server1:~ # netstat -tapn  
 アクティブなインターネット接続 (サーバーと確立された接続)  
 Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name  
 tcp        0      0 127.0.0.1:3310          0.0.0.0:*               LISTEN      10357/clamd  
 tcp        0      0 0.0.0.0:143              0.0.0.0:*               LISTEN      9869/dovecot  
 tcp        0      0 0.0.0.0:80               0.0.0.0:*               LISTEN      10521/nginx  
 tcp        0      0 0.0.0.0:22               0.0.0.0:*               LISTEN      1275/sshd  
 tcp        0      0 127.0.0.1:25             0.0.0.0:*               LISTEN      9816/master  
 tcp        0      0 127.0.0.1:9000           0.0.0.0:*               LISTEN      10695/php-fpm.conf)  
 tcp        0      0 127.0.0.1:10024          0.0.0.0:*               LISTEN      10337/amavisd (mast  
 tcp        0      0 0.0.0.0:3306             0.0.0.0:*               LISTEN      9694/mysqld  
 tcp        0      0 192.168.0.100:22        192.168.0.199:4630      ESTABLISHED 1332/0  
 tcp        0      0 :::22                     :::*                     LISTEN      1275/sshd  
 tcp        0      0 ::1:25                   :::*                     LISTEN      9816/master  
 server1:~ #

PHP で MySQL サポートを得るために、php5-mysql パッケージをインストールできます。アプリケーションに必要な他の PHP5 モジュールもインストールするのが良いアイデアです:

zypper install php5-mysql php5-bcmath php5-bz2 php5-calendar php5-ctype php5-curl php5-dom php5-ftp php5-gd php5-gettext php5-gmp php5-iconv php5-imap php5-ldap php5-mbstring php5-mcrypt php5-odbc php5-openssl php5-pcntl php5-pgsql php5-posix php5-shmop php5-snmp php5-soap php5-sockets php5-sqlite php5-sysvsem php5-tokenizer php5-wddx php5-xmlrpc php5-xsl php5-zlib php5-exif php5-pear php5-sysvmsg php5-sysvshm

今、PHP-FPM を再起動します:

systemctl restart php-fpm.service

nginx で CGI サポートを得るために、Fcgiwrap をインストールします。

Fcgiwrap は、複雑な CGI スクリプトにも対応する CGI ラッパーで、各 vhost が独自の cgi-bin ディレクトリを使用できるため、共有ホスティング環境で使用できます。

OpenSUSE 用の fcgiwrap パッケージはないため、自分でビルドする必要があります。まず、いくつかの前提条件をインストールします:

zypper install git patch automake glibc-devel gcc flex compat-readline4 db-devel wget gcc-c++ make vim libtool FastCGI-devel

次のシンボリックリンクを作成します:

ln -s /usr/include/fastcgi/fastcgi.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgi_config.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgi_stdio.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgiapp.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgimisc.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgio.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgios.h /usr/local/include/

これで、fcgiwrap を以下のようにビルドできます:

cd /usr/local/src/  
git clone git://github.com/gnosek/fcgiwrap.git  
cd fcgiwrap  
autoreconf -i  
./configure  
make  
make install

これにより、fcgiwrap が /usr/local/sbin/fcgiwrap にインストールされます。

次に、fcgiwrap をデーモンとして実行できる spawn-fcgi パッケージをインストールします:

zypper install spawn-fcgi

次のように fcgiwrap を起動できます:

spawn-fcgi -u wwwrun -g www -s /var/run/fcgiwrap.socket -S -M 0770 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/local/sbin/fcgiwrap

これで、/var/run/fcgiwrap.socket に fcgiwrap ソケットが見つかるはずで、所有者は wwwrun、グループは www です。次に、nginx ユーザーを www グループに追加する必要があります:

usermod -a -G www nginx

その後、nginx をリロードします:

systemctl reload nginx.service

システムを起動するたびに fcgiwrap を手動で起動したくない場合は、/etc/init.d/boot.local を開き…

vi /etc/init.d/boot.local

… そしてファイルの最後に spawn-fcgi コマンドを追加します - これにより、起動プロセスの最後に fcgiwrap が自動的に起動します:

| [...] /usr/bin/spawn-fcgi -u wwwrun -g www -s /var/run/fcgiwrap.socket -S -M 0770 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/local/sbin/fcgiwrap |

これで完了です!nginx vhost を作成すると、ISPConfig が正しい vhost 設定を処理します。

10.1 phpMyAdmin のインストール

次に phpMyAdmin をインストールします:

zypper install phpMyAdmin

これにより Apache が依存関係としてインストールされるため、Apache のシステム起動リンクを削除します:

systemctl disable apache2.service

phpMyAdmin は現在 /srv/www/htdocs/phpMyAdmin ディレクトリにありますが、/usr/share/phpmyadmin/ ディレクトリに配置したいので、シンボリックリンクを作成します:

ln -s /srv/www/htdocs/phpMyAdmin /usr/share/phpmyadmin

ISPConfig 3 をインストールした後、次のように phpMyAdmin にアクセスできます:

ISPConfig アプリ vhost はポート 8081 で nginx 用の phpMyAdmin 設定が付属しているため、http://server1.example.com:8081/phpmyadmin または http://server1.example.com:8081/phpMyAdmin を使用して phpMyAdmin にアクセスできます。

/ phpmyadmin または / phpMyAdmin エイリアスを使用したい場合、これは Apache よりも少し複雑です。なぜなら nginx にはグローバルエイリアスがないからです (つまり、すべての vhosts に対して定義できるエイリアス)。したがって、phpMyAdmin にアクセスしたい vhost に対してこれらのエイリアスを定義する必要があります。

これを行うには、ISPConfig のウェブサイトのオプションタブの nginx ディレクティブフィールドに次の内容を貼り付けます:

| location /phpmyadmin { root /usr/share/; index index.php index.html index.htm; location ~ ^/phpmyadmin/(.+\.php)$ { try_files $uri =404; root /usr/share/; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include /etc/nginx/fastcgi_params; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } location /phpMyAdmin { rewrite ^/* /phpmyadmin last; } |

vhost に対して http s を使用する場合、phpMyAdmin 設定に次の行 fastcgi_param HTTPS on; を追加する必要があります:

| location /phpmyadmin { root /usr/share/; index index.php index.html index.htm; location ~ ^/phpmyadmin/(.+\.php)$ { try_files $uri =404; root /usr/share/; fastcgi_pass 127.0.0.1:9000; fastcgi_param HTTPS on; # <-- この行を追加 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include /etc/nginx/fastcgi_params; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } location /phpMyAdmin { rewrite ^/* /phpmyadmin last; } |

vhost に対して http と https の両方を使用する場合、/etc/nginx/nginx.conf の http {} セクションに次のセクションを追加する必要があります (すべての include 行の前に) これにより、訪問者が http または https を使用しているかを判断し、$fastcgi_https 変数を設定します (これは phpMyAdmin 設定で使用します):

vi /etc/nginx/nginx.conf

| [...] http { [...] ## HTTPS が使用されているかを検出 map $scheme $fastcgi_https { default off; https on; } [...] } [...] |

その後、nginx をリロードするのを忘れないでください:

systemctl reload nginx.service

次に、nginx ディレクティブフィールドに戻り、fastcgi_param HTTPS on; の代わりに fastcgi_param HTTPS $fastcgi_https; の行を追加して、http および https リクエストの両方で phpMyAdmin を使用できるようにします:

| location /phpmyadmin { root /usr/share/; index index.php index.html index.htm; location ~ ^/phpmyadmin/(.+\.php)$ { try_files $uri =404; root /usr/share/; fastcgi_pass 127.0.0.1:9000; fastcgi_param HTTPS $fastcgi_https; # <-- この行を追加 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include /etc/nginx/fastcgi_params; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } location /phpMyAdmin { rewrite ^/* /phpmyadmin last; } |

11 PureFTPd のインストール

pure-ftpd FTP デーモンをインストールします。実行:

zypper install pure-ftpd
systemctl enable pure-ftpd.service  
systemctl start pure-ftpd.service

次に、PureFTPd を構成して FTP および TLS セッションを許可します。FTP は非常に安全でないプロトコルで、すべてのパスワードとすべてのデータが平文で転送されます。TLS を使用することで、通信全体を暗号化でき、FTP をはるかに安全にします。

TLS には OpenSSL が必要です。OpenSSL をインストールするには、単に次を実行します:

zypper install openssl

/etc/pure-ftpd/pure-ftpd.conf を開き…

vi /etc/pure-ftpd/pure-ftpd.conf

FTP TLS セッションを許可したい場合は、TLS を 1 に設定します:

| [...] # このオプションは 3 つの値を受け入れることができます : # 0 : SSL/TLS 暗号化レイヤーを無効にする (デフォルト)。 # 1 : 従来のセッションと暗号化されたセッションの両方を受け入れる。 # 2 : SSL/TLS セキュリティメカニズムを使用しない接続を拒否する、 # 匿名セッションを含む。 # これを盲目的にコメント解除しないでください。 確認してください : # 1) サーバーが SSL/TLS サポート (--with-tls) でコンパイルされていること、 # 2) 有効な証明書があること、 # 3) 互換性のあるクライアントのみがログインすること。 TLS 1 [...] |

TLS セッションのみを受け入れたい場合 (FTP はなし) は、TLS を 2 に設定します:

| [...] # このオプションは 3 つの値を受け入れることができます : # 0 : SSL/TLS 暗号化レイヤーを無効にする (デフォルト)。 # 1 : 従来のセッションと暗号化されたセッションの両方を受け入れる。 # 2 : SSL/TLS セキュリティメカニズムを使用しない接続を拒否する、 # 匿名セッションを含む。 # これを盲目的にコメント解除しないでください。 確認してください : # 1) サーバーが SSL/TLS サポート (--with-tls) でコンパイルされていること、 # 2) 有効な証明書があること、 # 3) 互換性のあるクライアントのみがログインすること。 TLS 2 [...] |

TLS を全く許可しない (FTP のみ) は、TLS を 0 に設定します:

| [...] # このオプションは 3 つの値を受け入れることができます : # 0 : SSL/TLS 暗号化レイヤーを無効にする (デフォルト)。 # 1 : 従来のセッションと暗号化されたセッションの両方を受け入れる。 # 2 : SSL/TLS セキュリティメカニズムを使用しない接続を拒否する、 # 匿名セッションを含む。 # これを盲目的にコメント解除しないでください。 確認してください : # 1) サーバーが SSL/TLS サポート (--with-tls) でコンパイルされていること、 # 2) 有効な証明書があること、 # 3) 互換性のあるクライアントのみがログインすること。 TLS 0 [...] |

TLS を使用するためには、SSL 証明書を作成する必要があります。私はそれを /etc/ssl/private/ に作成しますので、まずそのディレクトリを作成します:

mkdir -p /etc/ssl/private/

その後、次のように SSL 証明書を生成できます:

openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

国名 (2 文字コード) [AU]: <– あなたの国名を入力します (例: “DE”).
州または県名 (フルネーム) [Some-State]: <– あなたの州または県名を入力します。
市名 (例: city) []: <– あなたの市名を入力します。
組織名 (例: company) [Internet Widgits Pty Ltd]: <– あなたの組織名を入力します (例: あなたの会社名)。
組織単位名 (例: section) []: <– あなたの組織単位名を入力します (例: “IT 部門“).
共通名 (例: YOUR name) []: <– システムの完全修飾ドメイン名を入力します (例: “server1.example.com”).
メールアドレス []: <– あなたのメールアドレスを入力します。

SSL 証明書の権限を変更します:

chmod 600 /etc/ssl/private/pure-ftpd.pem

最後に PureFTPd を再起動します:

systemctl restart pure-ftpd.service

これで完了です。FTP クライアントを使用して接続を試みることができます。ただし、FTP クライアントを TLS を使用するように構成する必要があります - 次の章で FileZilla での設定方法を説明します。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。