MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
インストール - NginX(SUSE)のソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
インストール - NginX(SUSE)
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == NginXとは、Apacheと並ぶWebサーバソフトウェアの1つであり、処理速度や機能面で注目を集めている。<br> <br> NginXのメリットを、以下に示す。<br> * 高速である。 * 大量処理が得意である。 * Webサイトの利用を向上させる機能が豊富である。 * 設定が容易である。 <br> Webサーバに同時に複数のアクセスがあった場合、下表に示すように動作の違いがある。<br> <center> {| class="wikitable" | style="background-color:#fefefe;" |+ 動作方法の違いによる処理速度の向上 |- ! style="background-color:#66CCFF;" | ! style="background-color:#66CCFF;" | Apache 2 ! style="background-color:#66CCFF;" | NginX |- | style="background-color:#EDEDED;" | 同時・複数アクセスへの対処方法 | 1アクセスに対して、1つの対応 || 複数のアクセスに対して、1つの対応にまとまる |- | style="background-color:#EDEDED;" | アクセス急増時のサーバへの負荷 | 一気に負荷が増す || アクセスに比例して負荷は急激に増えない |- | style="background-color:#EDEDED;" | その結果のWebサーバの挙動 | 動作が遅くなり、ダウンしやすくなる || 処理速度を維持して、ダウンしにくい |} </center> <br> 例えば、Webサーバの負担を軽くして処理速度を上げる手段として、リバースプロキシやロードバランサー等があり、これらを実現する場合、Nginxが向いている。<br> <br> NginXのデメリットを、以下に示す。<br> * 大量の動的コンテンツの処理に不向き *: 一般的には、大量の動的コンテンツの公開(動画を中心としたWebサイト等)には向かないことがNginXのデメリットとして挙げられる。 *: ただし、比較的小規模のWebサイトを運営する場合は、それほど神経質にならなくてもよい。 *: <br> * 機能追加のしやすさ *: 専用のモジュールを追加することにより、Nginxも機能を拡張することができる。 *: ただし、Apacheの方が、実装方法について比較的充実し、情報が豊富でわかりやすい。 *: <br> *: Apache モジュール一覧 *: https://httpd.apache.org/docs/trunk/ja/mod/ *: NGINX 3rd Party Modules *: https://www.nginx.com/resources/wiki/modules/ *: <br> * 初心者向けの設定情報の少なさ *: 設定等の情報が少ない。 <br> <center> {| class="wikitable" |- style="text-align: center; background-color:white;" | <yjshopping seller_id="dss">nginx実践ガイド IT技術者のための現場ノウハウ</yjshopping> |- style="text-align: center; background-color:white;" | <yjshopping seller_id="windybooks">nginx実践入門</yjshopping> |- style="text-align: center; background-color:white;" | <yjshopping seller_id="magicdoor">Nginx HTTP Server</yjshopping> |} </center> <br><br> == NginXのインストール方法 == ==== パッケージ管理システムからインストール ==== まず、システムの更新を行う。<br> sudo zypper update <br> 次に、NginXをインストールする。<br> NginXは、CentOSやSUSEの公式リポジトリからインストールできる。<br> ただし、常に最新バージョンが提供されるとは限らない。<br> sudo zypper install nginx <br> NginXサービスを自動起動する。<br> sudo systemctl enable nginx <br> NginXを開始する。<br> sudo systemctl start nginx <br> NginXのステータスを確認する場合は、次のコマンドを実行する。<br> sudo sytemctl status nginx <br> ==== ソースコードからインストール ==== NginXのビルドに必要なライブラリをインストールする。<br> sudo zypper install libxslt-devel pcre2-devel gd-devel sudo zypper install kernel-source kernel-devel # AIOを使用する場合 <br> 必要ならば、[https://www.openssl.org/source/ OpenSSLの公式Webサイト]にアクセスして、OpenSSL(1.X.Y)のソースコードをダウンロードする。<br> ダウンロードしたファイルを解凍する。<br> tar xf openssl-<バージョン> <br> [https://nginx.org/en/download.html NginXの公式Webサイト]にアクセスして、NginXのソースコードをダウンロードする。<br> ダウンロードしたファイルを解凍する。<br> tar xf nginx-<バージョン>.tar.xz cd nginx-<バージョン> <br> NginXをビルドおよびインストールする。<br> <u>NginXのビルドにおいて、ビルドディレクトリを作成すると失敗することに注意する。</u><br> 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_xslt_module --with-http_xslt_module=dynamic \ --with-http_image_filter_module --with-http_image_filter_module=dynamic --with-http_dav_module --with-http_mp4_module --with-http_flv_module \ --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_degradation_module --with-http_slice_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 \ --with-cc=/usr/bin/gcc --with-cpp=/usr/bin/g++ \ --user=<任意のユーザ名> \ # 任意のユーザ名 例.nginx --group=<任意のグループ名> # 任意のグループ名 例.nginx # 不要の可能性あり --without-poll_module --without-select_module --with-ipv6 # 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 <br> configureスクリプト実行時において、<code>--user=<ユーザ名></code>および<code>--group=<グループ名></code>を付加した場合、それぞれユーザとグループを作成する必要がある。<br> sudo useradd --system --no-create-home --user-group --shell /sbin/nologin nginx <br> Systemdサービスユニットを作成しない場合、NginXを開始するには、以下のコマンドを実行する。<br> cd <NginXのインストールディレクトリ>/sbin sudo ./nginx <br> Systemdサービスユニットを作成しない場合、NginXを停止するには、以下のコマンドを実行する。<br> * 方法 1 *: <code>cd <NginXのインストールディレクトリ>/sbin</code> *: <code>sudo ./nginx -s stop</code> *: または *: <code>sudo ./nginx -s quit</code> *: <br> * 方法 2 *: まず、NginXのプロセスIDを確認する。 *: <code>ps aux | grep -i nginx</code> *: NginXを停止する。 *: <code>sudo kill <プロセスID 1> <プロセスID 2></code> <br> Systemdサービスユニットを作成しない場合、NginXを再起動するには、以下のコマンドを実行する。<br> cd <NginXのインストールディレクトリ>/sbin sudo ./nginx -s reload # または sudo ./nginx -s reopen <br> Systemdサービスユニットを作成する場合、/etc/systemd/systemディレクトリに、以下に示すような内容で作成する。<br> sudo vi /etc/systemd/system/nginx.service <br> # /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 <br> NginXを開始する。<br> sudo systemctl start nginx <br> NginXを停止する。<br> sudo systemctl stop nginx <br> NginXを再起動する。<br> sudo systemctl restart nginx <br> NginXを自動起動する。<br> sudo systemctl enable nginx <br> NginXの設定ファイルの内容を変更した時、変更を反映させるためにNginXを再読み込みする。<br> sudo systemctl reload nginx <br><br> == ファイアウォールの設定 == 次に、ファイアウォール設定にいくつかの変更を加えて、httpサービスを許可する。<br> sudo firewall-cmd --add-port=80/tcp --permanent sudo firewall-cmd --reload <br><br> == Nginxのテスト == Nginxが正しく実行されていることを確認する。<br> これを行うには、htmlファイルを作成し、それをNginxのルートディレクトリに配置する必要がある。<br> テキストエディタで以下のファイルを作成する。<br> <nowiki> sudo nano /srv/www/htdocs/index.html <html> <body> <h1>Welcome to osradar</h1> </body> </html> </nowiki> <br> 最後に、Webブラウザを開き、http://localhost/ にアクセスして、これが表示されるか確認する。<br> <br><br> == NginX上でPHP-FPM(PHP 7 / 8)の有効化 == NginXにはPHPモジュールが無いため、CGIによりプログラムを動作させている。<br> PHPをNginX上で動作させるためには、PHP-FPM(PHP-FastCGI Process Manager)に対して、設定を行う必要がある。<br> <br> 必要な場合、PHP-FPMのソケットファイルを配置するディレクトリを作成する。<br> mkdir /<PHPのインストールディレクトリ>/var/run/php-fpm <br> PHP-FPMの構成ディレクトリ(/etc/php7/fpm)にあるphp-fpm.confファイルのerror_logキーを以下のように編集する。<br> # 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 <br> # PHP 7 sudo vi /etc/php7/fpm/php-fpm.conf # PHP 8 sudo vi /etc/php8/fpm/php-fpm.conf <br> # /etc/php7/fpm/php-fpm.confファイル または /etc/php8/fpm/php-fpm.confファイル error_log = /var/log/php-fpm.log <br> 次に、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 <br> # PHP 7 sudo vi /etc/php7/fpm/php-fpm.d/www.conf # PHP 8 sudo vi /etc/php8/fpm/php-fpm.d/www.conf <br> # /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)> <br> 次に、/etc/php7/cli/php.iniファイル、または、/etc/php8/cli/php.iniファイルを作成・編集する。<br> # PHP 7 sudo vi /etc/php7/cli/php.ini # PHP 8 sudo vi /etc/php8/cli/php.ini <br> # /etc/php7/cli/php.iniファイル または /etc/php8/cli/php.iniファイル cgi.fix_pathinfo=0 <br> '''----- ここは不要かも? -----'''<br> 次に、/etc/php7/fpm/php.iniファイルを作成・編集する。<br> php.iniファイルをコピーして、php.iniファイルのcgi.fixキーを編集する。<br> sudo cp /etc/php7/cli/php.ini /etc/php7/fpm/ <br> sudo vi /etc/php7/fpm/php.ini # /etc/php7/fpm/php.iniファイル cgi.fix_pathinfo=0 <br> そして、/etc/php7/fpm/php.iniファイルをPHP構成ディレクトリにコピーする。<br> sudo cp /etc/php7/fpm/php.ini /etc/php7/conf.d/ '''----- ここまで -----'''<br> <br><br> == NginXの設定 == NginXを構成するため、NginXの設定ファイルであるnginx.confファイルを、以下に示すような内容で編集する。<br> # パッケージ管理システムからインストールしている場合 sudo vi /etc/nginx/nginx.conf # ソースコードからインストールしている場合 sudo vi /<Nginxのインストールディレクトリ>/etc/nginx.conf <br> <syntaxhighlight lang="nginx"> # nginx.confファイル http { # ...略 server { listen 80; server_name localhost; #charset koi8-r; access_log <アクセスログファイルのフルパス>; # 例1. log/localhost.log; # 例2. /srv/www/htdoc/log/localhost.log; 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; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # ...略 } </syntaxhighlight> <br> NginXおよびPHP-FPMを起動する。<br> sudo systemctl restart nginx php-fpm <br> Webブラウザを起動した後、http://localhost/index.php にアクセスして、正常に表示されるか確認する。<br> <br><br> == 仮想ホストの構築 == NginXの設定ファイルを編集する。<br> # パッケージ管理システムからインストールしている場合 sudo vi /etc/nginx/nginx.conf # ソースコードからインストールしている場合 sudo vi /<Nginxのインストールディレクトリ>/etc/nginx.conf <br> <syntaxhighlight lang="nginx"> # 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; } } # ...略 } </syntaxhighlight> <br> また、仮想ホストの設定を、/etc/nginx/vhost.dディレクトリ、または、/<NginXのインストールディレクトリ>/etc/vhosts.dディレクトリに配置してもよい。<br> # パッケージ管理システムからインストールしている場合 sudo vi /etc/nginx/vhost.d/vhost1.conf # ソースコードからインストールしている場合 sudo vi /<Nginxのインストールディレクトリ>/etc/vhost.d/vhost1.conf <br> <syntaxhighlight lang="nginx"> # 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; } } </syntaxhighlight> <br> 上記で作成した仮想ホストの設定ファイルを読み込むため、NginXの設定ファイルを編集する。<br> # パッケージ管理システムからインストールしている場合 sudo vi /etc/nginx/nginx.conf # ソースコードからインストールしている場合 sudo vi /<Nginxのインストールディレクトリ>/etc/nginx.conf <br> <syntaxhighlight lang="nginx"> # nginx.confファイル http { # ...略 include /<NginXのvhost.dディレクトリのフルパス>/*.conf # 例1. /etc/nginx/vhosts.d/*.conf; # 例2. /<NginXのインストールディレクトリ>/etc/vhosts.d/*.conf; server { # ...略 } # ...略 } </syntaxhighlight> <br> 仮想ホストにアクセスできるようにするため、/etc/hostsファイルに仮想ホスト名と対応するIPアドレスを追記する。<br> sudo vi /etc/hosts <br> # /etc/hostsファイル <仮想ホストで使用するIPアドレス> <仮想ホスト名> <br> NginXとPHP-FPMを起動する。<br> sudo systemctl start php-fpm sudo systemctl start nginx <br><br> == ログフォーマット == <center> {| class="wikitable" | style="background-color:#fefefe;" |+ Apache2とNginXのログフォーマット |- ! style="background-color:#66CCFF;" | Apache2 ! style="background-color:#66CCFF;" | NginX ! style="background-color:#66CCFF;" | 説明 |- | %a || $remote_addr || リモートIPアドレス |- | %A || $server_addr || ローカルIPアドレス |- | %b || $body_bytes_sent || レスポンスのバイト数(HTTPヘッダは除く)<br>CLF書式において、0の時は-(ハイフン)になる。 |- | %B || $body_bytes_sent || レスポンスのバイト数(HTTPヘッダは除く) |- | %D || - || リクエストを処理するのに掛かった時間(マイクロ秒単位) |- | %f || $request_filename || リクエストされたファイル名 |- | %h || - || リモートホスト名 |- | %H || $server_protocol || リクエストプロトコル名 |- | %K || - || keepaliveのコネクション数 |- | %l || - || リモートログ名 |- | %m || $request_method || リクエストメソッド(GET) |- | %p || $server_port || リクエストを受けたポート番号 |- | %P || $pid || 子プロセスID |- | %q || $query_string || クエリ文字列<br>例. <code>http://example.com/test.php?id=12345 -> ?id=12345</code> |- | %r || $request || リクエストの最初の行<br>基本的には、%m %U$q %Hとした設定と同様 |- | %s || $status || ステータスコード |- | %t || $time_local || リクエストを受け付けた日時<br>[11/Aug/2017:12:34:56 +0900] |- | %{format}t || - || <code>format</code>で与えられた書式による時刻 |- | %T || $request_time || リクエストを受けてから応答するまでの処理時間(秒)<br>%Dの秒数バージョン |- | %u || $remote_user || リモートユーザ名 |- | %U || $request_uri || リクエストされたパス |- | %v || $server_name || サーバのServerNameの値 |- | %V || $server_name || UseCanonicalNameで指定されたサーバ名 |- | %X || $request_completion || 応答が完了したときの接続ステータス<br>書式 : aborted + = kept alive - = closed |- | %I || $request_length || リクエストとヘッダを含む受け取ったバイト数 |- | %O || $bytes_sent || ヘッダを含むサーバから送信されたバイト数 |- | %{Referer}i || $http_referer || リファラー |- | %{User-Agent}i || $http_user_agent || ユーザエージェント名 |} </center> <br> <center> {| class="wikitable" | style="background-color:#fefefe;" |+ NginXのみのログフォーマット |- ! style="background-color:#66CCFF;" | ログフォーマット ! style="background-color:#66CCFF;" | 説明 |- | $args || リクエスト行の引数 |- | $binary_remote_addr || $remote_addrのバイナリ出力 |- | $connection || コネクションのシリアル番号 |- | $connection_requests || コネクションを経由した現在のリクエスト数 |- | $content_length || Content-Lengthのリクエストヘッダフィールド<br><br>Content-Lengthとは、HTTPヘッダの項目であり、渡すデータのサイズが入っている。 |- | $content_type || Content-Typeのリクエストヘッダフィールド<br><br>Content-Typeとは、ヘッダで最も一般的に用いられる項目の1つであり、<br>ボディ部に積載したデータの種類や形式(メディアタイプ)を指定する。<br>主に、サーバがクライアントに送信するHTTPレスポンスの中で送信データの形式を伝えるために用いるが、<br>クライアントがフォームなどから送信するPOSTデータの形式を知らせるのにも用いられる。 |- | $document_root || 現在のリクエストに対するルートディレクティブおよびエイリアスディレクティブの値 |- | $document_uri || $uriと同じ |- | $host || サーバホスト名 |- | $hostname || ホスト名 |- | $https || 接続がSSLモードで動作している場合は"on"、それ以外の場合は空文字列となる。 |- | $limit_rate || この変数を設定することにより、応答速度制限を行うことができる。 |- | $msec || 現在の時刻をミリ秒単位で表示する。 |- | $nginx_version || NginXのバージョン |- | $pipe || リクエストがパイプライン化されている場合は"p"、それ以外の場合は"." |- | $proxy_protocol_addr || Proxyプロトコルヘッダからのクライアントアドレスを表示する。<br>それ以外は空文字列となる。 |- | $realpath_root || $document_rootの実パス名 |- | $remote_port || クライアントのポート番号を表示する、 |- | $request_body || リクエストボディを表示する。 |- | $request_body_file || リクエストボディを格納した一時ファイル名を表示する。 |- | $scheme || http |- | $sent_http_name || 任意のレスポンスヘッダフィールドを表示する。 |- | $time_iso8601 || ローカルタイム(ISO 8601標準)を表示する。 |} </center> <br><br> == NginXのその他の設定 == ==== tcp_nodelay ==== 値 : on / off<br> 初期値 : on<br> 使用環境 : http, server.location<br> <br> 小さなパケットを大きなパケットに合成して、帯域幅の利用率を向上させる。(nagleアルゴリズム)<br> TCPプロトコルでは、<u>アプリケーション層のデータが非常に少なく(1バイト程度)、かつ、トランスポート層のオーバーヘッドが40バイト(IPヘッダ20バイト + TCPヘッダ20バイト)にもなる現象</u>がある。<br> この場合、送信データの多くは制御パケットであるため、帯域消費量が増加して、帯域利用率が悪くなる。(ネットワークに輻輳が発生しやすくなる)<br> <br> この問題を解決するため、新規に生成されたパケットは送信データが確認されるまで、あるいは、相手側からの確認応答があるまで、<br> 1MSSに切り上げる、または、確認応答があるまで待った後にタイムアウトまで送信する。<br> ネットワークの輻輳を避けるため、TCPスタックは0.2秒(Unixの実装の値)までデータを待つメカニズムを実装しており、小さすぎるパケットを送信することはない。<br> <br> 例えば、あるソフトウェアが小さなデータの送信を要求してきたとする。 すぐに送信する、または、データが生成されるのを待って再度送信するかを選択することができるとする。 もし、データをすぐに送ることができれば、インタラクティブでクライアントサーバタイプのソフトウェアは大きなメリットを得ることができる。 また、リクエストを即座に送信すれば、レスポンスも速くなる。 <br> ただし、ネットワーク上でデータをストリーミングする必要がある場合、逆効果になる可能性がある。<br> ファイル転送を行う場合、転送するごとにクライアント側で0.2秒の遅延を発生させるからである。<br> <br> ==== tcp_nopush ==== 値 : on / off<br> 初期値 : off<br> 使用環境 : http, server.location<br> <br> TCP/IPにおける転送の標準であるtcp_corkの設定である。(tcp_nodelayとは逆の働きをする)<br> 遅延を最適化する代わりに、1度に送信するデータ量を最適化する。<br> <br> tcp_nopushを有効にする場合、tcp_corkメソッドが呼ばれるようになるため、パケットはすぐに送信されず、パケットが最大になった時に一気に送信される。(ネットワークの輻輳や混雑を解決する)<br> (一般的な意味は、TCP通信において、ソフトウェアがパケットを受信した時、すぐに転送することである)<br> <br> ==== sendfile ==== 値 : on / off<br> 初期値 : off<br> 使用環境 : http, server.location, server.locationのif文<br> <br> sendfileが有効になっている場合、NginXはデータ転送を行う時に<code>sendfile</code>関数(システムコール)を呼び出す。<br> <code>sendfile</code>関数は、Linuxカーネル 2.0以降で導入されたシステムコールである。<br> <br> 通常のネットワークでのデータ転送に比べて、スイッチの数が少なく、転送するデータのコピー数も少ない。<br> <br> <code>sendfile</code>関数は、2つのファイルディスクリプタ間で直接データを渡すため(カーネル内での動作)、カーネルバッファとユーザバッファ間のデータのコピーを回避して、<br> ゼロコピーと呼ばれるほど効率的な処理を行うことが可能である。<br> <br><br> == Basic認証 == Basic認証のパスワードファイルを作成する。<br> <br> <code>htpasswd</code>コマンドを実行して、Basic認証を設定する。<br> 以下の例では、.htpasswdファイルとしているが、ファイル名は任意の名前でよい。<br> htpasswd -c /<任意のパスワードファイルのディレクトリ>/<Basic認証ファイル名> <Basic認証時のユーザ名> 例. htpasswd -c /etc/nginx/conf.d/.htpasswd sample_user <br> Basic認証を有効にするため、nginx.confファイル等に以下に示す設定を追加する。<br> <syntaxhighlight lang="nginx"> # トップページ(http://www.example.com/)にBasic認証を掛ける場合、/のlocationディレクティブに設定を追加する location / { root <ドキュメントルートのディレクトリ>; index index.html index.htm; auth_basic "<認証名>"; # 例. "Basic Authentication"; auth_basic_user_file <Basic認証ファイルの絶対パス>; # 例. auth_basic_user_file /etc/nginx/conf.d/.htpasswd; } # トップページ以外(http://www.example.com/hoge/)にBasic認証を掛ける場合、/hoge/のlocationディレクティブを作成および設定を追加する location /hoge/ { auth_basic "<認証名>"; # 例. "Basic Authentication"; auth_basic_user_file <Basic認証ファイルの絶対パス>; # 例. /etc/nginx/conf.d/.htpasswd; } </syntaxhighlight> <br> 設定を反映する。<br> sudo systemctl restart nginx sudo systemctl reload nginx <br><br> == Digest認証 == ==== Digest認証モジュールのインストール ==== Digest認証モジュールは、NginXのソースコードと一緒に配布されていないため、別途インストールする必要がある。<br> <br> Digest認証モジュールは、RFCに基づいて機能が完成しているが、実際の運用で使用するのに十分な安全性を確保するために、より広範な検証が必要な状態である。<br> 現在の注意点については、[https://github.com/atomx/nginx-http-auth-digest/blob/master/bugs.txt bugs.txt]ファイルと[https://github.com/atomx/nginx-http-auth-digest/issues github issue tracker]を参照すること。<br> <br> まず、[http://nginx.org/en/download.html NginXの公式Webサイト]にアクセスして、NginX本体のソースコードをダウンロードする。<br> ダウンロードしたファイルを解凍する。<br> tar xf nginx-<バージョン>.tar.gz cd nginx-<バージョン> <br> 次に、[https://github.com/atomx/nginx-http-auth-digest Digest認証モジュールのGithub]にアクセスして、ソースコードをダウンロードする。<br> ダウンロードしたファイルを解凍する。<br> tar xf nginx-http-auth-digest-<バージョン>.tar.gz cd nginx-http-auth-digest-<バージョン> <br> または、<code>git clone</code>コマンドを実行して、ソースコードをダウンロードする。<br> git clone https://github.com/atomx/nginx-http-auth-digest.git cd nginx-http-auth-digest <br> NginXのビルドに必要なライブラリをインストールする。<br> sudo zypper install libxslt-devel pcre2-devel gd-devel kernel-source kernel-devel # AIOを使用する場合 <br> NginXとDigest認証モジュールをビルドおよびインストールする。<br> NginXのソースコードがあるディレクトリに移動して、configureスクリプトの<code>--add-module</code>オプションにおいて、<br> <code>--add-module=<Digest認証モジュールのソースコードがあるディレクトリ></code>を付加する。<br> <br> <u>NginXのビルドにおいて、ビルドディレクトリを作成すると失敗することに注意する。</u><br> cd <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_xslt_module --with-http_xslt_module=dynamic \ --with-http_image_filter_module --with-http_image_filter_module=dynamic --with-http_dav_module --with-http_mp4_module --with-http_flv_module \ --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_degradation_module --with-http_slice_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 \ --add-module=<Digest認証モジュールのソースコードがあるディレクトリ> \ --with-cc=/usr/bin/gcc --with-cpp=/usr/bin/g++ \ --user=<任意のユーザ名> \ # 任意のユーザ名 例.nginx --group=<任意のグループ名> # 任意のグループ名 例.nginx # 不要の可能性あり --without-poll_module --without-select_module --with-ipv6 # 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 <br> ==== Digest認証の設定 ==== Digest認証のパスワードファイルを作成する。<br> <br> <code>htdigest</code>コマンドを実行して、Digest認証を設定する。<br> 以下の例では、.htdigestファイルとしているが、ファイル名は任意の名前でよい。<br> htdigest -c /<任意のDigest認証ファイルのディレクトリ>/<Digest認証ファイル名> "<realm名>" <Digest認証時のユーザ名> 例. htdigest -c /etc/nginx/conf.d/.htdigest "test" sample_user <br> Digest認証を有効にするため、nginx.confファイル等に以下に示す設定を追加する。<br> <syntaxhighlight lang="nginx"> # トップページ(http://www.example.com/)にDigest認証を掛ける場合、/のlocationディレクティブに設定を追加する location / { root <ドキュメントルートのディレクトリ>; index index.html index.htm; auth_digest "<realm名>"; # 例. "test"; auth_digest_user_file <Digest認証ファイルの絶対パス>; # 例. /etc/nginx/conf.d/.htdigest; } # トップページ以外(http://www.example.com/hoge/)にDigest認証を掛ける場合、/hoge/のlocationディレクティブを作成および設定を追加する location /hoge/ { auth_digest "<realm名>"; # 例. "test"; auth_digest_user_file <Digest認証ファイルの絶対パス>; # 例. /etc/nginx/conf.d/.htdigest; } </syntaxhighlight> <br> 設定を反映する。<br> sudo systemctl restart nginx sudo systemctl reload nginx <br><br> == エラー関連 == ==== test failed ==== Webサイトにアクセスする時、<u>"test failed"</u>というエラーメッセージが表示される場合がある。<br> これは、NginXの初期設定ではIPv4とIPv6をリッスンするが、使用しているWebサーバがIPv6をサポートしていない場合に起きる。<br> <br> nginx.confファイルにおいて、IPv6を使用しないように設定する。<br> vi nginx.conf <br> # nginx.confファイル # 編集前 listen [::]:80 default_server; # 編集後 # listen [::]:80 default_server; <br> NginXを再読み込みする。<br> sudo systemctl reload nginx <br><br> == HTTPS(SSL)の設定 == ==== CSRについて ==== CSR(Certificate Signing Request)とは、証明書発行要求といい、認証局に対して行う、認証局の秘密鍵で署名してもらうためのリクエストのことである。<br> <br> CSRの中身を確認するためには、<code>req</code>コマンドに<code>-text</code>オプションを付加することで確認できる。<br> openssl req -text -in <サーバ証明書のファイル名>.csr # 出力例 Certificate Request: Data: Version: 0 (0x0) Subject: C=JP, ST=TOKYO, L=KAWASAKI, O=Kaisha, OU=Busho, CN=common.name Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) (省略) Signature Algorithm: sha256WithRSAEncryption (省略) <br> 上記の出力例において、[Signature Algorithm]項目は、sha256WithRSAEncryptionである。<br> SHA-1は解読されるリスクが高まっているため、今後作成するものはSHA-2とするべきである。<br> <br> SHA-2には、SHA-224、SHA-256、SHA-384、SHA-512の4種類がある。<br> SHA-512が最も安全性が高いが、クライアント端末側がSHA-512に対応している必要がある。<br> <br> ==== 自己証明書の発行(サーバ側) ==== 秘密鍵を作成する。<br> openssl genrsa -out <秘密鍵のファイル名>.key 2048 <br> 作成した秘密鍵を使用して、CSRを作成する。<br> openssl req -sha256 -new -subj "/C=JP/ST=Tokyo/L=Tokyo City/O=Company Name/OU=Department/CN=*.<ドメイン名>" -key <秘密鍵のファイル名>.key -out <CSRのファイル名>.csr <br> 作成したCSRに署名を行って、サーバ証明書を発行する。<br> <u><サーバ証明書のファイル名>.csrファイルは、サーバ証明書を発行するためのファイルのため、削除してもよい。</u><br> openssl x509 -sha256 -req -days <証明書の有効日数 例. 3650> -in <CSRのファイル名>.csr -signkey <秘密鍵のファイル名>.key -out <サーバ証明書のファイル名>.crt <br> 秘密鍵のファイルのアクセス権限を変更する。<br> chmod 400 <秘密鍵のファイル名>.key <br> Webサーバに設置するものは、秘密鍵(.key拡張子)とサーバ証明書(.crt拡張子)の2つである。<br> <br> SSLを有効にするため、NginXの設定ファイルを編集する。<br> # パッケージ管理システムからインストールしている場合 sudo vi /etc/nginx/nginx.conf # ソースコードからインストールしている場合 sudo vi /<Nginxのインストールディレクトリ>/etc/nginx.conf <br> <syntaxhighlight lang="nginx"> # HTTPS server server { listen 443 ssl; # HTTP/2を有効にする場合は、http2と追記する server_name <ホスト名またはIPアドレスまたはドメイン名>; # サーバ証明書および中間証明書のファイルの指定 ssl_certificate <サーバ証明書のファイルのフルパス>; # 秘密鍵の指定 ssl_certificate_key <秘密鍵のファイルのフルパス>; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { root <ドキュメントルートのパス(絶対パスまたは相対パス)>; index index.html index.htm; } } </syntaxhighlight> <br> <u>ロードバランサにSSL証明書を設置して、SSL接続を終端することもできる。</u><br> <u>その場合、サーバ証明書は1つ用意して、ロードバランサからWebサーバまでの通信はhttpとなる。(httpsでも可能であるが、httpの方が負荷が軽いため)</u><br> <br> <u>httpを使用するメリットとして、Webサーバで受けるアクセスがhttpとなるので負荷が減るためである。(暗号化された通信を複合するために、SSLの接続を受けるのは負荷が掛かる)</u><br> <br> ==== 自己証明書の発行(クライアント側) ==== 秘密鍵を作成する。<br> openssl genrsa -out <秘密鍵のファイル名>.key 2048 <br> 作成した秘密鍵を使用して、クライアント側のCSRを作成する。<br> openssl req -sha256 -new -subj "/C=JP/ST=Tokyo/L=Tokyo City/O=Company Name/OU=Department/CN=*.<ドメイン名>" \ -key <秘密鍵のファイル名>.key -out <CSRのファイル名>.csr <br> 作成したCSRに署名を行って、サーバ証明書を発行する。<br> <u><サーバ証明書のファイル名>.csrファイルは、サーバ証明書を発行するためのファイルのため、削除してもよい。</u><br> openssl x509 -sha256 -req -days <証明書の有効日数 例. 3650> -in <CSRのファイル名>.csr -signkey <秘密鍵のファイル名>.key -out <サーバ証明書のファイル名>.crt <br> <u>クライアントPCがWindowsの場合、Windows PCにインポートするには、サーバ証明書のファイル(.crt拡張子)をpkcs12形式に変換する必要がある。</u><br> openssl pkcs12 -export -inkey <秘密鍵のファイル名>.key -in <サーバ証明書のファイル名>.crt \ -out <クライアント側にインポートするサーバ証明書のファイル名>.p12 -name <任意の識別子名> <br> 秘密鍵のファイルのアクセス権限を変更する。<br> chmod 400 <秘密鍵のファイル名>.key <br> CSRファイルは、サーバ証明書を発行するためのファイルであるため、削除してもよい。<br> <br> <u>サーバに設置するものは、サーバ証明書のファイル(.crt拡張子)と秘密鍵(.key拡張子)の2つである。</u><br> <u>Windows PCへ配布するものは、pkcs12形式に変換したクライアント側のサーバ証明書のファイル(.p12拡張子)である。</u><br> <br> Windows PCへクライアント側のサーバ証明書のファイル(.p12拡張子)をインポートする場合、ファイルを実行することによりインポート画面が起動するため、<br> インポート画面に沿って、サーバ証明書のファイル(.p12拡張子)をインポートする。<br> <br><br> == Xdebugの設定 == PHP-FPMの初期設定では、9000番ポートを使用している。<br> もし、古いバージョンのXdebug(バージョン2.x)を使用している場合、デフォルトのデバッグポートは9000番ポートを使用しているため、競合が発生する。<br> そのため、古いバージョンのXdebug(バージョン2.x)を使用する場合は、Xdebugのデバッグポートを変更する必要がある。<br> # PHP 7の場合 sudo vi /etc/php7/conf.d/xdebug.ini # PHP 8の場合 sudo vi /etc/php8/conf.d/xdebug.ini # ソースコードからPHPをインストールしている場合 vi /<PHPのインストールディレクトリ>/etc/php.ini <br> # xdebug.iniファイル または php.iniファイル xdebug.remote_port=<9000以外の値 例. 9003> <br> NginXとPHP-FPMを再起動する。<br> sudo systemctl restart nginx php-fpm <br><br> __FORCETOC__ [[カテゴリ:SUSE]]
インストール - NginX(SUSE)
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse