LoginSignup
76
70

More than 3 years have passed since last update.

Nginx について纏めてみる

Last updated at Posted at 2020-11-25

Linuc2の学習のために、Nginxについて纏めてみる。
Apacheと同じぐらい利用するが、こちらもあまり細かな設定までは気にしたことがないので、纏めてみた。

インストール

私は Amazon Linux2 を良く使いますが、Amazon Linux2 では標準で Nginx の yum 向けパッケージが提供されていません。

そのため、↓の手順で追加する必要がある。

Amazon Linux 2にExtrasレポジトリからNginxをインストールする

主な設定ファイル

ファイル 説明
/etc/nginx/nginx.conf メイン設定ファイル
/etc/nginx/conf.d/default.conf デフォルトサーバーの設定ファイル
/etc/nginx/conf.d/ssl/conf SSLの設定ファイル
/etc/nginx/conf.d/virtual.conf バーチャルホストの設定ファイル

基本書式 : ディレクティブ 値;

ブロック構造をとるディレクティブもあります。
親ブロックで設定した内容は子ブロックにも引き継がれます。

ディレクティブ{
他のディレクティブ; 
 ...
}

ディレクティブ 説明 コンテキスト
include 他の設定ファイルを読み込む 全て
user ワーカープロセスの実行ユーザー main
worker_processes ワーカープロセス数 main
worker_connections 1つのワーカープロセスが同時に処理できるコネクション数 events
log_format アクセスログの書式定義 http
access_log アクセスログのパスとログレベル http,server,location
error_log エラーログファイルのパスとログレベル main,http,server.location
listen リクエストを受け付けるポート番号 server
server_name サーバー名 server
keepalive_requests 一度の接続で受け付けることのできるリクエスト数の上限 http,server,location
keepalive_timeout キープアライブのタイムアウトまでの秒数 http,server,location
server_tokens バージョン番号の表示 http,server,location
root ドキュメントルート http,server,location
index インデックスファイル http,server,location
autoindex インデックスリスト表示のon/off http,server,location
error_page エラーコードとエラーページノURI http,server,location
rewrite リダイレクトの設定 server,location
fastcgi_pass FastCGI サーバへリクエストをプロキシする

コンテキスト内には様々なディレクティブでパラメータを指定します。

例えば、別のサイトへリダイレクトさせるには、次のように設定します。
※一時的なリダイレクトの場合は、permanent を redirect に書き換えます。

server {
  listen 80;
  server_name www.example.com;
  rewrite ^(.*)$ http://www.example.net$1 permanent;

SSL/TLS

SSL関連のディレクティブ 説明
ssl onなら有効
ssl_certificate サーバー証明書ファイル、中間CA証明書ファイル
ssl_certificate_key サーバー秘密鍵ファイル
ssl_protocols バージョン
ssl_ciphers 暗号アルゴリズム
nginx.conf
http {
  ssl_ciphers:ECDHE-RSA-AES128-SHA;
  ssl_protocols TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_session_tickets off;
  ssl_stapling on;
  ssl_stapling_verify on;
}

server {
  ssl on;
  listen 443 ssl;
  server_name www.example.com;
  ssl_certificate ssl/server.crt;
  ssl_certificate_key ssl/server.key;
  root /var/www/html;
  location / {
    index  index.html index.htm;
}

Nginx で ssl_protocols や ssl_ciphers を省略するとどうなるのか?

リバースプロキシ

リバースプロキシ関連のディレクティブ 説明
proxy_pass プロキシ先URI
proxy_http_version httpのバージョン
proxy_set_header プロキシ先に送られるリクエストヘッダの定義
nginx.conf
server{
  listen 80 default_server;
    server_name www.example.com;

    location / {
        proxy_pass    http://192.168.0.1;

        proxy_set_header    1.1;
        proxy_set_header    Host $http_host;
        proxy_set_header    X-Real-IP $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

クライアントからのアクセスではなく、リバースプロキシからのアクセスが記録されてしまいます。
そこでヘッダーを書き換えて、本来のアクセス元をWebサーバーが記録できるようにするためには、
proxy_set_header ディレクティブで、Hostヘッダ、X-Real-IPヘッダー、X-Forwarded-Forヘッダーを定義します。

76
70
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
76
70