![見出し画像](https://assets.st-note.com/production/uploads/images/98736764/rectangle_large_type_2_8c5298da45c8238eda90e298a37596d7.png?width=1200)
【Linux】 Nginxの設定
作業ログ
Nginx
オープンソースのWebサーバソフトウェア。静的コンテンツに対する処理速度が高速であること、高性能であること、高効率なメモリ利用などがある。
設定例
レポジトリの確認
OSのベースに用意されているレポジトリにはNginxは含まれていなことがあるため、レポジトリがなければその確認が必要になる。
yum search nginx
----------------------------------------------------------
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.tsukuba.wide.ad.jp
* extras: ftp.tsukuba.wide.ad.jp
* updates: ftp.tsukuba.wide.ad.jp
========================= N/S matched: nginx =================
pcp-pmda-nginx.x86_64 : Performance Co-Pilot (PCP) metrics for the Nginx Webserver
Name and summary matches only, use "search all" for everything.
----------------------------------------------------------
# この表示ではレポジトリがないことを表している
レポジトリファイルは「/etc/yum.repos.d/」ディレクトリに追加する。
Nginx用のレポジトリファイルは「nginx公式ウェブサイト」に記載されている。
nginx公式ウェブサイト
「nginx公式ウェブサイト」>「nginxレポジトリ作成用ページ」にOSごとのレポジトリファイルが記載されている。
nginxレポジトリ作成用ページ
このサイトに記載されている内容をコピーして、レポジトリ用ファイルを作成します。利用しているLinuxのディストリビューションとバージョンに合わせて、URLの部分を変更する。
ls -s /etc/yum.repos.d/
----------------------------------------------------------
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Sources.repo CentOS-fasttrack.repo
CentOS-CR.repo CentOS-Media.repo CentOS-Vault.repo
----------------------------------------------------------
vi /etc/yum.repos.d/nginx.repo # nginx用のファイル例
----------------------------------------------------------
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/ # URL
gpgcheck=0
enabled=1 # レポジトリの有効化
----------------------------------------------------------
※ yum install epel-releaseでもリポジトリが含まれていれば可能である。
レポジトリ追加の確認
yum search nginx
----------------------------------------------------------
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.tsukuba.wide.ad.jp
* extras: ftp.tsukuba.wide.ad.jp
* updates: ftp.tsukuba.wide.ad.jp
===================== N/S matched: nginx =========================
nginx-debug.x86_64 : debug version of nginx
nginx-debuginfo.x86_64 : Debug information for package nginx
nginx-module-geoip.x86_64 : nginx GeoIP dynamic modules
nginx-module-geoip-debuginfo.x86_64 : Debug information for package nginx-module-geoip
nginx-module-image-filter.x86_64 : nginx image filter dynamic module
nginx-module-image-filter-debuginfo.x86_64 : Debug information for package nginx-module-image-filter
nginx-module-njs.x86_64 : nginx nginScript dynamic modules
nginx-module-njs-debuginfo.x86_64 : Debug information for package nginx-module-njs
nginx-module-perl.x86_64 : nginx Perl dynamic module
nginx-module-perl-debuginfo.x86_64 : Debug information for package nginx-module-perl
nginx-module-xslt.x86_64 : nginx xslt dynamic module
nginx-module-xslt-debuginfo.x86_64 : Debug information for package nginx-module-xslt
nginx-nr-agent.noarch : New Relic agent for NGINX and NGINX Plus
pcp-pmda-nginx.x86_64 : Performance Co-Pilot (PCP) metrics for the Nginx Webserver
nginx.x86_64 : High performance web server
unit.x86_64 : NGINX Unit
unit-devel.x86_64 : NGINX Unit (development tools)
Name and summary matches only, use "search all" for everything.
----------------------------------------------------------
インストール
yum info nginx # インストールパッケージの確認
yum -y install nginx
----------------------------------------------------------
・
・
・
nginx.x86_64 1:1.15.0-1.el7_4.ngx
完了しました!
----------------------------------------------------------
yum list installed | grep nginx # パッケージの確認
systemctl start nginx
systemctl enable nginx
systemctl status nginx
ps -aux | grep ngix # プロセスでも稼働確認ができる
ウェルカムページの確認
Nginxパッケージに用意されたデフォルトで用意されているウェブページを表示することが出来る。
「http://IPアドレス)」など、設定したアドレスを入れてブラウザで検索することで、正しく稼働していれば以下のような表示が出てくる。
![](https://assets.st-note.com/img/1677308773538-ReYwreWZSP.png?width=1200)
バーチャルホストの設定例
必要に応じて、事前にnginx用のユーザーを作成しておくのも良い。
/etc/nginx/nginx.confファイルの編集
vi /etc/nginx/nginx.conf
----------------------------------------------------------
http {
...
server {
listen 80;
server_name example.com;
root /var/www/example.com;
}
}
----------------------------------------------------------
# listen: ポート番号を指定。
# server_name: 仮想ホストの名前を指定。
# root: ドキュメントルートを指定
サイトを複数にする場合
http {
...
server {
listen 80;
server_name example.com;
root /var/www/example.com;
...
}
server {
listen 80 default_server;
server_name example2.com;
root /var/www/example2.com;
...
}
...
}
----------------------------------------------------------
※ default_server;
# 複数のサイトが運用されているウェブサーバーに、
# IPアドレス(ドメイン名ではなく)でHTTPリクエストした場合に応答するホストのこと
# 上記はexample2.comがデフォルトのバーチャルホストになる。
# 指定しなければ最初の記載がデフォルトになる
設定の確認
設定ファイルの間違いをチェックできる。以下は成功の例。
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
仮想ホスト用のディレクトリの作成
mkdir /var/www/example.com
vi /var/www/example.com/index.html
# /var/www/以下に、example.comという名前のディレクトリを作成。
# その下に、index.htmlファイルなどのコンテンツを配置。
nginxの再起動
systemctl restart nginx # 設定の反映
/etc/nginx/nginx.confファイルの詳細
user nginx;
server_tokens off;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
server_names_hash_bucket_size 128;
include /etc/nginx/conf.d/*.conf;
}
user: Nginxプロセスを実行するユーザーを指定する
worker_processes: nginxが実行するworkerプロセス数を設定。この数は、CPUのコア数に合わせて調整することが推奨されており、たとえば、2コアCPUを使用している場合は、worker_processesを2に設定する。autoと指定すると、自動的にプロセス数が決定される
error_log: エラーログの出力先を指定する
pid: - nginxプロセスのPIDファイルのパスを指定する。この例では、/run/nginx.pidというファイルにPIDが保存される。
events: イベントの設定を行うブロック。worker_connectionsで同時接続数を指定する
http: HTTPサーバーの設定を行うブロック
include: 他の設定ファイルを読み込む。/etc/nginx/mime.typesは、MIMEタイプの定義ファイルを指定している
default_type: nginxが返すデフォルトのMIMEタイプを設定。これは、MIMEタイプが設定されていない場合に適用。
log_format: アクセスログの書式を指定する。デフォルトのログフォーマットは、$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"
access_log: アクセスログの出力先を指定する
sendfile: onに設定すると、sendfileシステムコールを使用してファイルを配信。これにより、ネットワークオーバーヘッドを削減し、高速なファイル転送が可能になる
tcp_nopush on: TCPノーシュ動作を有効。NginxがHTTPレスポンスをクライアントに返す前にTCPパケットをバッファリングすることがなくなり、効率的な転送が可能になる。このオプションは、長いコンテンツを提供するWebサイトに最適。
keepalive_timeout: クライアントとの接続を保持する時間を設定。これにより、同じクライアントからの要求に対して、複数のリクエストを受け付けることができる
gzip on: クライアントがgzip圧縮をサポートしている場合、レスポンスをgzip圧縮。これにより、ネットワーク帯域幅の使用量が削減され、ページの読み込み時間が短縮される。
include: 他の設定ファイルを読み込む。
server_tokens off;: サーバーが使用するソフトウェアとバージョンの情報をレスポンスから隠す。これにより、攻撃者がサーバーの脆弱性を特定するのを困難にする。
server_names_hash_bucket_size 128: 仮想ホスト名のハッシュテーブルのバケット数を設定。この値が小さいと、仮想ホストの数が多い場合にパフォーマンスが低下する可能性がある。値を増やすと、パフォーマンスが向上するが、メモリ使用量も増加。128は、中程度のWebサイトに適した値。
client_max_body_size: アップロード可能なファイルサイズの制限を設定するための指定。例えば、1MBまでアップロード可能にしたい場合は、client_max_body_size 1m;とする。
server_name: 複数のドメインを扱う場合、正しいサーバーブロックにリクエストをルーティングするために使用される。server_name example.com www.example.com;のように指定する。
location: URLパスに基づいて、サーバーの振る舞いを定義するための設定。例えば、location / { ... }のように指定し、ルートURLにアクセスしたときに実行する内容を指定することができる。
proxy_pass: Nginxをリバースプロキシとして使用する場合、この設定によりリクエストを転送先のWebサーバーに転送することができる。proxy_pass http://localhost:8000;のように指定する。
ssl_certificate/ssl_certificate_key: SSL/TLSを使用する場合、証明書と秘密鍵を指定するために使用される。例えば、ssl_certificate /etc/ssl/certs/example.crt; ssl_certificate_key /etc/ssl/private/example.key;のように指定。
MIMEタイプとは
MIME(Multipurpose Internet Mail Extensions)は、ウェブサーバーがWebブラウザに送信するファイルの形式を識別するために使用される識別子のこと。たとえば、ウェブサーバーがHTMLファイルをブラウザに送信する場合、MIMEタイプ"text/html"を使用。
MIMEタイプは、ファイルの拡張子に基づいて自動的に設定されることがあるが、ウェブサーバーの設定で手動で設定することもできる。
text/html:HTMLドキュメント
text/plain:テキストドキュメント
image/jpeg:JPEG画像
image/png:PNG画像
application/pdf:PDFドキュメント
application/json:JSONファイル
application/xml:XMLファイル
audio/mpeg:MPEGオーディオファイル
video/mp4:MP4ビデオファイル
その他の設定
よろしければサポートお願いします!よりいい情報を発信します。