LINEで送る
B! はてぶでブックマーク
Pocketでブックマーク
RSSフィード

CentOS7にNginxをインストールする方法

nginx ロゴ
ロゴはnginx.comの商標です。本サイトがNGINX公認であることを示していません。

CentOS7にWebサーバーのNginxを個別インストールします。いまではあまり使う機会がないので忘れちゃってました。その備忘録です。

いまは、クラウド・レンタルサーバーのサービスでインスタンス・イメージが用意されています。

(管理画面で選んでクリックするだけで済む。)

このへんのインストール作業はしない傾向です。まずはそれを検討しましょう。

今回はあくまで、『個人の力でやる』ためのものです。

検証CnetOSバージョン7.7.1908

Nginxのインストール

Nginxはyumでインストールできますが、リポジトリを追加しないといけません。

/etc/yum.repos.d/

にリポジトリファイルを作成します。

nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

(centos/7/$base...はCentOSのメジャー・バージョン番号)

インストールします。

yum install nginx

OS起動時に自動起動するように設定してnginxを起動しましょう。

systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
systemctl start nginx

ブラウザでWebサーバーにアクセスして、

nginx 初期ページ

このページが表示されたらOKです。

php-fpmインストール

PHPプログラムを使うならNginxはphp-fpmが必要です。yumコマンドでインストールします。

PHP5.6
yum install php-fpm
PHP7
yum install --enablerepo=remi,remi-php74 php-fpm

OS起動時に自動起動するように設定して起動しましょう。

systemctl enable php-fpm
Created symlink from /etc/systemd/system/multi-user.target.wants/php-fpm.service to /usr/lib/systemd/system/php-fpm.service.
systemctl start php-fpm

ダウンロード先リポジトリに気をつける

リポジトリを指定しないとき、CentOS7に標準で入っているPHP5.6と同じリポジトリからインストールします。

PHP7のときはremiリポジトリからインストールします。

(remiはPHP7のパッケージ・リポジトリ)

もちろん、リポジトリでphp-fpmの最新バージョンはちがいます。

標準リポジトリ
yum info php-fpm
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp-srv2.kddilabs.jp
 * epel: ftp.iij.ad.jp
 * extras: ftp-srv2.kddilabs.jp
 * remi-safe: ftp.riken.jp
 * updates: ftp-srv2.kddilabs.jp
Available Packages
Name        : php-fpm
Arch        : x86_64
Version     : 5.4.16
Release     : 46.1.el7_7
Size        : 1.4 M
Repo        : updates/7/x86_64
Summary     : PHP FastCGI Process Manager
URL         : http://www.php.net/
License     : PHP and Zend and BSD
Description : PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI
            : implementation with some additional features useful for sites of
            : any size, especially busier sites.
remi-php74リポジトリ
yum info --enablerepo=remi,remi-php74 php-fpm
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp-srv2.kddilabs.jp
 * epel: ftp.iij.ad.jp
 * extras: ftp-srv2.kddilabs.jp
 * remi: mirror.sjc02.svwh.net
 * remi-php74: mirror.sjc02.svwh.net
 * remi-safe: mirror.sjc02.svwh.net
 * updates: ftp-srv2.kddilabs.jp
Available Packages
Name        : php-fpm
Arch        : x86_64
Version     : 7.4.2
Release     : 1.el7.remi
Size        : 1.8 M
Repo        : remi-php74
Summary     : PHP FastCGI Process Manager
URL         : http://www.php.net/
License     : PHP and Zend and BSD and MIT and ASL 1.0 and NCSA
Description : PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI
            : implementation with some additional features useful for sites of
            : any size, especially busier sites.

リポジトリはphpに合わせてください。

php-commonのバージョン違いでインストールに失敗します。

php-fpmってなんぞや?

php-fpmは、

PHPのFastCGI Process Manager

です。PHPプログラムを速く動かすためのWebサーバーの拡張機能。

(Apache httpdでも使える。)

Nginx + php-fpmでは、

Nginxリバースプロキシサーバー
php-fpmWebサーバー

と見たほうがしくみが分かりやすいです。

(Nginx + php-fpmでシステムとしての『Webサーバー』)

NginxはApacheなどほかのWebサーバーのリバースプロキシとして使うことが多い。

サイトにアクセスがあると、Nginxはphpプログラムの仕事をphp-fpmに丸投げし、結果(htmlなど)だけを受け取ってブラウザに返します。

じっさいNginxは、キャッシュやロードバランサーなどの機能がリバースプロキシとして重宝されてます。

ロードバランサーは、大きなWebシステムで複数のWebサーバーがあるとき、サイトアクセスの処理を各Webサーバーへ振り分ける。

PHPプログラムを動かす設定

Nginxの初期ページをphpプログラムに変更してみましょう。

/usr/share/nginx/html/index.htmlをコピーしてindex.phpファイルを用意します。

/usr/share/nginx/html/index.php
<?php
?>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx! <?php echo "index.php"; ?></h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

1-2行目を追加して

<?php
?>

15行目を変更しました。

<h1>Welcome to nginx! <?php echo "index.php"; ?></h1>

次に、php-fpmの設定ファイルを変更します。

/etc/php-fpm.conf

php-fpmの設定ファイルを編集してプロセス実行権限を変更します。(初期値はapache)

nginxの実行ユーザー・ユーザーグループを確認します。

groups nginx
nginx : nginx

/etc/php-fpm.confの設定を変更しましょう。

変更後
; RPM: apache user chosen to provide access to the same directories as httpd
;user = apache
user = nginx

; RPM: Keep a group allowed to write in log dir.
;group = apache
group = nginx

設定を反映させます。

systemctl reload php-fpm

php-fpmのプロセスを確認します。

ps -auxf | grep nginx
root      4486  0.0  0.0 112712   964 pts/1    S+   10:48   0:00                          \_ grep --color=auto nginx
root      1081  0.0  0.0  46448  1128 ?        Ss   09:15   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx     1085  0.0  0.1  46856  2160 ?        S    09:15   0:00  \_ nginx: worker process
nginx     4372  0.0  0.3 265772  6184 ?        S    10:30   0:00  \_ php-fpm: pool www
nginx     4373  0.0  0.3 265772  6184 ?        S    10:30   0:00  \_ php-fpm: pool www
nginx     4374  0.0  0.3 265772  6184 ?        S    10:30   0:00  \_ php-fpm: pool www
nginx     4375  0.0  0.3 265772  6184 ?        S    10:30   0:00  \_ php-fpm: pool www
nginx     4376  0.0  0.3 265772  6188 ?        S    10:30   0:00  \_ php-fpm: pool www

/etc/nginx/conf.d/default.conf

nginxの初期ページのデフォルトホスト設定も変更しましょう。

nginxのホスト設定にはphp-fpmの設定がすでにあり、コメント化されています。そのコメントを外します。

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        include        fastcgi_params;
    }

そしてindexをhtmlからphpに変えます。

    location / {
        root   /usr/share/nginx/html;
#        index  index.html index.htm;
        index  index.php;
    }

設定を反映させます。

systemctl reload nginx

デフォルト設定で失敗

『よっしゃ。これでイケる!』と思いましたが、index.phpファイルをダウンロードしようとして失敗します。

nginxのエラーログを見ます。

/var/log/nginx/error.log
2020/01/26 11:58:27 [error] 4899#4899: *21 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 192.168.33.1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "other.test"

ありました、エラーが。もう一度、設定を確認します。

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        include        fastcgi_params;
    }

スクリプトファイルのパス(/scripts...)が間違ってますね?

rootパスも間違ってるし。そこでパスを修正します。

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           /usr/share/nginx/html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

$document_rootはWebサーバーの公開ディレクトリのルート。

(rootで設定した値)

あと、"root /usr/share/nginx/html;" はほかでも使っているので、ひとつ上の階層(server{})に移しましょう。

完成したdefault.confです。

default.conf fix
server {
    listen       80;
    server_name  localhost;
    root   /usr/share/nginx/html;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
#        index  index.html index.htm;
        index  index.php;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

"systemctl reload nginx"して、ブラウザからアクセスします。

nginx+php-fpm index.php page

上手くいきました。今回のnginx+php-fpmの設定は初期ページを表示するための最低限です。

その他の設定は必要になったら追加・変更していきましょう。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください