# Nginx 設定 Web サーバー バーチャルホスト

Nginx の読み方はエンジンエックスで Apache の C10K 問題に対応するために誕生した Web サーバー Nginx が主流になった今、 Nginx の基本構文、nginx.config の通常設定、Apache ではよく使う機能が Nginx の設定方法についてまとめました。

Nginx の特徴

  • 処理性能
  • 並行性
  • メモリ使用量
  • リバースプロキシ
  • ロードバランサ
  • HTTP キャッシュ

モジュール

  • main Nginx 動作全般の設定
  • events Events モジュールの設定(最大コネクションなど)
  • http HTTP_XXX モジュールの設定(Web サーバとしての設定)
  • server バーチャルホストの設定
  • location URI に応じた設定

デフォルト設定

user       www www;  ## Default: nobody
worker_processes  2;  ## Default: 1
error_log  logs/error.log;
pid        logs/nginx.pid;
worker_rlimit_nofile 8192;

events {
  worker_connections  1024;  ## Default: 1024
}

http {
  include    conf/mime.types;
  include    /etc/nginx/proxy.conf;
  include    /etc/nginx/fastcgi.conf;
  index    index.html index.htm index.php;

  default_type application/octet-stream;
  log_format   main '$remote_addr - $remote_user [$time_local]  $status '
    '"$request" $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for"';
  access_log   logs/access.log  main;
  sendfile     on;
  tcp_nopush   on;

  server {
    listen       80;
    server_name  hapicode.com www.hapicode.com;
    access_log   logs/hapicode.access.log  main;

    # serve static files
    location ~ ^/(images|javascript|js|css|flash|media|static)/  {
      root    /var/www/html;
      expires 30d;
    }

    # pass requests for dynamic content to rails/turbogears/zope, et al
    location / {
      proxy_pass      http://127.0.0.1:8080;
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
  }

  upstream big_server_com {
    server 127.0.0.3:8000 weight=5;
    server 127.0.0.3:8001 weight=5;
    server 192.168.0.1:8000;
    server 192.168.0.1:8001;
  }

  server { # simple load balancing
    listen          80;
    server_name     big.server.com;
    access_log      logs/big.server.access.log main;

    location / {
      proxy_pass      http://big_server_com;
    }
  }
}
ディレクティブ 説明
user nginx の実行ユーザ
worker_processes nginx の worker プロセスの数
error_log エラーログの出力先
pid PID ファイルの出力先
worker_connections 1 つの worker の同時に接続最大値
log_format アクセスログの書式
access_log アクセスログの出力先とログフォーマット
keepalive_timeout タイムアウト時間
server_tokens nginx バージョン情報の表示
default_type レスポンスのデフォルトの MIME タイプ
charset デフォルト文字コード
client_max_body_size リクエストボディの最大サイズ
listen IP アドレスやポート
server_name ホスト名
root ドキュメントルート
error_page エラーページ

http コンテキスト内に複数 server ディレクティブ記述することで仮想サーバーとして動作
http 内に記述できるディレクティブは、だいたい server 内にも記述できる

main プロセス制御、設定ファイル制御、ロギング
event イベント処理(パフォーマンス・チューニング
http web サーバ関連の設定
mail メール関連の設定

# Web サーバ設定

http{
    # listenはポートのみ指定でも可
    listen 80;
    server_name hapicode.com;
    root /var/www/html/hapicode.com;
    charset UTF-8;
}

# BASIC 認証を設定

auth_basic で BASIC 必須の旨とメッセージを、auth_basic_user_file で.htpasswd ファイルを設定する

http{
    auth_basic "BASIC AUTH";
    auth_basic_user_file /path/to/.htpasswd;
}

# SSL 対応

http{
    listen 443 ssl;
    ssl on;
    ssl_certificate      /path/to/cert.pem;
    ssl_certificate_key  /path/to/cert.key;
}

# Rewrite リダイレクト設定

server location if などのコンテキストで使える rewrite ルール

書式

rewrite  reg-exp  replacement  $[$ flag $]$;
# /a/b を /a-bに変換する
rewrite ^/(.*)/(.*)$ $1-$2 last;

rewrite の `last` ってなに?

rewrite ルールの最後にある単語はリダイレクトフラグです。リダイレクトフラグ指定することで、ステータスコードを変えることができます。

リダイレクトフラグ一覧

リダイレクトフラグ 説明
LAST rewrite の実行を終了し、書き換えられた URI に対して最初から location を再検索
BREAK rewrite の実行を終了
REDIRECT 一時的なリダイレクト コード 302
PERMANENT 恒久的なリダイレクト コード 301

location ブロックで last を指定すると、10 回以内に 確定すれば問題ありませんが、確定しない場合エラーとなります。

WWW ありと WWW なしに統一したい時に使える

ドメインにある www を省略するためのダイレクト

server {
  listen 80;
  server_name www.hapicode.com;

  rewrite ^(.*)$ https://hapicode.com$1 permanent;
}

HTTP から HTTPS にリダイレクト

server {
  listen 80;
  server_name hapicode.com;

  # ELB
  if ($http_x_forwarded_proto != https) {
    rewrite ^(.*)$ https://hapicode.com$1 permanent;
  }
}

# エイリアスを指定

http{
    server{
        location /foo{
            root /path/to/foo;
        }
        location /bar{
            root /path/to/bar;
        }
    }
}

# ファイル一覧を表示する/しない

http{
    # ファイル一覧を有効化
    autoindex on;
}

# インストール

nginx repo 編集

sudo vim /etc/yum.repos.d/nginx.repo

nginx ブロック追加

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

install command

sudo yum -y --enablerepo=nginx install nginx

systemctl command

# start
sudo systemctl start nginx

# stop
sudo systemctl stop nginx

# restart
sudo systemctl restart nginx

# status
sudo systemctl status nginx

# 自動起動
sudo systemctl enable nginx

# 自動起動停止
sudo systemctl disable nginx
2022-04-11
  • server
レンタルサーバー エックスサーバー レンタルサーバー エックスサーバー DMM fx DMM fx 開発/運用エンジニア募集プログラム 開発/運用エンジニア募集プログラム 外為ジャパンFX 新規口座開設促進 外為ジャパンFX 新規口座開設促進 eBay公式ショッピングサイト Qoo10 eBay公式ショッピングサイト Qoo10 Amazon.co.jpのカテゴリごとのページ

関連記事

DDNS 無料ダイナミック DNS サービス 4 つ
Docker compose で LAMP 環境作成
SPF メール送信なりすまし対策
Windows Mac Linux hosts ファイル場所
AWS Unresolved resource dependencies [AWSEBV2LoadBalancer] エラー
ディスク容量を確認する df コマンド
Laravel Address already in use の原因
content-security-policy 設定
AWS Elastic Beanstalk php.ini 設定変更
AWS Elastic Beanstalk 環境設定
AWS のタイムゾーンを UTC 協定世界時から JST 日本標準時に変更
Docker の基本的な使い方
Amazon DynamoDB 制限調査
AWS 504 Gateway Timeout エラー対応
Shell と Bash のいろいろ
Mac ターミナル SSH 接続設定
Elastic Beanstalk \$\SERVER['REMOTEADDR'] 取得できない
crontab 設定いろいろ
AWS EC2 の amazon-linux-extras の話
デプロイツール Capistrano
解決! xserver php バージョンアップした時に ssh 環境に反映されない
youtube 見れるように vpn サーバー建ててみた
xserver に vim インストール
xserver に nodejs インストール
レンタルサーバーなら xserver おすすめ理由
Docker command でドッカー練習する時のメモ
Windows10 Home に Docker 入れた時のメモ
Centos7 Webserver 構築の時のメモ