「インストール - Nginx(RHEL)」の版間の差分
582行目: | 582行目: | ||
一般的には、1つのWebサイトごとに1ファイル、<ドメイン名>.confのような名前を付ける。<br> | 一般的には、1つのWebサイトごとに1ファイル、<ドメイン名>.confのような名前を付ける。<br> | ||
<br> | <br> | ||
* NginXの設定ファイルにまとめて記述する場合<br> | |||
# パッケージ管理システムからインストールしている場合 | # パッケージ管理システムからインストールしている場合 | ||
sudo vi /etc/nginx/ | sudo vi /etc/nginx/default.conf | ||
# ソースコードからインストールしている場合 | # ソースコードからインストールしている場合 | ||
590行目: | 590行目: | ||
<br> | <br> | ||
<syntaxhighlight lang="nginx"> | <syntaxhighlight lang="nginx"> | ||
# nginx.confファイル | # /etc/nginx/default.confファイル または /<Nginxのインストールディレクトリ>/etc/nginx.confファイル | ||
http { | http { | ||
637行目: | 637行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
一般的に、仮想ホストの設定ファイルは、/etc/nginx/vhost.dディレクトリ、または、/<NginXのインストールディレクトリ>/etc/vhosts.dディレクトリに配置する。 | * 仮想ホストごとに分割して設定する場合 | ||
*: 一般的に、仮想ホストの設定ファイルは、/etc/nginx/vhost.dディレクトリ、または、/<NginXのインストールディレクトリ>/etc/vhosts.dディレクトリに配置する。 | |||
# パッケージ管理システムからインストールしている場合 | # パッケージ管理システムからインストールしている場合 | ||
sudo vi /etc/nginx/vhost.d/vhost1.conf | sudo vi /etc/nginx/vhost.d/vhost1.conf | ||
645行目: | 646行目: | ||
<br> | <br> | ||
<syntaxhighlight lang="nginx"> | <syntaxhighlight lang="nginx"> | ||
# vhost1.confファイル | # /etc/nginx/vhost.d/vhost1.confファイル または /<Nginxのインストールディレクトリ>/etc/vhost.d/vhost1.confファイル | ||
server { | server { | ||
688行目: | 689行目: | ||
上記で作成した仮想ホストの設定ファイルを読み込むため、NginXの設定ファイルを編集する。<br> | 上記で作成した仮想ホストの設定ファイルを読み込むため、NginXの設定ファイルを編集する。<br> | ||
# パッケージ管理システムからインストールしている場合 | # パッケージ管理システムからインストールしている場合 | ||
sudo vi /etc/nginx/ | sudo vi /etc/nginx/default.conf | ||
# ソースコードからインストールしている場合 | # ソースコードからインストールしている場合 | ||
694行目: | 695行目: | ||
<br> | <br> | ||
<syntaxhighlight lang="nginx"> | <syntaxhighlight lang="nginx"> | ||
# nginx.confファイル | # /etc/nginx/default.confファイル または /<Nginxのインストールディレクトリ>/etc/nginx.confファイル | ||
http { | http { |
2023年12月3日 (日) 05:12時点における版
概要
NginXとは、Apacheと並ぶWebサーバソフトウェアの1つであり、処理速度や機能面で注目を集めている。
NginXのメリットを、以下に示す。
- 高速である。
- 大量処理が得意である。
- Webサイトの利用を向上させる機能が豊富である。
- 設定が容易である。
Webサーバに同時に複数のアクセスがあった場合、下表に示すように動作の違いがある。
Apache 2 | NginX | |
---|---|---|
同時・複数アクセスへの対処方法 | 1アクセスに対して、1つの対応 | 複数のアクセスに対して、1つの対応にまとまる |
アクセス急増時のサーバへの負荷 | 一気に負荷が増す | アクセスに比例して負荷は急激に増えない |
その結果のWebサーバの挙動 | 動作が遅くなり、ダウンしやすくなる | 処理速度を維持して、ダウンしにくい |
例えば、Webサーバの負担を軽くして処理速度を上げる手段として、リバースプロキシやロードバランサー等があり、これらを実現する場合、Nginxが向いている。
NginXのデメリットを、以下に示す。
- 大量の動的コンテンツの処理に不向き
- 一般的には、大量の動的コンテンツの公開(動画を中心としたWebサイト等)には向かないことがNginXのデメリットとして挙げられる。
- ただし、比較的小規模のWebサイトを運営する場合は、それほど神経質にならなくてもよい。
- 機能追加のしやすさ
- 専用のモジュールを追加することにより、Nginxも機能を拡張することができる。
- ただし、Apacheの方が、実装方法について比較的充実し、情報が豊富でわかりやすい。
- Apache モジュール一覧
- https://httpd.apache.org/docs/trunk/ja/mod/
- NGINX 3rd Party Modules
- https://www.nginx.com/resources/wiki/modules/
- 初心者向けの設定情報の少なさ
- 設定等の情報が少ない。
参考書 | |||
---|---|---|---|
nginx実践ガイド IT技術者のための現場ノウハウ |
nginx実践入門 高速/安定稼働を実現する構築と運用のテクニック |
Nginx ポケットリファレンス |
Nginx HTTP Server Nginxを利用して、高速なページ配信を実現する |
NginXのインストール
パッケージ管理システムからインストール
まず、システムの更新を行う。
sudo dnf update
次に、NginXをインストールする。
NginXは、RHELの公式リポジトリからインストールできる。
ただし、常に最新バージョンが提供されるとは限らない。
sudo dnf install nginx
NginXサービスを自動起動する。
sudo systemctl enable nginx
NginXを開始する。
sudo systemctl start nginx
NginXのステータスを確認する場合は、次のコマンドを実行する。
sudo sytemctl status nginx
ソースコードからインストール
NginXのビルドに必要なライブラリをインストールする。
sudo dnf install libxslt-devel pcre2-devel gd-devel GeoIP-devel # GeoIPを使用する場合 libcurl-devel # Passengerを使用する場合 kernel-headers kernel-devel # AIOを使用する場合
必要ならば、OpenSSLの公式Webサイトにアクセスして、OpenSSL(1.X.Y)のソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。
tar xf openssl-<バージョン>
- Digest認証モジュールを使用する場合
- NginXのソースコードと一緒に配布されていないため、別途インストールする必要がある。
- Digest認証モジュールのGithubにアクセスして、ソースコードをダウンロードする。
- ダウンロードしたファイルを解凍する。
tar xf nginx-http-auth-digest-<バージョン>.tar.gz
- または、
git clone
コマンドを実行して、ソースコードをダウンロードする。 git clone https://github.com/atomx/nginx-http-auth-digest.git
- NginXのソースコードと一緒に配布されていないため、別途インストールする必要がある。
- Passengerモジュールを使用する場合 (Rails連携)
- NginXのソースコードと一緒に配布されていないため、別途インストールする必要がある。
- Passengerモジュールの公式webサイトにアクセスして、ソースコードをダウンロードする。
- ダウンロードしたファイルを解凍する。
tar xf passenger-<バージョン>.tar.gz
cd passenger-<バージョン>
- NginXのソースコードと一緒に配布されていないため、別途インストールする必要がある。
NginX 1.9.11以降から、configure
スクリプト実行時において、
--add-module=<PATH>
オプションの代わりに--add-dynamic-module=<PATH>
オプションを使用して、モジュールを動的モジュールとしてコンパイルすることができる。
そして、load_module
ディレクティブを使用して、nginx.confファイルで明示的にモジュールをロードすることができる。
load_module /path/to/modules/<モジュール名>.so;
NginXの公式Webサイトにアクセスして、NginXのソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。
tar xf nginx-<バージョン>.tar.xz cd nginx-<バージョン>
NginXをビルドおよびインストールする。
Digest認証モジュールも併せてビルドおよびインストールする場合、
configure
スクリプトにおいて、--add-module=<Digest認証モジュールのソースコードがあるディレクトリ>
オプションを付加する。
NginXのビルドにおいて、ビルドディレクトリを作成すると失敗することに注意する。
export NGINX_DIR=<NginXのインストールディレクトリ> ./configure \ --prefix=$NGINX_DIR \ --sbin-path=$NGINX_DIR/sbin/nginx \ --conf-path=$NGINX_DIR/etc/nginx.conf \ --pid-path=$NGINX_DIR/nginx.pid \ --modules-path=$NGINX_DIR/modules/ \ --error-log-path=$NGINX_DIR/log/error.log \ --http-log-path=$NGINX_DIR/log/access.log \ --lock-path=$NGINX_DIR/nginx.lock \ --http-client-body-temp-path=$NGINX_DIR/tmp/ \ --http-proxy-temp-path=$NGINX_DIR/proxy/ \ --http-fastcgi-temp-path=$NGINX_DIR/fastcgi/ \ --http-uwsgi-temp-path=$NGINX_DIR/uwsgi/ \ --http-scgi-temp-path=$NGINX_DIR/scgi/ \ --with-perl_modules_path=$NGINX_DIR/Perl \ --with-threads --with-file-aio --with-pcre --with-pcre-jit \ --with-http_v2_module --with-http_ssl_module --with-http_addition_module --with-http_realip_module --with-http_flv_module \ --with-http_random_index_module --with-http_degradation_module --with-http_slice_module --with-http_dav_module --with-http_mp4_module \ --with-http_xslt_module --with-http_xslt_module=dynamic \ --with-http_image_filter_module --with-http_image_filter_module=dynamic \ --with-http_geoip_module=dynamic --with-http_gunzip_module --with-http_gzip_static_module \ --with-http_auth_request_module --with-http_secure_link_module --with-http_stub_status_module --with-http_sub_module \ --with-http_perl_module --with-http_perl_module=dynamic \ --with-mail --with-mail=dynamic --with-mail_ssl_module \ --with-stream=dynamic --with-stream_ssl_module --with-stream_realip_module --with-stream_ssl_preread_module \ --with-compat \ --user=<任意のユーザ名 例. nginx> \ --group=<任意のグループ名 例. nginx> # 不要の可能性あり --without-poll_module --without-select_module --with-ipv6 # Digest認証を使用する場合 --add-module=<Digest認証モジュールのソースコードがあるディレクトリ> # Passengerを使用する場合 --add-module=/<Passengerモジュールのディレクトリ>/src/nginx-module # GCCコンパイラを指定する場合 --with-cc=/<gcc実行ファイルがあるディレクトリ>/gcc \ --with-cpp=/<g++実行ファイルがあるディレクトリ>/g++ # OpenSSLを手動で設定する場合に記述する --with-openssl=<上記でダウンロードおよび解凍したOpenSSLのソースコードのトップディレクトリ> # 以下の設定はAIOを使用する場合に記述する --with-cc-opt='-fmessage-length=0 -grecord-gcc-switches -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchron ous-unwind-tables -fstack-clash-protection -g -fPIC -D_GNU_SOURCE' \ --with-ld-opt='-Wl,-z,relro,-z,now -pie' make -j $(nproc) make install
configureスクリプト実行時において、--user=<ユーザ名>
および--group=<グループ名>
を付加した場合、それぞれユーザとグループを作成する必要がある。
sudo useradd --system --no-create-home --user-group --shell /sbin/nologin nginx
Systemdサービスユニットを作成しない場合、NginXを開始するには、以下のコマンドを実行する。
cd <NginXのインストールディレクトリ>/sbin sudo ./nginx
Systemdサービスユニットを作成しない場合、NginXを停止するには、以下のコマンドを実行する。
- 方法 1
cd <NginXのインストールディレクトリ>/sbin
sudo ./nginx -s stop
- または
sudo ./nginx -s quit
- 方法 2
- まず、NginXのプロセスIDを確認する。
ps aux | grep -i nginx
- NginXを停止する。
sudo kill <プロセスID 1> <プロセスID 2>
Systemdサービスユニットを作成しない場合、NginXを再起動するには、以下のコマンドを実行する。
cd <NginXのインストールディレクトリ>/sbin sudo ./nginx -s reload # または sudo ./nginx -s reopen
Systemdサービスユニットを作成する場合、/etc/systemd/systemディレクトリに、以下に示すような内容で作成する。
sudo vi /etc/systemd/system/nginx.service
# /etc/systemd/system/nginx.serviceファイル [Unit] Description=The nginx HTTP and reverse proxy server After=network-online.target remote-fs.target nss-lookup.target Wants=network-online.target [Service] PIDFile=/<NginXのインストールディレクトリ>/nginx.pid ExecStartPre=/<NginXのインストールディレクトリ>/sbin/nginx -t ExecStart=/<NginXのインストールディレクトリ>/sbin/nginx -g "daemon off;" ExecReload=/bin/kill -s HUP $MAINPID KillSignal=SIGQUIT TimeoutStopSec=5 KillMode=mixed PrivateTmp=true # added automatically, for details please see # https://en.opensuse.org/openSUSE:Security_Features#Systemd_hardening_effort ProtectSystem=full #ProtectHome=read-only PrivateDevices=true ProtectHostname=true ProtectClock=true ProtectKernelTunables=true ProtectKernelModules=true ProtectKernelLogs=true ProtectControlGroups=true RestrictRealtime=true # end of automatic additions [Install] WantedBy=multi-user.target
NginXを開始する。
sudo systemctl start nginx
NginXを停止する。
sudo systemctl stop nginx
NginXを再起動する。
sudo systemctl restart nginx
NginXを自動起動する。
sudo systemctl enable nginx
NginXの設定ファイルの内容を変更した時、変更を反映させるためにNginXを再読み込みする。
sudo systemctl reload nginx
動的モジュール
NginXは多数のモジュールから構成されており、NginXのビルド時にモジュールがNginXバイナリにスタティックに組み込まれる。
追加したいモジュールがある場合も同様、NginXのビルド時にそのモジュールを指定することにより、NginXバイナリにそのモジュールがスタティックに組み込まれる。
過去のNginXにおいては、モジュールを追加・変更するたびに、NginX本体をビルドし直す必要があり、運用が煩雑であった。
しかし、NginX 1.9.11以降では、動的モジュールがサポートされて、動的モジュールを使用時(NginXの起動およびリロード)に組み込むことができるようになった。
例えば、NginXの設定ファイル(nginx.confファイル)において、load_module
ディレクティブの値として、動的モジュールの共有オブジェクトファイルのパスを指定して、
NginXを起動あるいはリロードすることにより、動的モジュールを使用できるようになる。
load_module "modules/foo_module.so";
load_module
ディレクティブの記述場所はmainコンテキストである。
また、各ブロック(events、http、stream、mail)よりも前に記述する必要があることに注意する。
user nginx;
worker_processes 1;
load_module "modules/ngx_stream_module.so";
load_module "modules/ngx_http_geoip_module.so";
events {
worker_connections 1024;
}
http {
# ...略
}
もし、各ブロック(events、http、stream、mail)よりも前に記述した場合は、以下に示すようなエラーが出力される。
# 出力例 nginx: [emerg] "load_module" directive is specified too late in /usr/local/nginx/conf/nginx.conf:16
NginXの標準モジュール全てが動的モジュールとして使用できるわけではない。
現行のバージョンでは、以下に示すモジュールが動的モジュールとして使用することができる。
- XSLT (ngx_http_xslt_module)
- Image Filter (ngx_http_image_filter_module)
- GeoIP (ngx_http_geoip_module)
- Mail (ngx_mail_module)
- Stream (ngx_stream_module)
また、サードパーティ製モジュールも動的モジュールとして使用できるが、configure
スクリプトの修正が必要となるため、動的モジュールへの対応をサポートしているモジュール以外は、そのままでは使用できない。
現行バージョンでは、動的モジュール単体のみをビルドすることはできないため、動的モジュールをビルドするためには、NginX本体をビルドする手順とほぼ同じ手順を行う必要がある。
なお、将来的には、モジュール単体をビルドできるようにする計画がある。
NginXのディレクトリ構造
NginXのファイル、ディレクトリ、およびコマンドは、NginXを使用するために知っておくべき重要なものである。
- /etc/nginxディレクトリ
- /etc/nginx/ディレクトリは、NginXのデフォルトの設定ルートである。
- このディレクトリ内には、NginXの動作を設定するファイルがある。
- /etc/nginx/nginx.confファイル
- /etc/nginx/nginx.confファイルは、NginXで使用されるデフォルトの設定エントリポイントである。
- この構成ファイルは、ワーカープロセス、チューニング、ロギング、動的モジュールのロード、および他のNginX構成ファイルへの参照等の全体に及ぶ設定を行う。
- デフォルトの設定では、/etc/nginx/nginx.confファイルはトップレベルのhttpブロック、またはコンテキストを含み、次に説明するディレクトリの全ての設定ファイルを含む。
- /etc/nginx/conf.dディレクトリ
- /etc/nginx/conf.dディレクトリは、デフォルトのHTTPサーバの設定ファイルを保存するディレクトリである。
- このディレクトリ内の.confで終わるファイルは、/etc/nginx/nginx.confファイル内のトップレベルのhttpブロックにおいて、
include
文を使用して設定が管理されている。 - 環境によっては、このディレクトリをsites-enabledという名前にして、設定ファイルをsite-availableというディレクトリからリンクしている場合もある。(非推奨)
- /var/log/nginxディレクトリ
- /var/log/nginxディレクトリは、NginXのデフォルトのログの場所である。
- このディレクトリには、access.logファイルとerror.logファイルがある。
- access.logファイルには、NginXが提供する各リクエストのエントリが含まれる。
- error.logファイルには、エラーイベントとデバッグモジュールが有効になっている場合のデバッグ情報が含まれる。
NginXのコマンド
- nginx -h
- NginXのヘルプメニューを表示する。
- nginx -v
- NginXのバージョンを表示する。
- nginx -V
- NginXのバージョン、ビルド情報、設定引数を表示する。
- また、ビルドされたモジュールを表示する。
- nginx -t
- NginXの設定をテストする。
- nginx -T
- NginXの設定をテストして、検証された設定を画面に表示する。
- このコマンドは、サポートを求める場合に便利である。
- nginx -s <シグナル名>
-s
オプションは、NginXのマスタープロセスにシグナルを送信する。stop
、quit
、reload
、reopen
等のシグナルを送信することができる。stop
シグナルは、NginXプロセスを直ちに中止する。quit
シグナルは、NginXプロセスが実行要求されている処理を終了した後に停止する。reload
シグナルは、設定を再読み込みする。reopen
シグナルは、ログファイルを再開するようNginXに指示する。
ファイアウォールの設定
次に、ファイアウォール設定にいくつかの変更を加えて、httpサービスを許可する。
sudo firewall-cmd --permanent --add-port=80/tcp sudo firewall-cmd --reload
Nginxのテスト
Nginxが正しく実行されていることを確認する。
これを行うには、htmlファイルを作成し、それをNginxのルートディレクトリに配置する必要がある。
テキストエディタで以下のファイルを作成する。
sudo nano /srv/www/htdocs/index.html <html> <body> <h1>Welcome to osradar</h1> </body> </html>
最後に、Webブラウザを開き、http://localhost/ にアクセスして、これが表示されるか確認する。
NginX上でPHP-FPM(PHP 7 / 8)の有効化
NginXにはPHPモジュールが無いため、CGIによりプログラムを動作させている。
PHPをNginX上で動作させるためには、PHP-FPM(PHP-FastCGI Process Manager)に対して、設定を行う必要がある。
必要な場合、PHP-FPMのソケットファイルを配置するディレクトリを作成する。
mkdir /<PHPのインストールディレクトリ>/var/run/php-fpm
PHP-FPMの構成ディレクトリ(/etc/php7/fpm)にあるphp-fpm.confファイルのerror_logキーを以下のように編集する。
# PHP 7 sudo cp /etc/php7/fpm/php-fpm.conf.default /etc/php7/fpm/php-fpm.conf # PHP 8 sudo cp /etc/php8/fpm/php-fpm.conf.default /etc/php8/fpm/php-fpm.conf
# PHP 7 sudo vi /etc/php7/fpm/php-fpm.conf # PHP 8 sudo vi /etc/php8/fpm/php-fpm.conf
# /etc/php7/fpm/php-fpm.confファイル または /etc/php8/fpm/php-fpm.confファイル error_log = /var/log/php-fpm.log
次に、www.conf構成ファイルで構成済みプールの正しい設定を定義する。
# PHP 7 sudo cp /etc/php7/fpm/php-fpm.d/www.conf.default /etc/php7/fpm/php-fpm.d/www.conf # PHP 8 sudo cp /etc/php8/fpm/php-fpm.d/www.conf.default /etc/php8/fpm/php-fpm.d/www.conf
# PHP 7 sudo vi /etc/php7/fpm/php-fpm.d/www.conf # PHP 8 sudo vi /etc/php8/fpm/php-fpm.d/www.conf
# /etc/php7/fpm/php-fpm.d/www.confファイル または /etc/php8/fpm/php-fpm.d/www.confファイル user = <Nginxの実行ユーザ名 (例. nginx)> group = <Nginxの実行グループ名 (例. nginx)> listen = <nginx.confファイルで設定したfastcgi_passの値 (例. /var/run/php-fpm/php-fpm.sock)> listen.owner = <PHP-FPMの実行ユーザ名 (例. nginx)> listen.group = <PHP-FPMの実行グループ名 (例. nginx)>
次に、/etc/php7/cli/php.iniファイル、または、/etc/php8/cli/php.iniファイルを作成・編集する。
# PHP 7 sudo vi /etc/php7/cli/php.ini # PHP 8 sudo vi /etc/php8/cli/php.ini
# /etc/php7/cli/php.iniファイル または /etc/php8/cli/php.iniファイル cgi.fix_pathinfo=0
----- 以下に示す箇所は不要の可能性あり -----
次に、/etc/php7/fpm/php.iniファイルを作成・編集する。
php.iniファイルをコピーして、php.iniファイルのcgi.fixキーを編集する。
sudo cp /etc/php7/cli/php.ini /etc/php7/fpm/
sudo vi /etc/php7/fpm/php.ini # /etc/php7/fpm/php.iniファイル cgi.fix_pathinfo=0
そして、/etc/php7/fpm/php.iniファイルをPHP構成ディレクトリにコピーする。
sudo cp /etc/php7/fpm/php.ini /etc/php7/conf.d/
----- ここまで -----
NginXの設定
NginXを構成するため、NginXの設定ファイルを、以下に示すような内容で作成または編集する。
# パッケージ管理システムからインストールしている場合 sudo vi /etc/nginx/conf.d/default.conf または sudo vi /etc/nginx/conf.d/<任意のファイル名>.conf # サーバ設定ファイルを新規作成する場合 # ソースコードからインストールしている場合 sudo vi /<Nginxのインストールディレクトリ>/etc/nginx.conf
# default.confファイル
# NginXのPIDファイルの場所
#pid /tmp/nginx.pid;
# 使用するCPUのプロセス数
# CPUのコア数より多く設定してもパフォーマンスは上がらない
worker_processes 1;
# エラーログの指定
# ログレベルは低い順にdebug, info, notice, warn, error, crit, alert, emerg
error_log log/error.log info;
events {
worker_connections 1024;
}
http {
# ...略
# 設定ファイルの読み込み
#include /etc/nginx/conf.d/ssl.conf
#include /etc/nginx/vhost.d/*.conf
server {
listen 80;
server_name localhost;
#charset koi8-r;
access_log <アクセスログファイルのフルパス>;
# 例1. log/localhost.log;
# 例2. /srv/www/htdoc/log/localhost.log;
# IPフィルタリング
# 上にあるルールが優先
#allow all;
#deny all;
# インデックスファイルが存在しない場合、ファイル一覧を有効化 / 無効化
autoindex on;
location / {
root <ドキュメントルートのパス(絶対パスまたは相対パス)>;
# 例1. html;
# 例2. /srv/www/htdoc;
index index.php index.html index.htm;
}
error_page 404 /404.html;
location = /404.html {
root <ドキュメントルートのパス(絶対パスまたは相対パス)>;
# 例1. html;
# 例2. /srv/www/htdoc;
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root <ドキュメントルートのパス(絶対パスまたは相対パス)>;
# 例1. html;
# 例2. /srv/www/htdoc;
}
# 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 <ドキュメントルートのパス(絶対パスまたは相対パス)>;
# # 例1. html;
# # 例2. /srv/www/htdoc;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# このセクションは、NginXからPHP-FPMの通信は
# Unixドメインソケット通信でlistenしているFastCGIサーバにPHPスクリプトを渡すために使用される
location ~ \.php$
{
root <ドキュメントルートのパス(絶対パスまたは相対パス)>;
# 例1. html;
# 例2. /srv/www/htdoc;
fastcgi_pass <PHP-FPMのソケットファイルのフルパス>;
# 例1. unix:/<PHPのインストールディレクトリ>/var/run/php-fpm.sock;
# 例2. unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# ApacheのドキュメントルートがNginXのドキュメントルートと一致する場合、.htaccessファイルへのアクセスを拒否する
#location ~ /\.ht {
# deny all;
#}
}
# ...略
}
NginXおよびPHP-FPMを起動する。
sudo systemctl restart nginx php-fpm
Webブラウザを起動した後、http://localhost/index.php にアクセスして、正常に表示されるか確認する。
仮想ホストの構築
パッケージ管理システムからNginXをインストールした場合、/etc/nginx/vhosts.dディレクトリ内に、Webサイトの設定ファイルを複数作成することができる。
一般的には、1つのWebサイトごとに1ファイル、<ドメイン名>.confのような名前を付ける。
- NginXの設定ファイルにまとめて記述する場合
# パッケージ管理システムからインストールしている場合 sudo vi /etc/nginx/default.conf # ソースコードからインストールしている場合 sudo vi /<Nginxのインストールディレクトリ>/etc/nginx.conf
# /etc/nginx/default.confファイル または /<Nginxのインストールディレクトリ>/etc/nginx.confファイル
http {
# ...略
server {
listen <ポート番号 例. 80>;
server_name <ドメイン名 例. virtualhost01> alias <ドメイン名 例. virtualhost01>.alias;
access_log <ログファイルのフルパス>
# 例. log/vhost.access.log;
error_page 404 /404.html;
location = /404.html {
root <仮想ホストのドキュメントルート>;
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root <仮想ホストのドキュメントルート>;
}
location / {
root <仮想ホストのドキュメントルート>;
index index.php index.html index.htm;
}
# このセクションは、NginxからPHP-FPMの通信はUnixドメインソケット通信でlistenしているFastCGIサーバにPHPスクリプトを渡すために使用される
location ~ \.php$
{
root <仮想ホストのドキュメントルート>;
fastcgi_pass unix:<PHP-FPMのソケットのパス>;
# 例1. unix:/var/run/php-fpm/php-fpm.sock;
# 例2. unix:/home/user/PHP/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# proxy_pass http://127.0.0.1;
}
}
# ...略
}
- 仮想ホストごとに分割して設定する場合
- 一般的に、仮想ホストの設定ファイルは、/etc/nginx/vhost.dディレクトリ、または、/<NginXのインストールディレクトリ>/etc/vhosts.dディレクトリに配置する。
# パッケージ管理システムからインストールしている場合 sudo vi /etc/nginx/vhost.d/vhost1.conf # ソースコードからインストールしている場合 sudo vi /<Nginxのインストールディレクトリ>/etc/vhost.d/vhost1.conf
# /etc/nginx/vhost.d/vhost1.confファイル または /<Nginxのインストールディレクトリ>/etc/vhost.d/vhost1.confファイル
server {
listen <ポート番号 例. 80>;
server_name <ドメイン名 例. virtualhost01> alias <ドメイン名 例. virtualhost01>.alias;
access_log <ログファイルのフルパス>
# 例. log/vhost.access.log;
error_page 404 /404.html;
location = /404.html {
root <仮想ホストのドキュメントルート>;
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root <仮想ホストのドキュメントルート>;
}
location / {
root <仮想ホストのドキュメントルート>;
index index.php index.html index.htm;
}
# このセクションは、NginxからPHP-FPMの通信はUnixドメインソケット通信でlistenしているFastCGIサーバにPHPスクリプトを渡すために使用される
location ~ \.php$
{
root <仮想ホストのドキュメントルート>;
fastcgi_pass unix:<PHP-FPMのソケットのパス>;
# 例1. unix:/var/run/php-fpm/php-fpm.sock;
# 例2. unix:/home/user/PHP/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# proxy_pass http://127.0.0.1;
}
}
上記で作成した仮想ホストの設定ファイルを読み込むため、NginXの設定ファイルを編集する。
# パッケージ管理システムからインストールしている場合 sudo vi /etc/nginx/default.conf # ソースコードからインストールしている場合 sudo vi /<Nginxのインストールディレクトリ>/etc/nginx.conf
# /etc/nginx/default.confファイル または /<Nginxのインストールディレクトリ>/etc/nginx.confファイル
http {
# ...略
include /<NginXのvhost.dディレクトリのフルパス>/*.conf
# 例1. /etc/nginx/vhosts.d/*.conf;
# 例2. /<NginXのインストールディレクトリ>/etc/vhosts.d/*.conf;
server {
# ...略
}
# ...略
}
仮想ホストにアクセスできるようにするため、/etc/hostsファイルに仮想ホスト名と対応するIPアドレスを追記する。
sudo vi /etc/hosts
# /etc/hostsファイル <仮想ホストで使用するIPアドレス> <仮想ホスト名>
NginXとPHP-FPMを起動する。
sudo systemctl start php-fpm sudo systemctl start nginx